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 WDFDEVICE_INIT .

[in] Options

Um ponteiro para uma estrutura WDF_REMOVE_LOCK_OPTIONS .

Retornar valor

Nenhum

Comentários

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 para fazer com que a estrutura adquira um bloqueio de remoção antes de entregar 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á enfrentar falhas devido à chegada de IRPs de E/S após a remoção do objeto do dispositivo de 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çãoWdfDeviceInitSetRemoveLockOptions não tem suporte em objetos de controle.
 
Normalmente, um driver chama WdfDeviceInitSetRemoveLockOptions 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 de estrutura.

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

Exemplos

Este exemplo de código inicializa uma estrutura 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
Plataforma de Destino Universal
Versão mínima do KMDF 1.11
Cabeçalho wdfdevice.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.)
IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI DriverCreate(kmdf)

Confira também

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT