У меня есть два приложения:
первый: запуск с привилегиями SYSTEM, запущенными сервисом, и
второй: работает все еще как SYSTEM, но с более низкими привилегиями (SE_GROUP_INTEGRITY = "S-1-16-4096")
Я хочу, чтобы оба приложения общались через общую память. Обе должны читать и писать.
В моем первом приложении я создаю сопоставление файлов с конкретными SECURITY_ATTRIBUTES, которые я узнал из этого поста: Как разделить память между службами и пользовательскими процессами?
SECURITY_ATTRIBUTES attributes;
ZeroMemory(&attributes, sizeof(attributes));
attributes.nLength = sizeof(attributes);
ConvertStringSecurityDescriptorToSecurityDescriptor(
L"D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GWR;;;IU)",
SDDL_REVISION_1,
&attributes.lpSecurityDescriptor,
NULL);
HANDLE test = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, "Global\\Test");
Все работает, как и ожидалось, но если я тогда попытаюсь открыть сопоставление файлов во втором приложении, оно вылетает с нарушением прав доступа в OpenFileMapping.
HANDLE test = OpenFileMapping(FILE_ALL_ACCESS, FALSE, 1024, "Global\\Test");