Detectando a substituição de recursos
O WRP (Proteção de Recursos do Windows) impede a substituição de arquivos essenciais do sistema, pastas e chaves do Registro instaladas como parte do Windows Vista ou do Windows Server 2008.
O WRP protege arquivos, pastas e chaves do Registro no Windows Vista ou no Windows Server 2008 detectando e impedindo tentativas de substituir recursos protegidos. Essa proteção se baseia em uma DACL (lista de controle de acesso discricionário) do Windows e listas de controle de acesso (ACL) definidas para recursos protegidos. A permissão para acesso completo para modificar recursos protegidos por WRP é restrita ao TrustedInstaller. Os recursos protegidos por WRP só podem ser alterados usando os Mecanismos de Substituição de Recursos Com Suporte com o serviço Instalador de Módulos do Windows. Os aplicativos que tentam modificar um recurso protegido por WRP nunca alteram o recurso e podem receber uma mensagem de erro informando que o acesso ao recurso foi negado.
Aplicativos e instaladores podem usar as funções SfcIsFileProtected e SfcIsKeyProtected para determinar se um arquivo ou chave do Registro está protegido.
**Windows Server 2003 e Windows XP: **
A Proteção de Arquivos do Windows (WFP) protege os arquivos do sistema detectando tentativas de substituir arquivos do sistema protegidos. Essa proteção é disparada depois que a WFP recebe uma notificação de alteração de diretório para um arquivo em um diretório protegido. Quando a WFP recebe essa notificação, ela determina qual arquivo foi alterado. Se o arquivo estiver protegido, o WFP procurará a assinatura do arquivo em um arquivo de catálogo para determinar se o novo arquivo é a versão correta. Se a versão do arquivo não estiver correta, o sistema substituirá o arquivo pela versão correta do cache ou da mídia de distribuição, dependendo se o arquivo está localizado no cache. O WFP pesquisa o arquivo correto na seguinte ordem:
- Pesquise o diretório de cache.
- Pesquise o caminho de instalação de rede, se o sistema foi instalado usando a instalação de rede.
- Pesquise em um CD-ROM do Windows, se o sistema foi instalado do CD-ROM.
Se o WFP não puder localizar automaticamente o arquivo nos dois primeiros locais, ele exibirá a seguinte mensagem:
Se o sistema tiver sido instalado usando um CD-ROM, o WFP exibirá a seguinte mensagem:
Se um administrador não estiver conectado, o WFP não poderá exibir nenhuma dessas caixas de diálogo. O WFP exibirá a caixa de diálogo depois que um administrador fizer logon.
O WFP também registra a tentativa de substituição de arquivo no log de eventos do sistema. Se o administrador cancelou a restauração do arquivo correto, o WFP registra o cancelamento em log.
Recuperando a lista de arquivos protegidos
O exemplo a seguir mostra como aplicativos e instaladores podem usar a função SfcGetNextProtectedFile para obter a lista completa de arquivos protegidos.
#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());
}
}