Fila de solicitação nomeada

O recurso de fila de solicitação nomeado da API do SERVIDOR HTTP 2.0 permite que vários aplicativos, operando em processos separados e contas de usuário, acessem a fila de solicitações. A fila de solicitação é aberta pelo nome e protegida usando ACLs (Listas de Controle de Acesso) para garantir que os aplicativos não possam acessar dados uns dos outros. Um único processo cria a fila de solicitações e concede permissão a outros processos para usar a fila de solicitação. Assim, outros processos no computador acessam a fila de solicitações com o menor privilégio necessário para solicitações de serviço. Possíveis danos ao serviço HTTP, devido a vulnerabilidades no código de terceiros, são minimizados quando os aplicativos são executados sob privilégios mínimos.

A fila de solicitação nomeada é criada com a função HttpCreateRequestQueue. Quando a fila de solicitação é criada, o aplicativo especifica a ACL no parâmetro pSecurityAttribute. A ACL, que só pode ser definida quando a fila de solicitação é criada, permite que os processos de trabalho abram a fila de solicitações, recebam solicitações e enviem respostas. Por padrão, os processos não têm permissão para abrir uma fila de solicitação, a menos que tenham recebido permissão na ACL. Os aplicativos não exigem privilégios administrativos para criar a fila de solicitações.

A fila de solicitação deve ser criada com um nome especificado no parâmetro pName de HttpCreateRequestQueue para que outros processos abram a fila de solicitações. Se pName for NULL, uma fila de solicitação sem nome será criada e nenhum outro processo poderá abri-la.

Processos de criador e controlador

Quando a fila de solicitação é criada, o aplicativo pode abri-la como um processo de controlador ou um processo de criador. Os processos do controlador e do criador atuam como administradores da fila de solicitação, mas o controlador não executa operações de E/S nela. O aplicativo indica que é um processo de controlador quando a fila de solicitação é criada especificando HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER no parâmetro sinalizadores de httpCreateRequestQueue. Se o sinalizador de HTTP_CREATE_REQUEST_QUEUE_FLAG_CONTROLLER não estiver definido, o aplicativo será um processo do criador.

A lista a seguir contém tarefas executadas pelo processo do controlador e pelo processo do criador:

  • Crie a fila de solicitação e especifique o nome.
  • Configure a fila de solicitação usando a funçãohttpSetRequestQueueProperty.
  • Consulte os parâmetros de configuração da fila de solicitação usando a funçãohttpQueryRequestQueueProperty.
  • Crie grupos de URL e associe-os a uma fila de solicitações.
  • Defina a ACL que especifica os processos de trabalho que têm permissão para receber E/S na fila de solicitação.
  • Chame HttpWaitForDemandStart para atrasar a instanciação dos processos de trabalho até que a primeira solicitação chegue na fila de solicitações.

Além dessas tarefas, o processo do criador também pode executar operações de E/S na fila de solicitações.

Processos de trabalho

Um processo de trabalho só poderá abrir uma fila de solicitações existente se tiverem recebido acesso a ela na ACL. Os processos de trabalho que operam com privilégios mínimos podem abrir uma fila de solicitações e executar E/S nela. Os aplicativos abrem uma fila de solicitação existente chamando HttpCreateRequestQueue com o HTTP_CREATE_REQUEST_QUEUE_FLAG_OPEN_EXISTING no parâmetro sinalizadores e o nome da fila de solicitação no parâmetro pName.

O processo de trabalho executa as seguintes funções:

  • Receber solicitações e enviar respostas na fila de solicitações.
  • Abra uma fila de solicitação existente por nome. O identificador da fila de solicitação retornado ao processo de trabalho não pode ser usado para configurar a fila de solicitação.
  • Consulte os parâmetros de configuração da fila de solicitação.

O diagrama a seguir mostra o modelo de processo de trabalho para filas de solicitação. A fila de solicitações pode ter vários processos de trabalho que processam E/S e um processo de criador que configura a fila de solicitações.

modelo de processo de trabalho para filas de solicitação