Condividi tramite


Funzione FltAcquirePushLockExclusive (fltkernel.h)

La macro FltAcquirePushLockExclusive acquisisce il blocco push specificato per l'accesso esclusivo dal thread chiamante.

Sintassi

VOID FLTAPI FltAcquirePushLockExclusive(
  [in, out] PEX_PUSH_LOCK PushLock
);

Parametri

[in, out] PushLock

Puntatore di blocco push opaco di tipo PEX_PUSH_LOCK. Questo puntatore deve essere stato inizializzato da una chiamata precedente a FltInitializePushLock.

Valore restituito

No.

Osservazioni

FltAcquirePushLockExclusive acquisisce il blocco push specificato per l'accesso esclusivo dal thread chiamante.

I blocchi push sono simili alle strutture ERESOURCE (dette anche risorse) in quanto possono essere acquisiti per l'accesso condiviso o esclusivo. Per altre informazioni sui blocchi push, vedere la voce di riferimento per FltInitializePushLock.

A differenza delle strutture ERESOURCE, i blocchi push non possono essere acquisiti in modo ricorsivo. Se il chiamante ha già acquisito il blocco push per l'accesso esclusivo o condiviso, il thread verrà bloccato.

Quando il chiamante riceverà l'accesso esclusivo al blocco push specificato dipende dagli elementi seguenti:

  • Se il blocco push non viene attualmente generato, l'accesso esclusivo viene concesso immediatamente al thread corrente.

  • Se il blocco push è già stato acquisito per l'accesso esclusivo o condiviso da un altro thread, il thread corrente viene inserito in uno stato di attesa fino a quando non sarà possibile acquisire il blocco push.

Poiché FltAcquirePushLockExclusive disabilita il normale recapito APC del kernel, non è necessario chiamare KeEnterCriticalRegion o FsRtlEnterFileSystem prima di chiamare FltAcquirePushLockExclusive.

Per rilasciare il blocco push dopo l'acquisizione, chiama FltReleasePushLock. Ogni chiamata a FltAcquirePushLockExclusive deve corrispondere a una chiamata successiva a FltReleasePushLock.

Per acquisire un blocco push per l'accesso condiviso, chiamare FltAcquirePushLockShared.

Per inizializzare un blocco push, chiamare FltInitializePushLock.

Per eliminare un blocco push, chiamare FltDeletePushLock.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (include Fltkernel.h)
Libreria FltMgr.lib
IRQL <= APC_LEVEL

Vedi anche

FltAcquirePushLockExclusiveEx

FltAcquirePushLockShared

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion