У меня есть приложение для Windows, которое работает без повышения прав. Мне нужно создать объект сопоставления файлов для массива памяти, который будет совместно использоваться всеми работающими экземплярами приложения (обратите внимание, что некоторые из этих экземпляров могут работать в разных сеансах входа в систему).
Я вызываю CreateFileMapping API для его создания с глобальным именем, т. е. Global\sharedname
, с использованием дескриптора безопасности, который дает all
доступ к everyone
, но этот API дает сбой с кодом ошибки 5 или ERROR_ACCESS_DENIED
.
Затем я начал читать документы и обнаружил, что для моего процесса требуется привилегия SeCreateGlobalPrivilege
. Но затем, когда я пытаюсь назначить эту привилегию, AdjustTokenPrivileges возвращает код ошибки ERROR_NOT_ALL_ASSIGNED
, и я застрял....
Так в чем здесь хитрость, как этот чертов MS хочет, чтобы мы это сделали???
PS. Я могу без проблем создать глобальный именованный мьютекс (для синхронизированного доступа к общей памяти) с тем же дескриптором безопасности all access for everyone
и именем Global\sharedmutex
.