Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2012
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. void ServerCatchcopy::setRights()
  2. {
  3.     QFlags<QFile::Permission> perms = ( QFile::ReadOwner | QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | QFile::ReadUser | QFile::WriteUser | QFile::ExeUser | QFile::ReadGroup | QFile::WriteGroup | QFile::ExeGroup | QFile::ReadOther | QFile::WriteOther | QFile::ExeOther );
  4.     if(!QFile::setPermissions("\\\\.\\pipe\\"+pathSocket,perms))
  5.     {
  6.         error_string="Socket error: Qt unable to set the rights";
  7.         emit error(error_string);
  8.     }
  9.     wchar_t lpPath[1024];
  10.     int size=QString("\\\\.\\pipe\\"+pathSocket).toWCharArray(lpPath);
  11.     emit error(QString::fromWCharArray(lpPath,size));
  12.     HANDLE windows_pipe = CreateFile(lpPath,READ_CONTROL|WRITE_DAC,0,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);
  13.     //HANDLE windows_pipe = CreateFileW(lpPath, GENERIC_READ|GENERIC_WRITE|FILE_FLAG_OVERLAPPED , 0, NULL, OPEN_EXISTING, 0, NULL);
  14.     if(windows_pipe == INVALID_HANDLE_VALUE)
  15.     {
  16.         void* lpBuffer;
  17.         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
  18.         NULL,
  19.         ::GetLastError(),
  20.         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  21.         (LPTSTR) &lpBuffer,
  22.         0,
  23.         NULL );
  24.         MessageBox(NULL,(LPCTSTR)lpBuffer, L"GetUserName Failed", MB_OK);
  25.         LocalFree( lpBuffer );
  26.         error_string="Socket error: INVALID_HANDLE_VALUE for windows";
  27.         emit error(error_string);
  28.         return;
  29.     }
  30.  
  31.     ACL* pOldDACL;
  32.     SECURITY_DESCRIPTOR* pSD = NULL;
  33.     #if defined(_M_X64) //_WIN64
  34.         //windows 64Bits
  35.         GetSecurityInfo(windows_pipe, SE_FILE_OBJECT , DACL_SECURITY_INFORMATION,NULL, NULL, &pOldDACL, NULL, (void**)&pSD);
  36.     #else
  37.         //windows 32Bits
  38.         GetSecurityInfo(windows_pipe, SE_FILE_OBJECT , DACL_SECURITY_INFORMATION,NULL, NULL, &pOldDACL, NULL, &pSD);
  39.     #endif
  40.  
  41.  
  42.     PSID pSid = NULL;
  43.     SID_IDENTIFIER_AUTHORITY authNt = SECURITY_NT_AUTHORITY;
  44.     AllocateAndInitializeSid(&authNt,2,SECURITY_BUILTIN_DOMAIN_RID,DOMAIN_ALIAS_RID_USERS,0,0,0,0,0,0,&pSid);
  45.  
  46.     EXPLICIT_ACCESS ea={0};
  47.     ea.grfAccessMode = GRANT_ACCESS;
  48.     ea.grfAccessPermissions = GENERIC_ALL;
  49.     ea.grfInheritance = CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE;
  50.     ea.Trustee.TrusteeType = TRUSTEE_IS_GROUP;
  51.     ea.Trustee.TrusteeForm = TRUSTEE_IS_SID;
  52.     ea.Trustee.ptstrName = (LPTSTR)pSid;
  53.  
  54.     ACL* pNewDACL = 0;
  55.     DWORD err = SetEntriesInAcl(1,&ea,pOldDACL,&pNewDACL);
  56.  
  57.     if(pNewDACL)
  58.     SetSecurityInfo(windows_pipe,SE_FILE_OBJECT,DACL_SECURITY_INFORMATION,NULL, NULL, pNewDACL, NULL);
  59.  
  60.     FreeSid(pSid);
  61.     LocalFree(pNewDACL);
  62.     LocalFree(pSD);
  63.     LocalFree(pOldDACL);
  64.     CloseHandle(windows_pipe);
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement