Compartilhar via


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

Consulte também

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait