Organização de filas DPC
O sistema fornece uma fila DPC para cada processador. Os drivers podem controlar a qual fila o sistema atribui um DPC, o local do DPC dentro da fila e quando a fila é processada.
Os DPCs atribuídos à fila de um processador específico são executados nesse processador. Por padrão, quando o driver chama KeInsertQueueDpc ou IoRequestDpc, o DPC é enfileirado no processador ativo no momento. Os drivers podem especificar a fila do processador chamando KeSetTargetProcessorDpc antes de chamar KeInsertQueueDpc ou IoRequestDpc.
No Windows Vista e versões posteriores do Windows, o sistema também tem uma fila de DPC encadeada para cada processador. Os drivers podem usar KeSetTargetProcessorDpc para especificar a fila do processador para DPCs encadeados.
A rotina KeSetImportanceDpc controla onde um DPC é colocado dentro da fila. Normalmente, o DPC é colocado no final da fila; mas se o driver chamar KeSetImportanceDpc pela primeira vez com o parâmetro Importance igual a HighImportance, o DPC será colocado no início da fila.
Para DPCs comuns (não threaded), KeSetImportanceDpc também determina se KeInsertQueueDpc ou IoRequestDpc começarão imediatamente a processar a fila DPC. A lista a seguir descreve as regras para processar a fila:
O processamento da fila DPC começa imediatamente se o DPC é atribuído ao processador atual e a Importância não é igual a LowImportance ou se Importance é igual a LowImportance e a profundidade da fila DPC do processador atual excede um limite definido pelo sistema ou a taxa de solicitação DPC ficou abaixo de um mínimo definido pelo sistema. Caso contrário, o processamento do DPC será adiado até que os requisitos apropriados de profundidade e taxa da fila sejam atendidos.
O processamento da fila DPC começará imediatamente no processador de destino se o DPC for atribuído a um processador diferente do processador atual e Importance for igual a MediumHighImportance ou HighImportance, ou se a profundidade da fila DPC do processador de destino exceder um limite definido pelo sistema. Caso contrário, o processamento do DPC será adiado até que os requisitos apropriados de profundidade e taxa da fila sejam atendidos.