共用方式為


偵測資源取代

Windows 資源保護 (WRP) 可防止取代安裝為 Windows Vista 或 Windows Server 2008 一部分的基本系統檔案、資料夾和登錄機碼。

WRP 藉由偵測並防止嘗試取代受保護的資源,來保護 Windows Vista 或 Windows Server 2008 上的檔案、資料夾和登錄機碼。 此保護是以 DACL (DACL) 和存取控制清單為基礎, (針對受保護資源定義的 ACL) 。 修改受 WRP 保護之資源之完整存取權的許可權僅限於 TrustedInstaller。 WRP 保護的資源只能搭配 Windows 模組安裝程式服務使用 支援的資源取代機制 來變更。 嘗試修改 WRP 保護資源的應用程式永遠不會變更資源,而且可能會收到錯誤訊息,指出存取資源遭到拒絕。

應用程式和安裝程式可以使用 SfcIsFileProtectedSfcIsKeyProtected 函式來判斷檔案或登錄機碼是否受到保護。

**Windows Server 2003 和 Windows XP: **

Windows 檔案保護 () 偵測取代受保護系統檔案的嘗試,以保護系統檔案。 在一個受保護目錄中的檔案收到目錄變更通知之後,就會觸發此保護。 當其收到此通知時,它會判斷哪個檔案已變更。 如果檔案受到保護,則一般會查詢目錄檔案中的檔案簽章,以判斷新檔案是否為正確的版本。 如果檔案版本不正確,系統會根據檔案是否位於快取中,將檔案取代為來自快取或散發媒體的正確版本。 其會依下列順序搜尋正確的檔案:

  1. 搜尋快取目錄。
  2. 如果使用網路安裝來安裝系統,請搜尋網路安裝路徑。
  3. 如果系統是從 CD-ROM 安裝,請在 Windows CD-ROM 上搜尋。

如果其無法自動在前兩個位置找到檔案,則會顯示下列訊息:

在快取目錄或網路安裝路徑中找不到檔案時所顯示的群組訊息

如果系統是使用 CD-ROM 安裝,則一併顯示下列訊息:

顯示于提示使用者插入 Windows cd-rom 的群組訊息

如果系統管理員未登入,則其無法顯示這其中一個對話方塊。 其會在系統管理員登入之後顯示對話方塊。

其也會記錄系統事件記錄檔中的檔案取代嘗試。 如果系統管理員取消了正確檔案的還原,則一般會記錄取消作業。

擷取受保護的檔案清單

下列範例示範應用程式和安裝程式如何使用 SfcGetNextProtectedFile 函式來取得受保護檔案的完整清單。

#include <windows.h>
#include <sfc.h>
#include <stdio.h>

#pragma comment(lib, "sfc")

void wmain (int argc, WCHAR ** argv)
{  UNREFERENCED_PARAMETER(argc);    
   PROTECTED_FILE_DATA pfd = {0};
   BOOL fResult;

   wprintf (L"List of protected files:\n\n", argv[1]);

   while (FALSE != (fResult = SfcGetNextProtectedFile (NULL, &pfd)))
   {
      wprintf (L"   %lu   %s\n", pfd.FileNumber, pfd.FileName);
   }

   if (GetLastError() == ERROR_NO_MORE_FILES)
   {
      wprintf (L"\nAll %lu protected files listed\n", pfd.FileNumber);
   }
   else
   {
      wprintf (L"\nerror %lu: SfcGetNextProtectedFile() failed unexpectedly\n", GetLastError());
   }

}