C++ IIS下的Windows命名管道ACL

C++ IIS下的Windows命名管道ACL,c++,windows,iis,named-pipes,C++,Windows,Iis,Named Pipes,我正在尝试使用命名管道将CGI进程连接到windows服务。 我的代码使用开发机器上的另一台服务器运行正常,但在IIS上,当我在CGI进程中调用CreateFile()时,会出现安全问题 Windows服务是命名管道服务器,因此CGI进程正在尝试作为客户端连接到该命名管道 我找到了一些代码,通过调用以下命令创建了一个全局安全描述符,其标志为security\u WORLD\u SID\u AUTHORITY: InitializeAcl() AddAccessAllowedAce()

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

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

我找到了一些代码,通过调用以下命令创建了一个全局安全描述符,其标志为security\u WORLD\u SID\u AUTHORITY:

  InitializeAcl()
  AddAccessAllowedAce()
  SetSecurityDescriptorDacl()
但是我真的不理解这个概念。 我假设管道服务器CreateNamedPipe()必须使用SECURITY_ATTRIBUTES结构中的这个ACL调用,但是命名管道客户端呢

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

我继承了它吗

 SecurityAttributes.bInheritHandle   = TRUE;

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

因为管道是由服务器创建的,所以只有服务器需要指定ACL,客户端使用Null作为ACL

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


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

了解CGI进程正在运行的帐户会很有帮助。我忽略了这一点,因为我打算更改它。目前它是一个具有管理员权限的用户帐户,但最终可能是IUSER。您如何“查看命名管道”?另外,您如何看待ACL?“命名管道”只是特殊文件系统中的文件。它们具有文件类型的句柄。Process Explorer默认情况下显示流程的所有句柄。