Здравствуйте! Вопрос такой, в Windows существует механизм Windows File Protection(WFP)( в более поздних версиях ОС - Windows Resource Protection(WRP) ). Данный механизм отвечает за восстановление системных файлов, которые были изменены. По умолчанию "эталоны" файлов лежат в "%WinDir%\System32\Dllcache" и измененные системные файлы заменяются файлами из этой папки. Собственно вопрос: Можно ли добавить свой список файлов на контроль с помощью механизмов WFP\WRP? И если можно, то как? В MSDN по этому поводу как-то смутно написано. Спасибо.
"Windows Resource Protection" не восстанавливает оригиналы файлов. Эта "технология" – ничто иное, как определённым образом выставленные списки контроля доступа. Полный доступ имеют сущности с сидом "TrustedInstaller", остальным сущностям (в т.ч. с сидами "System" и "Administrators") назначаются права для чтения\выполнения, хозяином файлов\папок назначается тоже "TrustedInstaller". Соответственно, такие же права доступа можно выставить и на свои файлы\ключи реестра\другие защищаемые объекты (SetFileSecurity(), etc). Насчёт Wirndows File Protection точно не скажем, но, насколько нам известно, список защищаемых файлов захардкожен в одной из системных библиотек, а мониторинг ведётся winlogon'ом посредством FindFirstChangeNotification\FindNextChangeNotification. Таким образом, можно сделать что-нибудь подобное, установив свою службу или что-нибудь.
Windows File Protection базируется на sfc.dll, которая опирается на полностью недокум. sfc_os.dll. Контроль осуществляется по сигнатурам, ответственные файлы/каталоги:..WinSxS, \System32\catroot и т.д.Список на сколко помнится sfc_os.dll берется из реестра. Да и зачем это все надо, если программно отключается без проблем.
>Windows File Protection базируется на sfc.dll, которая опирается на полностью недокум. sfc_os.dll. Хотелось бы сделать это прозрачным – хотя интерфейсы и не документированы, в скорлупе контроль таки приходит к FindNextChangeNotification et al (со всеми присущими недостатками подобного подхода, вроде невозможности со стопроцентной уверенностью сказать, что файл не будет открыт во временном пространстве между подменой его на контрафакт и воосстановлением оригинала).
Помню применял на XP-ях вот такой код для временной блокировки WFP: Код (Text): void WFPKill(char *lpFileName) { wchar_t lpFileNameW[MAX_PATH]={0}; PVOID fname = &lpFileNameW; MultiByteToWideChar(CP_ACP, 0, lpFileName, -1, lpFileNameW, sizeof(lpFileNameW)); HMODULE hLib =GetModuleHandle("sfc_os.dll"); if(hLib==NULL) hLib = LoadLibrary("sfc_os.dll"); PVOID func = GetProcAddress(hLib, MAKEINTRESOURCE(5)); if (func == 0) return; __asm { push -1 push fname push 0 call func } }