Funzione FltAcquirePushLockShared (fltkernel.h)

La routine FltAcquirePushLockShared acquisisce il blocco push specificato per l'accesso condiviso dal thread chiamante.

Sintassi

VOID FLTAPI FltAcquirePushLockShared(
  [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

La routine FltAcquirePushLockShared acquisisce il blocco push specificato per l'accesso condiviso 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, il sistema si blocca. Se il chiamante ha già acquisito il blocco push per l'accesso condiviso, può ricevere di nuovo l'accesso condiviso. Ogni chiamata a FltAcquirePushLockShared deve tuttavia corrispondere a una chiamata successiva a FltReleasePushLock.

Quando il chiamante riceverà l'accesso condiviso al blocco push specificato dipende dalle condizioni seguenti:

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

  • Se il blocco push è già stato acquisito per l'accesso condiviso da un altro thread e nessun thread è in attesa dell'accesso esclusivo al blocco push, l'accesso condiviso viene concesso immediatamente al chiamante. Il chiamante viene inserito in uno stato di attesa se è presente un waiter esclusivo.

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

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

Per rilasciare il blocco push dopo l'acquisizione, chiama FltReleasePushLock. Ogni chiamata a FltAcquirePushLockShared deve essere abbinata da una chiamata successiva a FltReleasePushLock.

Per acquisire un blocco push per l'accesso esclusivo, chiama FltAcquirePushLockExclusive.

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

FltAcquirePushLockExclusive

FltAcquirePushLockSharedEx

FltDeletePushLock

FltInitializePushLock

FltReleasePushLock

FsRtlEnterFileSystem

KeEnterCriticalRegion