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

Confira também

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait