我正在尝试使用命名管道将CGI进程连接到我的Windows服务。 我的代码在我的开发机器上使用另一台服务器运行正常,但在IIS上,当我在CGI进程中调用CreateFile()时会出现安全问题。
Windows服务是命名管道服务器,因此CGI进程尝试连接到该命名管道作为客户端。
我挖出了一些代码,通过调用以下内容创建了一个带有标志SECURITY_WORLD_SID_AUTHORITY的全局安全描述符:
InitializeAcl()
AddAccessAllowedAce()
SetSecurityDescriptorDacl()
但我真的不明白这个概念。 我假设必须在SECURITY_ATTRIBUTES结构中使用此ACL调用管道服务器CreateNamedPipe(),但命名管道客户端呢?
我是否创建了另一个全局安全描述符并使用它调用CreateFile()?
我是否继承
SecurityAttributes.bInheritHandle = TRUE;
我是否只是在CreateFile()调用中传递Null?
答案 0 :(得分:1)
由于管道是由服务器创建的,因此只有服务器需要指定ACL,客户端对ACL使用NULL。
继承仅适用于在一个进程中创建命名管道并且该进程创建一个新进程,您希望该进程可以直接访问该句柄(它不会重新打开句柄,而是获取值其他方式,如命令行。)
您可以使用sysinternals上的Process Explorer查看进程中打开的命名管道,然后查看ACL。