OpenFileMapping доступ запрещен в некоторых exe - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть программа, которая записывает переменную, используя

CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READWRITE , 0, sizeof(data), "Local\\testtest");

И затем у меня есть dll, который загружается в plugin-container.exe firefox (работает как локально вошедший в систему пользователь), который вызывает

OpenFileMapping(FILE_MAP_READ,  FALSE, "Local\\testtest");

И это прекрасно работает.Однако, когда я пытаюсь сделать то же самое с моей dll, загруженной в iexplore.exe (также работающей как локально вошедший в систему пользователь), я получаю значение NULL и GetLastError возвращает (0x5) ACCESS DENIED.процесс в dll для добавления SE_CREATE_GLOBAL_NAME, однако, это не имело никакого значения (и я не ожидал этого, поскольку разрешение требуется только для создания глобального имени, которое я считаю, а не локального, которое я использую).

Независимо от того, что я пытаюсь, с iexplore.exe происходит сбой с ACCESS DENIED.Единственный способ обойти это - запустить программу установки с правами администратора и запустить iexplore.exe с правами администратора, после чего он сможет ее прочитать.Но я не рассматриваю это как решение, потому что я действительно хочу избежать запуска всего exe под администратором.

Кто-нибудь знает способ обойти это?

1 Ответ

1 голос
/ 17 апреля 2011

Если безопасность не связана с проблемой, но вы просто хотите, чтобы она работала, вы можете также установить DACL сопоставления файлов на NULL, который затем предоставит всем полный доступ.

Ниже приведен пример.

SetSecurityInfo(handle, SE_KERNEL_OBJECT, 
    DACL_SECURITY_INFORMATION | PROTECTED_DACL_SECURITY_INFORMATION,
    NULL, NULL, NULL, NULL);

Но, пожалуйста, поймите, что это не рекомендуется, если вы беспокоитесь о безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...