Macro IoReleaseRemoveLockAndWait (wdm.h)
La routine IoReleaseRemoveLockAndWa it rilascia un blocco rimosso acquisito in una chiamata precedente a IoAcquireRemoveLocke attende il rilascio di tutte le acquisizioni del blocco.
Sintassi
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
Parametri
[in] RemoveLock
Puntatore a una struttura IO_REMOVE_LOCK passata dal chiamante in una chiamata precedente a IoAcquireRemoveLock.
[in] Tag
Puntatore a un tag fornito dal chiamante passato in una chiamata precedente a IoAcquireRemoveLock.
Se un driver ha specificato un Tag quando ha acquisito il blocco, il driver deve specificare lo stesso Tag quando rilascia il blocco.
Se la chiamata a IoAcquireRemoveLock non ha specificato un Tag, questo parametro è NULL.
Valore restituito
Nessuno
Osservazioni
Un driver chiama in genere questa routine nel codice dispatch per una richiesta di IRP_MN_REMOVE_DEVICE. Per consentire il completamento delle richieste di I/O in coda, ogni driver deve chiamare IoReleaseRemoveLockAndWaitdopo passa l'IRP rimosso al driver inferiore successivo e prima di rilasciare memoria, chiama IoDetachDeviceo chiama IoDeleteDevice. La routine IoReleaseRemoveLockAndWait attende che l'autista dell'autobus annulli eventuali IRP che potrebbero essere in sospeso(ad esempio, un IRP_MN_WAIT_WAKE IRP).
Un driver deve acquisire il blocco di rimozione prima di chiamare IoReleaseRemoveLockAndWait. In genere, un driver chiama
Per rilasciare un blocco dal codice diverso dal codice dispatch IRP_MN_REMOVE_DEVICE, usare IoReleaseRemoveLock.
Dopo aver chiamato IoReleaseRemoveLockAndWait per un blocco di rimozione specifico, le chiamate successive a IoAcquireRemoveLock per lo stesso blocco di rimozione avranno esito negativo. IoReleaseRemoveLockAndWait non restituisce fino a quando non vengono rilasciate tutte le acquisizioni in sospeso del blocco di rimozione.
Dopo aver restituito IoReleaseRemoveLockAndWait, il driver deve considerare il dispositivo in uno stato in cui è pronto per essere rimosso e non può eseguire operazioni di I/O. Pertanto, il driver non deve chiamare la routine IoInitializeRemoveLock per inizializzare nuovamente il blocco di rimozione. Violazione di questa regola mentre il driver viene verificato da Driver Verifier genererà un controllo dei bug.
Per altre informazioni, vedere Using Remove Locks.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile a partire da Windows 2000. |
piattaforma di destinazione | Desktop |
intestazione |
wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
libreria |
NtosKrnl.lib |
dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
regole di conformità DDI |