Compartilhar via


Função WdfDeviceInitSetRemoveLockOptions (wdfdevice.h)

[Aplica-se somente ao KMDF]

O método WdfDeviceInitSetRemoveLockOptions faz com que a estrutura adquira um bloqueio de remoção antes de entregar um IRP de qualquer tipo para o driver.

Sintaxe

void WdfDeviceInitSetRemoveLockOptions(
  [in] PWDFDEVICE_INIT          DeviceInit,
  [in] PWDF_REMOVE_LOCK_OPTIONS Options
);

Parâmetros

[in] DeviceInit

Um ponteiro fornecido pelo chamador para uma estrutura de WDFDEVICE_INIT.

[in] Options

Um ponteiro para uma estrutura WDF_REMOVE_LOCK_OPTIONS.

Valor de retorno

Nenhum

Observações

Por padrão, a estrutura adquire um bloqueio de remoção antes de entregar IRPs dos seguintes tipos principais ao driver:

IRP_MJ_PNP
IRP_MJ_POWER
IRP_MJ_SYSTEM_CONTROL

Quando o IRP é concluído, a estrutura libera o bloqueio de remoção.

A partir do KMDF 1.11, o driver pode opcionalmente chamar WdfDeviceInitSetRemoveLockOptions fazer com que a estrutura adquira um bloqueio de remoção antes de fornecer todos os tipos de IRP, não apenas aqueles listados acima.

Se o driver tiver clientes no modo kernel que enviam E/S sem sincronização com o estado PnP do seu dispositivo, você poderá sofrer falhas devido a IRPs de E/S que chegam após a remoção do objeto do dispositivo da estrutura. Nesse caso, você pode chamar WdfDeviceInitSetRemoveLockOptions. Em seguida, quando um cliente envia uma solicitação de E/S para seu dispositivo:

  • Se o dispositivo ainda não tiver sido removido, o bloqueio de remoção será adquirido com êxito e a solicitação será entregue. Se a remoção ocorrer mais tarde, a estrutura chamará IoReleaseRemoveLockAndWait que bloqueia até que todas as aquisições de bloqueio bem-sucedidas sejam liberadas (as solicitações de E/S são concluídas).
  • Se o dispositivo já tiver processado IRP_MN_REMOVE_DEVICE, mas houver uma referência pendente a um objeto de dispositivo WDM impedindo que o dispositivo seja liberado, o bloqueio de remoção não será adquirido e a estrutura concluirá a solicitação imediatamente.
Observação WdfDeviceInitSetRemoveLockOptions não tem suporte em objetos de controle.
 
Normalmente, um driver chama função de retorno de chamada WdfDeviceInitSetRemoveLockOption s de dentro de sua função de retorno de chamada EvtDriverDeviceAdd, pouco antes de chamar WdfDeviceCreate.

Depois que um driver chama WdfDeviceInitSetRemoveLockOptions, a configuração permanece em vigor durante o tempo de vida do objeto do dispositivo da estrutura.

Para obter mais informações sobre como remover bloqueios, consulte Usando Remover Bloqueios.

Exemplos

Este exemplo de código inicializa uma estrutura de WDF_REMOVE_LOCK_OPTIONS e chama WdfDeviceInitSetRemoveLockOptions.


WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;

WDF_REMOVE_LOCK_OPTIONS_INIT(
                             &RemoveLockOptions,
                             WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO
                             );
WdfDeviceInitSetRemoveLockOptions(
                                  DeviceInit,
                                  &RemoveLockOptions
                                  );

Requisitos

Requisito Valor
da Plataforma de Destino Universal
versão mínima do KMDF 1.11
cabeçalho wdfdevice.h (inclua Wdf.h)
biblioteca Wdf01000.sys (consulte o Controle de Versão da Biblioteca da Estrutura.)
IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI DriverCreate(kmdf)

Consulte também

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT