Compartilhar via


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:

  1. Pesquise o diretório de cache.
  2. Pesquise o caminho de instalação de rede, se o sistema foi instalado usando a instalação de rede.
  3. 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:

mensagem wfp exibida quando o arquivo não encontrado no diretório de cache ou no caminho de instalação da rede

Se o sistema tiver sido instalado usando um CD-ROM, o WFP exibirá a seguinte mensagem:

mensagem wfp exibida para solicitar que o usuário insira o cd-rom do Windows

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());
   }

}