Macro IoInitializeRemoveLock (wdm.h)
A rotina IoInitializeRemoveLock inicializa um bloqueio de remoção para um objeto de dispositivo.
Sintaxe
void IoInitializeRemoveLock(
[in] Lock,
[in] Tag,
[in] Maxmin,
[in] HighWater
);
Parâmetros
[in] Lock
Ponteiro para uma estrutura de IO_REMOVE_LOCK fornecida pelo chamador que essa rotina inicializa com informações sobre o bloqueio, incluindo um contador e um evento de sincronização. Um gravador de driver deve alocar essa estrutura como parte da extensão de dispositivo do objeto do dispositivo.
[in] Tag
Especifica uma marca para identificar o criador do bloqueio. Os gravadores de driver normalmente usam uma cadeia de caracteres de 4 caracteres, especificada em ordem inversa, como as marcas usadas para ExAllocatePoolWithTag.
O sistema de E/S usará esse parâmetro se driver verifier estiver habilitado. O chamador sempre deve fornecer um valor de marca diferente de zero para esse parâmetro.
[in] Maxmin
Especifica o número máximo de minutos que esse bloqueio deve ser mantido. Um valor zero significa que não há limite. Esse valor normalmente é usado durante a depuração para identificar uma rotina de driver que mantém o bloqueio por mais tempo do que o esperado.
O sistema de E/S usará esse parâmetro se o Verificador de Driver estiver habilitado.
[in] HighWater
Especifica o número máximo de aquisições pendentes permitidas no bloqueio. Use 0 para não especificar o máximo. HighWatermark deve ser <= 0x7FFFFFFF.
O sistema de E/S usará esse parâmetro se o Verificador de Driver estiver habilitado.
Valor de retorno
Nenhum
Observações
Um driver pode usar um bloqueio de remoção para rastrear operações de E/S pendentes em um dispositivo e determinar quando o driver pode excluir seu objeto de dispositivo em resposta a uma solicitação de IRP_MN_REMOVE_DEVICE.
Antes de chamar IoInitializeRemoveLock, um driver deve alocar uma estrutura de IO_REMOVE_LOCK em seu de extensão do dispositivo. Um driver normalmente chama IoInitializeRemoveLock em sua rotina AddDevice, quando o driver inicializa o restante da extensão do dispositivo para um objeto de dispositivo.
Depois que a rotina IoReleaseRemoveLockAndWait retorna, o driver deve considerar que o dispositivo está em um estado no qual ele está pronto para ser removido e não pode executar operações de E/S. Portanto, o driver não deve chamar IoInitializeRemoveLock para inicializar novamente o bloqueio de remoção. A violação dessa regra enquanto o driver está sendo verificado pelo Driver Verifier resultará em uma verificação de bug.
Como o driver armazena a estrutura IO_REMOVE_LOCK na extensão do dispositivo de um objeto de dispositivo, o bloqueio de remoção é excluído quando o driver exclui a extensão do dispositivo como parte do processamento de uma solicitação de IRP_MN_REMOVE_DEVICE.
Para obter mais informações, consulte Usando Remover Bloqueios.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Disponível a partir do Windows 2000. |
da Plataforma de Destino | Área de trabalho |
cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
biblioteca | NtosKrnl.lib |
de DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |