All pastes #624458 Raw Edit

Anonymous

public cpp v1 · immutable
·published 2007-07-18 09:00 UTC
rendered paste body
#include <stdio.h>#include <windows.h>#include <tchar.h>#include "accctrl.h"#include "aclapi.h"int main(int argc, char **argv){DWORD dwRtnCode = 0;PSID pSidOwner;BOOL bRtnBool = TRUE;LPTSTR AcctName, DomainName;DWORD dwAcctName = 1, dwDomainName = 1;SID_NAME_USE eUse = SidTypeUnknown;HANDLE hFile;PSECURITY_DESCRIPTOR pSD;// Get the handle of the file object.hFile = CreateFile(                  "myfile.txt",                  GENERIC_READ,                  FILE_SHARE_READ,                  NULL,                  OPEN_EXISTING,                  FILE_ATTRIBUTE_NORMAL,                  NULL);// Check GetLastError for CreateFile error code.if (hFile == INVALID_HANDLE_VALUE) {          DWORD dwErrorCode = 0;          dwErrorCode = GetLastError();          _tprintf(TEXT("CreateFile error = %d\n"), dwErrorCode);          return -1;}// Allocate memory for the SID structure.pSidOwner = (PSID)GlobalAlloc(          GMEM_FIXED,          sizeof(PSID));// Allocate memory for the security descriptor structure.pSD = (PSECURITY_DESCRIPTOR)GlobalAlloc(          GMEM_FIXED,          sizeof(PSECURITY_DESCRIPTOR));// Get the owner SID of the file.dwRtnCode = GetSecurityInfo(                  hFile,                  SE_FILE_OBJECT,                  OWNER_SECURITY_INFORMATION,                  &pSidOwner,                  NULL,                  NULL,                  NULL,                  &pSD);// Check GetLastError for GetSecurityInfo error condition.if (dwRtnCode != ERROR_SUCCESS) {          DWORD dwErrorCode = 0;          dwErrorCode = GetLastError();          _tprintf(TEXT("GetSecurityInfo error = %d\n"), dwErrorCode);          return -1;}// First call to LookupAccountSid to get the buffer sizes.bRtnBool = LookupAccountSid(                  NULL,           // local computer                  pSidOwner,                  AcctName,                  (LPDWORD)&dwAcctName,                  DomainName,                  (LPDWORD)&dwDomainName,                  &eUse);// Reallocate memory for the buffers.AcctName = (char *)GlobalAlloc(          GMEM_FIXED,          dwAcctName);// Check GetLastError for GlobalAlloc error condition.if (AcctName == NULL) {          DWORD dwErrorCode = 0;          dwErrorCode = GetLastError();          _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode);          return -1;}    DomainName = (char *)GlobalAlloc(           GMEM_FIXED,           dwDomainName);    // Check GetLastError for GlobalAlloc error condition.    if (DomainName == NULL) {          DWORD dwErrorCode = 0;          dwErrorCode = GetLastError();          _tprintf(TEXT("GlobalAlloc error = %d\n"), dwErrorCode);          return -1;    }    // Second call to LookupAccountSid to get the account name.    bRtnBool = LookupAccountSid(          NULL,                          // name of local or remote computer          pSidOwner,                     // security identifier          AcctName,                      // account name buffer          (LPDWORD)&dwAcctName,          // size of account name buffer           DomainName,                    // domain name          (LPDWORD)&dwDomainName,        // size of domain name buffer          &eUse);                        // SID type    // Check GetLastError for LookupAccountSid error condition.    if (bRtnBool == FALSE) {          DWORD dwErrorCode = 0;          dwErrorCode = GetLastError();          if (dwErrorCode == ERROR_NONE_MAPPED)              _tprintf(TEXT("Account owner not found for specified SID.\n"));          else               _tprintf(TEXT("Error in LookupAccountSid.\n"));          return -1;    } else if (bRtnBool == TRUE)         // Print the account name.        _tprintf(TEXT("Account owner = %s\n"), AcctName);    return 0;}