Windows Named-труба ACL под IIS - PullRequest
2 голосов
/ 27 марта 2009

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

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

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

  InitializeAcl()
  AddAccessAllowedAce()
  SetSecurityDescriptorDacl()

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

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

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

 SecurityAttributes.bInheritHandle   = TRUE;

Должен ли я просто передать Null в вызове CreateFile ()?

1 Ответ

1 голос
/ 27 марта 2009

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

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

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

...