Función ExAcquireSharedWaitForExclusive (wdm.h)
La rutina ExAcquireSharedWaitForExclusive adquiere el recurso especificado para el acceso compartido si se puede conceder acceso compartido y no hay ningún waiters exclusivo.
Sintaxis
BOOLEAN ExAcquireSharedWaitForExclusive(
[in, out] PERESOURCE Resource,
[in] BOOLEAN Wait
);
Parámetros
[in, out] Resource
Puntero al recurso que se va a adquirir para el acceso compartido.
[in] Wait
Especifica el comportamiento de la rutina siempre que el recurso no se pueda adquirir inmediatamente. Si es TRUE, el autor de la llamada se coloca en un estado de espera hasta que se pueda adquirir el recurso. Si es FALSE, la rutina devuelve inmediatamente, independientemente de si se puede adquirir el recurso.
Valor devuelto
ExAcquireSharedWaitForExclusive devuelve TRUE si se concede el acceso solicitado o un propietario exclusivo libera el recurso. Esta rutina devuelve FALSE si la espera de entrada es FALSE y no se puede conceder acceso compartido inmediatamente.
Comentarios
La mayoría de los controladores deben usar ExAcquireResourceSharedLite en lugar de ExAcquireSharedWaitForExclusive.
El autor de la llamada puede liberar el recurso llamando a ExReleaseResourceLite o ExReleaseResourceForThreadLite.
Si no se puede conceder acceso compartido inmediatamente, el autor de la llamada puede esperar a que otros subprocesos adquieran y liberen la propiedad exclusiva del recurso.
Si el autor de la llamada tiene acceso compartido al recurso determinado o cuándo depende de lo siguiente:
- Si el recurso no está propietario actualmente, se concede acceso compartido inmediatamente al subproceso actual.
- Si el autor de la llamada ya tiene acceso exclusivo al recurso, al subproceso actual se le concede el mismo tipo de acceso de forma recursiva.
- Si el recurso es propiedad actualmente como compartido y no hay intentos pendientes de adquirir acceso exclusivo, el acceso compartido se concede al autor de la llamada inmediatamente.
-
Si el recurso es propiedad actualmente como compartido, pero hay un intento pendiente de adquirir acceso exclusivo, el autor de la llamada se coloca en un estado de espera (Wait establecido en TRUE) o ExAcquireSharedWaitForExclusive devuelve FALSE.
Cuando el subproceso actual espera a adquirir el recurso hasta después de que se haya liberado una propiedad exclusiva pendiente, ExAcquireSharedWaitForExclusive devuelve TRUE cuando se concede acceso compartido al subproceso actual al recurso y reanuda la ejecución.
Si el autor de la llamada especifica TRUE para el parámetro Wait , el autor de la llamada se bloquea hasta que otro subproceso libere el recurso en nombre del autor de la llamada mediante ExReleaseResourceForThread. Los escritores de controladores deben tener cuidado para asegurarse de que otro subproceso libera realmente el recurso; de lo contrario, el autor de la llamada está interbloqueado. ExAcquireResourceSharedLite no tiene esta propiedad, por lo que los controladores deben usar esa rutina a menos que requieran el comportamiento concreto de ExAcquireSharedWaitForExclusive.
La entrega normal de APC del kernel debe deshabilitarse antes de llamar a esta rutina. Deshabilite la entrega normal de APC del kernel llamando a KeEnterCriticalRegion. La entrega debe permanecer deshabilitada hasta que se libere el recurso, en cuyo momento se puede volver a habilitar mediante una llamada a KeLeaveCriticalRegion. Para obtener más información, vea Deshabilitar LAS API.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 2000. |
Plataforma de destino | Universal |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
Reglas de cumplimiento de DDI | HwStorPortProhibitedDDIs(storport), IrqlExApcLte3(wdm), SpNoWait(storport), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm) |
Consulte también
ExAcquireSharedStarveExclusive
ExConvertExclusiveToSharedLite
ExIsResourceAcquiredExclusiveLite