Função NdisScheduleWorkItem (ndis.h)
Nota NDIS 5. x foi preterido e substituído pelo NDIS 6. x. Para obter o novo desenvolvimento de driver NDIS, consulte Drivers de rede começando com o Windows Vista. Para obter informações sobre como portar o NDIS 5. x drivers para NDIS 6. x, consulte Portabilidade de drivers NDIS 5.x para NDIS 6.0.
NdisScheduleWorkItem insere um determinado item de trabalho em uma fila da qual um thread de trabalho do sistema remove o item e dá controle à função de retorno de chamada que o driver forneceu anteriormente ao NdisInitializeWorkItem.
Sintaxe
NDIS_STATUS NdisScheduleWorkItem(
[in] __drv_aliasesMem PNDIS_WORK_ITEM WorkItem
);
Parâmetros
[in] WorkItem
Ponteiro para o item de trabalho que foi configurado por uma chamada anterior para NdisInitializeWorkItem.
Retornar valor
NdisScheduleWorkItem sempre é bem-sucedido e, portanto, sempre retorna NDIS_STATUS_SUCCESS.
Comentários
Uma chamada para NdisScheduleWorkItem permite que um driver NDIS adie algumas operações determinadas pelo driver que podem ou devem ser feitas em um IRQL mais baixo do que o IRQL gerado no momento em que ele está sendo executado em sua função de retorno de chamada de thread de trabalho.
O retorno de chamada do driver é executado em um contexto de thread do sistema em IRQL = PASSIVE_LEVEL posteriormente. Essa função fornecida pelo chamador é responsável por recuperar o armazenamento alocado pelo driver para WorkItem. Por exemplo, se o driver chamado NdisAllocateMemoryWithTag fornecer uma área de contexto para NdisInitializeWorkItem, sua função de retorno de chamada deverá fazer a chamada recíproca para NdisFreeMemory com WorkItem antes de retornar o controle.
Um driver não deve esperar que sua rotina de retorno de chamada conclua uma operação se ele já estiver segurando um objeto de sincronização e puder tentar adquirir outro. Por exemplo, um driver NDIS deve liberar todos os bloqueios de rotação atualmente mantidos e assim por diante antes de chamar NdisScheduleWorkItem. Um driver de protocolo NDIS de nível mais alto também deve liberar semáforos, mutexes, variáveis de recurso e assim por diante antes de chamar NdisScheduleWorkItem. Liberar todos os recursos de sincronização antes de enfileirar uma operação síncrona de worker-thread impede deadlocks.
Um driver de miniporto serializado nunca deve tentar enfileirar uma rotina de retorno de chamada de thread de trabalho, pois não há como um driver sincronizar o acesso às suas áreas de contexto nic com um retorno de chamada de thread de trabalho. Consequentemente, esse driver NDIS serializado não pode compartilhar nada em sua área de contexto por adaptador com uma função de retorno de chamada de thread de trabalho sem causar falhas intermitentes no sistema.
- Plataforma de destino: Universal
- Versão: não há suporte para drivers NDIS 6.0 no Windows Vista. Em vez disso , use NdisQueueIoWorkItem. Com suporte para drivers NDIS 5.1 no Windows Vista e windows XP.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | ndis.h (inclua Ndis.h) |
IRQL | IRQL <= DISPATCH_LEVEL |