Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
[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.
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) |