Пытаюсь удалить системную dll из system32 в windows 7 x86, использую ZwDeleteFile, в ответ - болт. При попытке сделать это из xp live cd получаю тоже самое. Подскажите в чем проблема. Спасибо.
DACL посмотри на файл. Начиная с Vista удаление и модификация некоторых системных файлов разрешена только коду, выполняемому от имени TrustedInstaller. Т.е. по факту даже учётка админа не поможет удалить такой файл. Сделано грамотно, кстати, как раз для установщиков типа службы Windows Installer. В твоём случае достаточно будет поменять/добавить запись в DACL для того пользователя, под которым ты будешь удалять файл (или для всех пользователей, но я бы так делать не стал).
Код (Text): bool GetOwnership (LPCSTR p) { HANDLE hToken=NULL; PTOKEN_USER ptuUser=NULL; DWORD dwSize=NULL; SECURITY_DESCRIPTOR sdSID; int bWasEnabled; bool ret1=false,ret2=false; RtlAdjustPrivilege(SE_TAKE_OWNERSHIP_PRIVILEGE,TRUE,FALSE,(PBOOLEAN)& bWasEnabled); OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hToken); ptuUser=(PTOKEN_USER)malloc(0x200); GetTokenInformation(hToken,(TOKEN_INFORMATION_CLASS)1,ptuUser,0x200,& dwSize); InitializeSecurityDescriptor (&sdSID,SECURITY_DESCRIPTOR_REVISION); SetSecurityDescriptorOwner (&sdSID,ptuUser->User.Sid,false); CloseHandle(hToken); ret1=SetFileSecurityA(p,OWNER_SECURITY_INFORMATION,&sdSID); if (!ret1) return false; ret2=SetFileSecurityA(p,DACL_SECURITY_INFORMATION,&sdSID); if (!ret2) return false; return true; }