KSYNCHRONIZE_ROUTINE função de retorno de chamada (wdm.h)
A rotina SynchCritSection é usada para acessar recursos de hardware ou dados de driver compartilhados com a rotina InterruptService de um driver.
Sintaxe
KSYNCHRONIZE_ROUTINE KsynchronizeRoutine;
BOOLEAN KsynchronizeRoutine(
[in] PVOID SynchronizeContext
)
{...}
Parâmetros
[in] SynchronizeContext
Informações de contexto fornecidas pelo chamador, especificadas pela chamada do driver para KeSynchronizeExecution.
Retornar valor
Se a operação da rotina for bem-sucedida, a rotina deverá retornar TRUE; caso contrário, ele deve retornar FALSE. (O sucesso e a falha dessa rotina são definidos pelo driver.) O valor retornado especificado se torna o valor retornado de KeSynchronizeExecution.
Comentários
Os drivers devem usar rotinas SynchCritSection para acessar recursos de hardware ou dados de driver que também podem ser acessados por um ISR (rotina InterruptService ).
O sistema chama a rotina SynchCritSection de um 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 SynchCritSection .
A rotina SynchCritSection de um driver é executada no mesmo IRQL que o ISR ao qual ele está associado. Especificamente, ele é executado em algum DIRQL atribuído pelo sistema, conforme especificado pelo parâmetro SynchronizeIrql para IoConnectInterrupt. (Outros dispositivos, com valores DIRQL mais altos, podem interromper uma rotina SynchCritSection .)
Exemplos
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 a encontrar erros e é um requisito para escrever drivers para o sistema operacional Windows.
Por exemplo, para definir uma rotina de retorno de chamada SynchCritSection chamada 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 _Use_decl_annotations_
anotação à sua definição de função. A _Use_decl_annotations_
anotação 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.
Requisitos
Requisito | Valor |
---|---|
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). |