Condividi tramite


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 IoAcquireRemoveLock nelle prime fasi della routine DispatchPnp , prima dell'istruzione switch. Di conseguenza, il blocco viene acquisito per ogni operazione PnP, inclusa l'acquisizione necessaria prima di chiamare IoReleaseRemoveLockAndWait nel codice che gestisce IRP_MN_REMOVE_DEVICE.

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 IoReleaseRemoveLockAndWaitOutsideRemoveDevice(wdm), RemoveLock(wdm), RemoveLockCheck(wdm), RemoveLockMnRemove(wdm), RemoveLockMnRemove2(wdm), RemoveLockReleaseCleanup(wdm), RemoveLockReleaseClose(wdm), RemoveLockReleaseCreate(wdm), RemoveLockReleaseDeviceControl(wdm), RemoveLockReleaseInternalDeviceControl(wdm), RemoveLockReleasePower(wdm), RemoveLockReleaseRead(wdm), RemoveLockReleaseShutdown(wdm), RemoveLockReleaseSystemControl(wdm), RemoveLockReleaseWrite(wdm)

Vedere anche

DispatchPnp

IRP_MN_WAIT_WAKE

IoAcquireRemoveLock

IoDeleteDevice

IoDetachDevice

IoInitializeRemoveLock

IoReleaseRemoveLock