2012-06-01 9 views
2

Этот код дает мне доступ к отказам при попытке открыть ранее созданное сопоставление файлов. Помощь, помощь, помощь.Доступ запрещен при создании CreateFileMapping при запуске под разными учетными записями пользователей с помощью runas

  • ОС: WinXP SP3, без быстрого переключения пользователей.
  • Следующий код запускается на двух разных учетных записях пользователей, используя runas.
  • У обоих пользователей есть права администратора.

тестовый код:

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 ...

Смежные вопросы