Передача объекта SECURITY_ATTRIBUTES через именованный канал - PullRequest
0 голосов
/ 02 марта 2020

У меня есть два процесса, взаимодействующих через именованный канал.

Один из них (назовем это процессом A) использует функцию CreateProcessW, передавая несколько параметров. Я пытаюсь отправить эти параметры для обработки B.

Как отправить объекты типа LPSECURITY_ATTRIBUTES из A в B, используя именованный канал? Это указатель на структуру, которая в свою очередь имеет указатель на другую структуру.

Как мне go написать об этом, я пишу каждый объект в канал или я пытаюсь сериализовать структуру, используя библиотеку типа Boost? Или есть другой способ справиться с такими структурами?

1 Ответ

0 голосов
/ 03 марта 2020

В качестве комментария вы можете передать формат строки дескриптора безопасности другому процессу, используя ConvertSecurityDescriptorToStringSecurityDescriptor в процессе A, и преобразовать обратно с ConvertStringSecurityDescriptorToSecurityDescriptor в процессе B:

    LPWSTR StringSecurityDescriptor = NULL;
    ULONG Len = 0;
    SECURITY_INFORMATION flag; //set flag = whatever your want to convert into string format and send to process B
    ConvertSecurityDescriptorToStringSecurityDescriptorW(ppSecurityDescriptor, SDDL_REVISION_1, flag,&StringSecurityDescriptor, &Len);
    WriteFile(hPipe, StringSecurityDescriptor, Len*sizeof(WCHAR), &dwritten, NULL);
    LocalFree(StringSecurityDescriptor);

И если дескриптор безопасности имеет значение Self-Relative :

, дескриптор безопасности сохраняет структуру SECURITY_DESCRIPTOR и связанную информацию о безопасности в непрерывном блоке memory.

дескриптор безопасности всегда начинается со структуры SECURITY_DESCRIPTOR, но другие компоненты дескриптора безопасности могут следовать структуре в любом порядке. Вместо использования адресов памяти компоненты дескриптора безопасности идентифицируются смещениями от начала дескриптора. Этот формат полезен, когда дескриптор безопасности должен храниться на диске, передаваться по протоколу связи или копироваться в памяти.

Или использовать MakeSelfRelativeSD для создания дескриптор безопасности в относительном формате из абсолютного формата в качестве шаблона.

Кроме того, вы также можете использовать SetSecurityInfo для установки информации о безопасности другого процесса.

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