Fila de Solicitação Nomeada

O recurso de fila de solicitação denominada API do Servidor HTTP versão 2.0 permite que vários aplicativos, operando em processos separados e contas de usuário, acessem a fila de solicitação. A fila de solicitação é aberta por 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ção e concede permissão a outros processos para usar a fila de solicitações. Assim, outros processos no computador acessam a fila de solicitações com o privilégio mínimo necessário para solicitações de serviço. Os possíveis danos ao serviço HTTP, devido a vulnerabilidades no código de terceiros, são minimizados quando os aplicativos estão sendo 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 outros processos abrirem a fila de solicitação. 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 para a 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 Flags de HttpCreateRequestQueue. Se o sinalizador 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ção HttpSetRequestQueueProperty .
  • Consulte os parâmetros de configuração da fila de solicitação usando a função HttpQueryRequestQueueProperty .
  • Crie grupos de URLs 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ção 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 Flags 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 para a 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