Función FltAcquireResourceExclusive (fltkernel.h)

La rutina FltAcquireResourceExclusive adquiere el recurso especificado para el acceso exclusivo mediante el subproceso que realiza la llamada.

Sintaxis

VOID FLTAPI FltAcquireResourceExclusive(
  [in/out] PERESOURCE Resource
);

Parámetros

[in/out] Resource

Puntero a una estructura ERESOURCE opaca. El autor de la llamada debe asignar esta estructura desde un grupo no paginado e inicializarla llamando a ExInitializeResourceLite o ExReinitializeResourceLite.

Valor devuelto

None

Observaciones

FltAcquireResourceExclusive adquiere el recurso especificado para el acceso exclusivo mediante el subproceso que realiza la llamada.

Las siguientes circunstancias determinan si al autor de la llamada se le concede acceso exclusivo al recurso especificado:

  • Si el recurso no es propiedad actualmente, se concede acceso exclusivo inmediatamente al subproceso actual.

  • Si el autor de la llamada ya ha adquirido el recurso para el acceso exclusivo, al subproceso actual se le concede el mismo tipo de acceso de forma recursiva.

  • Los autores de llamadas que tienen acceso compartido al recurso deben liberar el bloqueo y, a continuación, volver a adquirirlo exclusivamente.

  • Si el recurso es propiedad actualmente como exclusivo de otro subproceso, o si el autor de la llamada solo tiene acceso compartido al recurso, el subproceso actual se coloca en un estado de espera hasta que se pueda adquirir el recurso.

Si dos subprocesos contienen un bloqueo compartido en el mismo recurso y ambos intentan adquirir el bloqueo exclusivamente sin liberar su bloqueo compartido, se interbloquearán. Esto significa que cada subproceso esperará a que el otro libere su suspensión compartida en el bloqueo y ninguno liberará su suspensión compartida hasta que la otra lo haga.

FltAcquireResourceExclusive es un contenedor para ExAcquireResourceExclusiveLite que deshabilita la entrega normal de APC del kernel.

Dado que FltAcquireResourceExclusive deshabilita la entrega normal del kernel APC, no es necesario llamar a KeEnterCriticalRegion o FsRtlEnterFileSystem antes de llamar a FltAcquireResourceExclusive.

Para liberar el recurso una vez adquirido, llame a FltReleaseResource. Cada llamada correcta a FltAcquireResourceExclusive debe coincidir con una llamada posterior a FltReleaseResource.

Para adquirir un recurso para el acceso compartido, llame a FltAcquireResourceShared.

Para eliminar un recurso de la lista de recursos del sistema, llame a ExDeleteResourceLite.

Para inicializar un recurso para reutilizarlo, llame a ExReinitializeResourceLite.

Para obtener más información sobre las estructuras ERESOURCE, vea Introducción a las rutinas ERESOURCE.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP SP2
Servidor mínimo compatible Windows Server 2003 SP1
Encabezado fltkernel.h
Library FltMgr.lib
IRQL IRQL <= APC_LEVEL