HTTP Server バージョン 2.0 API の名前付き要求キュー機能を使用すると、複数のアプリケーションが個別のプロセスとユーザー アカウントで動作し、要求キューにアクセスできます。 要求キューは名前で開き、アプリケーションが互いのデータにアクセスできないように、アクセス制御リスト (ACL) を使用してセキュリティで保護されます。 1 つのプロセスで要求キューが作成され、要求キューを使用するためのアクセス許可が他のプロセスに付与されます。 したがって、コンピューター上の他のプロセスは、要求を処理するために必要な最小限の特権で要求キューにアクセスします。 アプリケーションが最小限の特権で実行されている場合、サード パーティのコードの脆弱性が原因で HTTP サービスが破損する可能性が最小限に抑えられます。
名前付き要求キューは、HttpCreateRequestQueue 関数を使用して作成されます。 要求キューが作成されると、アプリケーションは pSecurityAttribute パラメーターに ACL を指定します。 要求キューの作成時にのみ設定できる ACL では、ワーカー プロセスが要求キューを開き、要求を受信し、応答を送信できます。 既定では、ACL でアクセス許可が付与されていない限り、プロセスは要求キューを開くことはできません。 アプリケーションでは、要求キューを作成するための管理特権は必要ありません。
要求キューは、他のプロセスが要求キューを開くために httpCreateRequestQueueの pName パラメーター指定された名前で作成する必要があります。 pName NULL 場合、名前のない要求キューが作成され、他のプロセスで開く必要はありません。
作成者プロセスとコントローラー プロセス
要求キューが作成されると、アプリケーションはコントローラー プロセスまたは作成者プロセスとしてそれを開くことができます。 コントローラーと作成者の両方が要求キューの管理者として機能しますが、コントローラーは要求キューに対して I/O 操作を実行しません。 アプリケーションは、httpCreateRequestQueueの Flags パラメーターに HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER指定することによって、要求キューが作成されるときに、それがコントローラー プロセスであることを示します。 HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER フラグが設定されていない場合、アプリケーションは作成者プロセスです。
次の一覧には、コントローラー プロセスと作成者プロセスによって実行されるタスクが含まれています。
- 要求キューを作成し、名前を指定します。
- HttpSetRequestQueueProperty 関数を使用して要求キューを構成します。
- HttpQueryRequestQueueProperty 関数を使用して、要求キュー構成パラメーターのクエリを実行します。
- URL グループを作成し、要求キューに関連付けます。
- 要求キューで I/O を受信できるワーカー プロセスを指定する ACL を設定します。
- HttpWaitForDemandStart呼び出して、最初の要求が要求キューに到着するまでワーカー プロセスのインスタンス化を遅延させます。
これらのタスクに加えて、作成者プロセスは要求キューに対して I/O 操作を実行することもできます。
ワーカー プロセス
ワーカー プロセスは、ACL で既存の要求キューへのアクセスが許可されている場合にのみ、キューを開くことができます。 最小限の特権で動作するワーカー プロセスは、要求キューを開き、それに対して I/O を実行できます。 アプリケーションは、Flags パラメーターの HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING と、pName パラメーター内の要求キューの名前を使用して、HttpCreateRequestQueue を呼び出して、既存の要求キューを開きます。
ワーカー プロセスは、次の関数を実行します。
- 要求を受信し、要求キューで応答を送信します。
- 既存の要求キューを名前で開きます。 ワーカー プロセスに返される要求キューのハンドルを使用して、要求キューを構成することはできません。
- 要求キュー構成パラメーターのクエリを実行します。
次の図は、要求キューのワーカー プロセス モデルを示しています。 要求キューには、I/O を処理するワーカー プロセスと、要求キューを構成する 1 つの作成者プロセスを含めることができます。
要求キューする