Вопрос

Я пытаюсь подключить процесс CGI к службе Windows с помощью именованного канала.Мой код работает нормально, используя другой сервер на моей машине разработки, но в IIS возникают проблемы с безопасностью, когда я вызываю CreateFile() в процессе CGI.

Служба Windows является сервером именованного канала, поэтому процесс CGI пытается подключиться к этому именованному каналу в качестве клиента.

Я нашел код, который создает глобальный дескриптор безопасности с флагом SECURITY_WORLD_SID_AUTHORITY, вызвав:

  InitializeAcl()
  AddAccessAllowedAce()
  SetSecurityDescriptorDacl()

Но я не совсем понимаю эту концепцию.Я предполагаю, что Pipe Server CreateNamedPipe() должен быть вызван с этим ACL в структуре SECURITY_ATTRIBUTES, но как насчет клиента Named Pipe?

Могу ли я создать еще один глобальный дескриптор безопасности и вызвать с ним CreateFile()?

Я унаследую это с

 SecurityAttributes.bInheritHandle   = TRUE;

Могу ли я просто передать Null в вызове CreateFile()?

Это было полезно?

Решение

Поскольку канал создается сервером, только серверу необходимо указать ACL, клиент использует NULL для ACL.

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

Вы можете использовать Process Explorer на sysinternals чтобы просмотреть именованные каналы, открытые в процессе, а затем просмотреть список ACL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top