Нужно переименовать системную библиотеку. В XP всё было без проблем, а в Windows 7 нужны права TrustedInstaller. Как их добавить програмно для нужного файла? или вообще отключить TrustedInstaller?
Всё разобрался с security функциями. Кому интересно так можно отключить TrustedInstaller Код (Text): HANDLE hToken; const char FileName[]="C:\\Windows\\System32\\user32.dll"; OpenProcessToken((HANDLE)-1,TOKEN_ALL_ACCESS,&hToken); LUID luid; TOKEN_PRIVILEGES tp; memset(&tp,0,sizeof(tp)); LookupPrivilegeValueA(0,"SeTakeOwnershipPrivilege",&tp.Privileges->Luid); tp.PrivilegeCount=1; tp.Privileges->Attributes=0x00000002;//SE_PRIVILEGE_ENABLE; AdjustTokenPrivileges(hToken,0,&tp,sizeof(tp),0,0); DWORD rl; GetTokenInformation(hToken,TokenUser,0,0,&rl); PTOKEN_USER ptu=(PTOKEN_USER)malloc(rl); GetTokenInformation(hToken,TokenUser,ptu,rl,&rl); rl=0; GetFileSecurityA(FileName,DACL_SECURITY_INFORMATION,0,0,&rl); PSECURITY_DESCRIPTOR psd=new char[rl]; GetFileSecurityA(FileName,DACL_SECURITY_INFORMATION,psd,rl,&rl); PACL pacl; BOOL dp,dp1; GetSecurityDescriptorDacl(psd,&dp,&pacl,&dp1); ACL_SIZE_INFORMATION asi; memset(&asi,0,sizeof(asi)); GetAclInformation(pacl,&asi,sizeof(asi),AclSizeInformation); SECURITY_DESCRIPTOR sdnew; InitializeSecurityDescriptor(&sdnew,SECURITY_DESCRIPTOR_REVISION); DWORD lenAcl=asi.AclBytesInUse/*sizeof(ACL)*/+sizeof(ACCESS_ALLOWED_ACE)-sizeof(DWORD); lenAcl+=GetLengthSid(ptu->User.Sid); PACL pnewacl=(PACL)malloc(lenAcl); InitializeAcl(pnewacl,lenAcl,ACL_REVISION); //заполняю правами из старого ACL for (int i=0;i<asi.AceCount;i++){ PACE_HEADER ace; GetAce(pacl,i,(LPVOID *)&ace); AddAce(pnewacl,ACL_REVISION,i,ace,ace->AceSize); } //поправка AddAccessAllowedAce(pnewacl, ACL_REVISION,GENERIC_ALL,ptu->User.Sid); SetSecurityDescriptorDacl(&sdnew,1,pnewacl,0); SetSecurityDescriptorOwner(&sdnew,ptu->User.Sid,0); rl=0; SetFileSecurityA(FileName, OWNER_SECURITY_INFORMATION,&sdnew); SetFileSecurityA(FileName, DACL_SECURITY_INFORMATION,&sdnew); CloseHandle(hToken); и после переименовать системный файл