요청 큐 기능이라는 HTTP Server 버전 2.0 API를 사용하면 별도의 프로세스 및 사용자 계정에서 작동하는 여러 애플리케이션이 요청 큐에 액세스할 수 있습니다. 요청 큐는 이름으로 열리고 ACL(액세스 제어 목록)을 사용하여 보호되어 애플리케이션이 서로 다른 데이터에 액세스할 수 없도록 합니다. 단일 프로세스는 요청 큐를 만들고 요청 큐를 사용할 수 있는 권한을 다른 프로세스에 부여합니다. 따라서 컴퓨터의 다른 프로세스는 서비스 요청에 필요한 최소 권한으로 요청 큐에 액세스합니다. 타사 코드의 취약성으로 인해 HTTP 서비스에 대한 가능한 손상은 애플리케이션이 최소 권한으로 실행되는 경우 최소화됩니다.
명명된 요청 큐는 HttpCreateRequestQueue 함수를 사용하여 생성됩니다. 요청 큐가 만들어지면 애플리케이션은 pSecurityAttribute 매개 변수에 ACL을 지정합니다. 요청 큐를 만들 때만 설정할 수 있는 ACL을 사용하면 작업자 프로세스가 요청 큐를 열고 요청을 수신하고 응답을 보낼 수 있습니다. 기본적으로 프로세스는 ACL에서 권한이 부여되지 않은 한 요청 큐를 열 수 없습니다. 애플리케이션은 요청 큐를 만드는 데 관리 권한이 필요하지 않습니다.
요청 큐는 다른 프로세스에서 요청 큐를 열려면 HttpCreateRequestQueuepName 매개 변수에 지정된 이름으로 만들어야 합니다. pName NULL 경우 명명되지 않은 요청 큐가 생성되고 다른 프로세스에서 열 수 없습니다.
작성자 및 컨트롤러 프로세스
요청 큐가 만들어지면 애플리케이션이 컨트롤러 프로세스 또는 작성자 프로세스로 열 수 있습니다. 컨트롤러와 작성자 프로세스는 모두 요청 큐의 관리자 역할을 하지만 컨트롤러는 I/O 작업을 수행하지 않습니다. 애플리케이션은 HttpCreateRequestQueueFlags 매개 변수에 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_EXISTINGhttpCreateRequestQueue 호출하고 pName 매개 변수의 요청 큐 이름을 호출하여 기존 요청 큐를 엽니다.
작업자 프로세스는 다음 함수를 수행합니다.
- 요청을 수신하고 요청 큐에서 응답을 보냅니다.
- 이름으로 기존 요청 큐를 엽니다. 작업자 프로세스에 반환된 요청 큐에 대한 핸들을 사용하여 요청 큐를 구성할 수 없습니다.
- 요청 큐 구성 매개 변수를 쿼리합니다.
다음 다이어그램은 요청 큐에 대한 작업자 프로세스 모델을 보여 줍니다. 요청 큐에는 I/O를 처리하는 여러 작업자 프로세스와 요청 큐를 구성하는 하나의 작성자 프로세스가 있을 수 있습니다.
요청 큐작업자 프로세스 모델