c ++ - OpenFileMapping adgang nægtet i nogle exes

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et program, der skriver en variabel ved hjælp af


CreateFileMapping (INVALID\_HANDLE\_VALUE, NULL, PAGE\_EXECUTE\_READWRITE , 0, sizeof(data), "Local\testtest");


Og så har jeg DLL, der er indlæst i Firefox 's plugin-container.exe (kører som lokalt logget på bruger), der kalder


OpenFileMapping(FILE\_MAP\_READ,  FALSE, "Local\testtest");


Og det virker fint. Men når jeg prøver det samme med min dll indlæst i iexplore.exe (kører også som lokalt logget på bruger), får jeg en NULL værdi og GetLastError returnerer (0x5) ACCESS DENIED.


Jeg forsøgte at justere privilegierne i processen i dll'en for at tilføje SE\_CREATE\_GLOBAL\_NAME, men det gjorde ikke nogen forskel (og jeg forventede det ikke, da tilladelsen kun er nødvendig for at oprette et globalt navn, jeg tror og ikke en lokal, som jeg bruger) .


Ligegyldigt hvad jeg forsøger, med iexplore.exe, fejler det med ACCESS DENIED. Den eneste 1 vej rundt det jeg har fundet er at køre min setter program som administrator OG kør iexplore.exe som administrator og så er det muligt at læse det. Men jeg ser det ikke som en løsning, fordi jeg virkelig ønsker at undgå at køre hele exe under administrator.


Kender nogen en vej rundt om dette?

Bedste reference


Hvis sikkerheden ikke er et problem, men bare ønsker at få det til at fungere, kan du også indstille DACL af filmapping som NULL, som vil give fuld adgang til alle.


Følgende er et eksempel.


SetSecurityInfo(handle, SE\_KERNEL\_OBJECT, 
    DACL\_SECURITY\_INFORMATION | PROTECTED\_DACL\_SECURITY\_INFORMATION,
    NULL, NULL, NULL, NULL);


Men vær venlig at forstå, at dette ikke anbefales, hvis du bekymrer dig om sikkerhed.