Macro IoReleaseRemoveLockAndWait (wdm.h)
La rutina IoReleaseRemoveLockAndWait libera un bloqueo de eliminación que el controlador adquirió en una llamada anterior a IoAcquireRemoveLock y espera hasta que se hayan liberado todas las adquisiciones del bloqueo.
Sintaxis
void IoReleaseRemoveLockAndWait(
[in] RemoveLock,
[in] Tag
);
Parámetros
[in] RemoveLock
Puntero a una estructura de IO_REMOVE_LOCK que el autor de la llamada pasó en una llamada anterior a IoAcquireRemoveLock.
[in] Tag
Puntero a una etiqueta proporcionada por el autor de la llamada que se pasó en una llamada anterior a IoAcquireRemoveLock.
Si un controlador especificó una etiqueta cuando adquirió el bloqueo, el controlador debe especificar la misma etiqueta al liberar el bloqueo.
Si la llamada a IoAcquireRemoveLock no especificó una etiqueta, este parámetro es NULL.
Valor devuelto
None
Observaciones
Normalmente, un controlador llama a esta rutina en su código de envío para una solicitud de IRP_MN_REMOVE_DEVICE . Para permitir que se completen las solicitudes de E/S en cola, cada controlador debe llamar a IoReleaseRemoveLockAndWaitdespués de pasar el IRP al controlador inferior siguiente y antes de liberar memoria, llama a IoDetachDevice o llama a IoDeleteDevice. La rutina IoReleaseRemoveLockAndWait espera a que el controlador de autobús cancele los IRP que puedan estar pendientes (por ejemplo, un IRP de IRP_MN_WAIT_WAKE ).
Un controlador debe adquirir el bloqueo remove antes de llamar a IoReleaseRemoveLockAndWait. Normalmente, un controlador llama a IoAcquireRemoveLock al principio de su rutina DispatchPnp , antes de la instrucción switch. Como resultado, el bloqueo se adquiere para cada operación PnP, incluida la adquisición necesaria antes de llamar a IoReleaseRemoveLockAndWait en el código que controla IRP_MN_REMOVE_DEVICE.
Para liberar un bloqueo del código distinto del código de envío de IRP_MN_REMOVE_DEVICE , use IoReleaseRemoveLock.
Después de llamar a IoReleaseRemoveLockAndWait para un bloqueo de eliminación determinado, se producirá un error en las llamadas posteriores a IoAcquireRemoveLock para el mismo bloqueo de eliminación. IoReleaseRemoveLockAndWait no devuelve hasta que se hayan liberado todas las adquisiciones pendientes del bloqueo de eliminación.
Después de que IoReleaseRemoveLockAndWait vuelva, el controlador debe considerar que el dispositivo está en un estado en el que está listo para quitarse y no puede realizar operaciones de E/S. Por lo tanto, el controlador no debe llamar a la rutina IoInitializeRemoveLock para volver a inicializar el bloqueo de eliminación. La infracción de esta regla mientras el comprobador de controladores comprueba el controlador producirá una comprobación de errores.
Para obtener más información, consulte Uso de bloqueos de eliminación.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 2000. |
Plataforma de destino | Escritorio |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Reglas de cumplimiento de 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) |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de