偵測資源取代
Windows 資源保護 (WRP) 可防止取代安裝為 Windows Vista 或 Windows Server 2008 一部分的基本系統檔案、資料夾和登錄機碼。
WRP 藉由偵測並防止嘗試取代受保護的資源,來保護 Windows Vista 或 Windows Server 2008 上的檔案、資料夾和登錄機碼。 此保護是以 DACL (DACL) 和存取控制清單為基礎, (針對受保護資源定義的 ACL) 。 修改受 WRP 保護之資源之完整存取權的許可權僅限於 TrustedInstaller。 WRP 保護的資源只能搭配 Windows 模組安裝程式服務使用 支援的資源取代機制 來變更。 嘗試修改 WRP 保護資源的應用程式永遠不會變更資源,而且可能會收到錯誤訊息,指出存取資源遭到拒絕。
應用程式和安裝程式可以使用 SfcIsFileProtected 和 SfcIsKeyProtected 函式來判斷檔案或登錄機碼是否受到保護。
**Windows Server 2003 和 Windows XP: **
Windows 檔案保護 () 偵測取代受保護系統檔案的嘗試,以保護系統檔案。 在一個受保護目錄中的檔案收到目錄變更通知之後,就會觸發此保護。 當其收到此通知時,它會判斷哪個檔案已變更。 如果檔案受到保護,則一般會查詢目錄檔案中的檔案簽章,以判斷新檔案是否為正確的版本。 如果檔案版本不正確,系統會根據檔案是否位於快取中,將檔案取代為來自快取或散發媒體的正確版本。 其會依下列順序搜尋正確的檔案:
- 搜尋快取目錄。
- 如果使用網路安裝來安裝系統,請搜尋網路安裝路徑。
- 如果系統是從 CD-ROM 安裝,請在 Windows CD-ROM 上搜尋。
如果其無法自動在前兩個位置找到檔案,則會顯示下列訊息:
如果系統是使用 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());
}
}