KSYNCHRONIZE_ROUTINE função de retorno de chamada (wdm.h)
A rotina de SynchCritSection é usada para acessar recursos de hardware ou dados de driver compartilhados com a rotina de InterruptService de um driver.
KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;
BOOLEAN KsynchronizeRoutine(
[in] PVOID SynchronizeContext
)
{...}
[in] SynchronizeContext
Informações de contexto fornecidas pelo chamador, especificadas pela chamada do driver para KeSynchronizeExecution.
Se a operação da rotina for bem-sucedida, a rotina deverá retornar VERDADEIRO; caso contrário, ele deverá retornar FALSE . (O sucesso e a falha dessa rotina são definidos pelo driver.) O valor retornado especificado torna-se o valor retornado para KeSynchronizeExecution.
Os drivers devem usar rotinas de SynchCritSection para acessar recursos de hardware ou dados de driver que também podem ser acessados por uma rotina de InterruptService (ISR).
O sistema chama a rotina SynchCritSection de do driver quando o driver chama KeSynchronizeExecution. Quando um driver chama KeSynchronizeExecution, ele especifica o endereço de uma rotina SynchCritSection, informações de contexto para a rotina e um ponteiro de objeto de interrupção. A rotina KeSynchronizeExecution adquire o bloqueio de rotação do objeto de interrupção e chama a rotina de SynchCritSection.
A rotina synchCritSection de do driver é executada no mesmo IRQL que o ISR ao qual ele está associado. Especificamente, ele é executado em algum DIRQLatribuído pelo sistema, conforme especificado pelo parâmetro SynchronizeIrql para IoConnectInterrupt. (Outros dispositivos, com valores DIRQL mais altos, podem interromper uma rotina de SynchCritSection.)
Para definir uma rotina de retorno de chamada SynchCritSection, primeiro você deve fornecer uma declaração de função que identifique o tipo de rotina de retorno de chamada que você está definindo. O Windows fornece um conjunto de tipos de função de retorno de chamada para drivers. Declarar uma função usando os tipos de função de retorno de chamada ajuda a análise de código para drivers, SDV (Verificador de Driver Estático) e outras ferramentas de verificação encontram erros e é um requisito para gravar drivers para o sistema operacional Windows.
Por exemplo, para definir uma rotina de retorno de chamada SynchCritSection denominada MySynchCritSection
, use o tipo KSYNCHRONIZE_ROUTINE conforme mostrado neste exemplo de código:
KSYNCHRONIZE_ROUTINE MySynchCritSection;
Em seguida, implemente sua rotina de retorno de chamada da seguinte maneira:
_Use_decl_annotations_
BOOLEAN
MySynchCritSection(
PVOID SynchronizeContext
)
{
// Function body
}
O tipo de função KSYNCHRONIZE_ROUTINE é definido no arquivo de cabeçalho Wdm.h. Para identificar erros com mais precisão ao executar as ferramentas de análise de código, adicione a anotação _Use_decl_annotations_
à sua definição de função. A anotação _Use_decl_annotations_
garante que as anotações aplicadas ao tipo de função KSYNCHRONIZE_ROUTINE no arquivo de cabeçalho sejam usadas. Para obter mais informações sobre os requisitos para declarações de função, consulte Declarando funções usando tipos de função de função para drivers WDM. Para obter informações sobre _Use_decl_annotations_
, consulte Anotando o comportamento da função.
Requisito | Valor |
---|---|
da Plataforma de Destino | Área de trabalho |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
IRQL | Chamado em DIRQL (consulte a seção Comentários). |