Función ExAcquireSharedStarveExclusive (wdm.h)

La rutina ExAcquireSharedStarveExclusive adquiere un recurso determinado para el acceso compartido sin esperar a que los intentos pendientes adquieran acceso exclusivo al mismo recurso.

Sintaxis

BOOLEAN ExAcquireSharedStarveExclusive(
  [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

ExAcquireSharedStarveExclusive devuelve TRUE si se concede el acceso solicitado. Esta rutina devuelve FALSE si la espera de entrada es FALSE y no se puede conceder acceso compartido inmediatamente.

Comentarios

Si al autor de la llamada se le concede acceso compartido al recurso determinado o cuando se le da acceso compartido, depende de lo siguiente:

  • Si el recurso no está registrado actualmente, se concede acceso compartido inmediatamente al subproceso actual.
  • Si el autor de la llamada ya ha adquirido el recurso (para el acceso compartido o exclusivo), al subproceso actual se le concede el mismo tipo de acceso de forma recursiva. Tenga en cuenta que realizar esta llamada no convierte el acceso exclusivo de un autor de llamada de un recurso determinado al acceso compartido.
  • Si el recurso es propiedad actualmente como compartido por otro subproceso, se concede acceso compartido al autor de la llamada inmediatamente, incluso si otro subproceso está esperando acceso exclusivo a ese recurso.
  • Si el recurso es propiedad actualmente como exclusivo de otro subproceso, el autor de la llamada se coloca en un estado de espera (Wait establecido en TRUE) o ExAcquireSharedStarveExclusive devuelve FALSE.
Los autores de llamadas de ExAcquireSharedStarveExclusive normalmente necesitan acceso rápido a un recurso compartido para guardar un descriptor de acceso exclusivo de realizar un trabajo redundante. Por ejemplo, un sistema de archivos podría llamar a esta rutina para modificar un recurso almacenado en caché, como un BCB anclado en la memoria caché, antes de que el administrador de caché pueda adquirir acceso exclusivo al recurso y escribir la memoria caché fuera del disco.

La entrega normal de APC del kernel debe deshabilitarse antes de llamar a esta rutina. Deshabilite la entrega normal de APC del kernel mediante una llamada a KeEnterCriticalRegion. La entrega debe permanecer deshabilitada hasta que se libere el recurso, momento en el que se puede volver a habilitar llamando a KeLeaveCriticalRegion. Para obtener más información, vea Deshabilitar las API.

El autor de la llamada puede liberar el recurso llamando a ExReleaseResourceLite o ExReleaseResourceForThreadLite.

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), WithinCriticalRegion(storport), WithinCriticalRegion(storport), WithinCriticalRegion(wdm)

Consulte también

ExAcquireResourceSharedLite

ExAcquireSharedWaitForExclusive

ExConvertExclusiveToSharedLite

ExGetExclusiveWaiterCount

ExIsResourceAcquiredExclusiveLite

ExIsResourceAcquiredSharedLite