2

名前付きパイプを使用して CGI プロセスを Windows サービスに接続しようとしています。開発マシンで別のサーバーを使用してコードを正常に実行できますが、IIS では CGI プロセスで CreateFile() を呼び出すとセキュリティの問題が発生します。

Windows サービスは名前付きパイプ サーバーであるため、CGI プロセスはその名前付きパイプにクライアントとして接続しようとします。

次のコードを呼び出して、フラグ SECURITY_WORLD_SID_AUTHORITY を使用してグローバル セキュリティ記述子を作成するコードを掘り下げました。

  InitializeAcl()
  AddAccessAllowedAce()
  SetSecurityDescriptorDacl()

しかし、私はその概念を本当に理解していません。Pipe Server CreateNamedPipe() は SECURITY_ATTRIBUTES 構造でこの ACL を使用して呼び出す必要があると想定していますが、Named Pipe クライアントはどうですか?

別のグローバル セキュリティ記述子を作成し、それで CreateFile() を呼び出す必要がありますか?

私はそれを継承しますか

 SecurityAttributes.bInheritHandle   = TRUE;

CreateFile() 呼び出しで Null を渡すだけですか?

4

1 に答える 1

1

パイプはサーバーによって作成されるため、サーバーのみが ACL を指定する必要があり、クライアントは ACL に NULL を使用します。

継承は、名前付きパイプが 1 つのプロセスで作成され、そのプロセスが生成されたプロセスがハンドルに直接アクセスできるようにする新しいプロセスを作成する場合にのみ適用されます (ハンドルを再度開くのではなく、別の方法で値を取得します)。 、コマンドラインのように)。

sysinternalsの Process Explorer を使用して、プロセスで開いている名前付きパイプを表示し、ACL を調べることができます。

于 2009-03-27T17:27:19.373 に答える