Отключение TrustedInstaller Windows 7? Защита файлов

Тема в разделе "WASM.WIN32", создана пользователем Aids, 14 ноя 2010.

  1. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Нужно переименовать системную библиотеку. В XP всё было без проблем, а в Windows 7 нужны права TrustedInstaller. Как их добавить програмно для нужного файла? или вообще отключить TrustedInstaller?
     
  2. CrystalMS

    CrystalMS New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    51
    Добавить файлу DACL с FILE_ALL_ACCESS для нужного SID.
     
  3. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Всё разобрался с security функциями. Кому интересно так можно отключить TrustedInstaller
    Код (Text):
    1.     HANDLE hToken;
    2.     const char FileName[]="C:\\Windows\\System32\\user32.dll";
    3.     OpenProcessToken((HANDLE)-1,TOKEN_ALL_ACCESS,&hToken);
    4.  
    5.     LUID luid;
    6.     TOKEN_PRIVILEGES tp;
    7.     memset(&tp,0,sizeof(tp));
    8.  
    9.     LookupPrivilegeValueA(0,"SeTakeOwnershipPrivilege",&tp.Privileges->Luid);
    10.     tp.PrivilegeCount=1;
    11.     tp.Privileges->Attributes=0x00000002;//SE_PRIVILEGE_ENABLE;
    12.     AdjustTokenPrivileges(hToken,0,&tp,sizeof(tp),0,0);
    13.  
    14.  
    15.     DWORD rl;
    16.     GetTokenInformation(hToken,TokenUser,0,0,&rl);
    17.     PTOKEN_USER ptu=(PTOKEN_USER)malloc(rl);
    18.     GetTokenInformation(hToken,TokenUser,ptu,rl,&rl);
    19.     rl=0;
    20.     GetFileSecurityA(FileName,DACL_SECURITY_INFORMATION,0,0,&rl);
    21.     PSECURITY_DESCRIPTOR psd=new char[rl];
    22.     GetFileSecurityA(FileName,DACL_SECURITY_INFORMATION,psd,rl,&rl);
    23.     PACL pacl;
    24.     BOOL dp,dp1;
    25.     GetSecurityDescriptorDacl(psd,&dp,&pacl,&dp1);
    26.     ACL_SIZE_INFORMATION asi;
    27.     memset(&asi,0,sizeof(asi));
    28.    
    29.     GetAclInformation(pacl,&asi,sizeof(asi),AclSizeInformation);
    30.     SECURITY_DESCRIPTOR sdnew;
    31.     InitializeSecurityDescriptor(&sdnew,SECURITY_DESCRIPTOR_REVISION);
    32.     DWORD lenAcl=asi.AclBytesInUse/*sizeof(ACL)*/+sizeof(ACCESS_ALLOWED_ACE)-sizeof(DWORD);
    33.     lenAcl+=GetLengthSid(ptu->User.Sid);
    34.     PACL pnewacl=(PACL)malloc(lenAcl);
    35.     InitializeAcl(pnewacl,lenAcl,ACL_REVISION);
    36.     //заполняю правами из старого ACL
    37.     for (int i=0;i<asi.AceCount;i++){
    38.         PACE_HEADER ace;
    39.         GetAce(pacl,i,(LPVOID *)&ace);
    40.         AddAce(pnewacl,ACL_REVISION,i,ace,ace->AceSize);
    41.     }
    42.     //поправка     
    43.     AddAccessAllowedAce(pnewacl, ACL_REVISION,GENERIC_ALL,ptu->User.Sid);
    44.     SetSecurityDescriptorDacl(&sdnew,1,pnewacl,0);
    45.     SetSecurityDescriptorOwner(&sdnew,ptu->User.Sid,0);
    46.  
    47.     rl=0;
    48.     SetFileSecurityA(FileName, OWNER_SECURITY_INFORMATION,&sdnew);
    49.     SetFileSecurityA(FileName, DACL_SECURITY_INFORMATION,&sdnew);
    50.     CloseHandle(hToken);
    и после переименовать системный файл