2012-06-01 103 views
2

當試圖打開先前創建的文件映射時,此代碼給我提供拒絕訪問錯誤。幫助,幫助,幫助。訪問被拒絕CreateFileMapping在不同的用戶帳戶下運行時用runas

  • 操作系統:WinXP SP3,沒有快速的用戶切換。
  • 以下代碼使用runas在2個不同的用戶帳戶上運行。
  • 這兩個用戶都有管理員權限。

測試代碼:

SECURITY_DESCRIPTOR sd; 

if(!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION)) 
    printf("InitializeSecurityDescriptor failed %d\n", GetLastError()); 

if(!SetSecurityDescriptorDacl(&sd, true, 0, false)) 
    printf("SetSecurityDescriptorDacl failed %d\n", GetLastError()); 

SECURITY_ATTRIBUTES sa; 
sa.nLength = sizeof(sa); 
sa.lpSecurityDescriptor = &sd; 
sa.bInheritHandle = false; 

HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, 0x1000, "Global\\MyMap"); 
void* pMap = 0; 
if(hMap) { 
    pMap = MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0x1000); 
} else { 
    printf("CreateFileMapping failed: %d\n", GetLastError()); 
    hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, false, "Global\\MyMap"); 
    if(hMap) { 
     printf("OpenFileMapping sucess!\n"); 
    } else { 
     printf("OpenFileMapping failed: %d\n", GetLastError()); 
    } 
} 
if(pMap) { 
    printf("Sucess!\n"); 
    printf("DW: %X", *(DWORD*)pMap); 
    *(DWORD*)pMap = 0xDEADBEEF; 
} else { 
    printf("MapViewOfFile failed: %d\n", GetLastError()); 
} 

cin.ignore(); 

if(pMap) 
    UnmapViewOfFile(pMap); 

if(hMap) 
    CloseHandle(hMap); 

回答

1

你忘了SECURITY_ATTRIBUTES結構傳遞到的CreateFileMapping ...

相關問題