Funzione WdfDeviceInitSetRemoveLockOptions (wdfdevice.h)

[Si applica solo a KMDF]

Il metodo WdfDeviceInitSetRemoveLockOptions fa sì che il framework acquisisca un blocco di rimozione prima di recapitare un IRP di qualsiasi tipo al driver.

Sintassi

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

Parametri

[in] DeviceInit

Puntatore fornito dal chiamante a una struttura WDFDEVICE_INIT.

[in] Options

Puntatore a una struttura WDF_REMOVE_LOCK_OPTIONS.

Valore restituito

Nessuno

Osservazioni

Per impostazione predefinita, il framework acquisisce un blocco di rimozione prima di distribuire i runtime di integrazione dei tipi principali seguenti al driver:

IRP_MJ_PNP
IRP_MJ_POWER
IRP_MJ_SYSTEM_CONTROL

Al termine dell'IRP, il framework rilascia il blocco di rimozione.

A partire da KMDF 1.11, il driver può facoltativamente chiamare WdfDeviceInitSetRemoveLockOptions per fare in modo che il framework acquisisca un blocco di rimozione prima di distribuire tutti i tipi di IRP, non solo quelli elencati in precedenza.

Se il driver dispone di client in modalità kernel che inviano I/O non sincronizzati con lo stato PnP del dispositivo, è possibile che si verifichino arresti anomali a causa di irP di I/O in arrivo dopo la rimozione dell'oggetto dispositivo framework. In questo caso, è possibile chiamare WdfDeviceInitSetRemoveLockOptions. Quindi, quando un client invia una richiesta di I/O al dispositivo:

  • Se il dispositivo non è ancora stato rimosso, il blocco di rimozione viene acquisito correttamente e la richiesta viene recapitata. Se la rimozione avviene in un secondo momento, il framework chiama IoReleaseRemoveLockAndWait che blocca fino a quando non vengono rilasciate tutte le acquisizioni di blocco riuscite (le richieste di I/O vengono completate).
  • Se il dispositivo ha già elaborato IRP_MN_REMOVE_DEVICE, ma esiste un riferimento in sospeso a un oggetto dispositivo WDM che impedisce il rilascio del dispositivo, il blocco di rimozione non viene acquisito e il framework completa immediatamente la richiesta.
NotaWdfDeviceInitSetRemoveLockOptions non è supportato negli oggetti di controllo.
 
In genere, un driver chiama WdfDeviceInitSetRemoveLockOptions dall'interno del proprio EvtDriverDeviceAdd funzione di callback, subito prima di chiamare WdfDeviceCreate.

Dopo che un driver chiama WdfDeviceInitSetRemoveLockOptions, l'impostazione rimane attiva per la durata dell'oggetto dispositivo framework.

Per altre informazioni sulla rimozione dei blocchi, vedere Using Remove Locks.

Esempi

Questo esempio di codice inizializza una struttura WDF_REMOVE_LOCK_OPTIONS e chiama WdfDeviceInitSetRemoveLockOptions.


WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;

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

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
versione minima di KMDF 1.11
intestazione wdfdevice.h (include Wdf.h)
libreria Wdf01000.sys (vedere Controllo delle versioni della libreria framework).
IRQL <= DISPATCH_LEVEL
regole di conformità DDI DriverCreate(kmdf)

Vedere anche

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT