2

我正在尝试使用命名管道将 CGI 进程连接到我的 Windows 服务。我的代码在我的开发机器上使用另一台服务器运行良好,但在 IIS 上,当我在 CGI 进程中调用 CreateFile() 时会出现安全问题。

Windows 服务是命名管道服务器,因此 CGI 进程试图作为客户端连接到该命名管道。

我已经挖掘了一些代码,这些代码通过调用以下方法创建了一个带有 SECURITY_WORLD_SID_AUTHORITY 标志的全局安全描述符:

  InitializeAcl()
  AddAccessAllowedAce()
  SetSecurityDescriptorDacl()

但我真的不明白这个概念。我假设管道服务器 CreateNamedPipe() 必须在 SECURITY_ATTRIBUTES 结构中使用此 ACL 调用,但是命名管道客户端呢?

我是否要创建另一个全局安全描述符并使用它调用 CreateFile()?

我继承它吗

 SecurityAttributes.bInheritHandle   = TRUE;

我只是在 CreateFile() 调用中传递 Null 吗?

4

1 回答 1

1

由于管道是服务端创建的,所以只需要服务端指定ACL,客户端使用NULL作为ACL。

仅当在一个进程中创建命名管道并且该进程创建了一个新进程时,继承才适用,您希望生成的进程在其中可以直接访问句柄(它不会重新打开句柄,而是以其他方式获取值,就像命令行一样)。

您可以使用sysinternals上的 Process Explorer 查看进程中打开的命名管道,然后查看 ACL。

于 2009-03-27T17:27:19.373 回答