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 o Verificador de Driver 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 no máximo. HighWatermark deve ser <= 0x7FFFFFFF.
O sistema de E/S usará esse parâmetro se o Verificador de Driver estiver habilitado.
Retornar valor
Nenhum
Comentários
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 IO_REMOVE_LOCK em sua extensão de 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 retornar, o driver deverá 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 Verificador de Driver resultará em um bug marcar.
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 |
---|---|
Cliente mínimo com suporte | Disponível a partir do Windows 2000. |
Plataforma de Destino | Área de Trabalho |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |