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
Nessuno.
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 nuovamente l'accesso condiviso. Tuttavia, ogni chiamata a FltAcquirePushLockShared deve essere confrontata con una chiamata successiva a FltReleasePushLock.
Quando il chiamante riceverà l'accesso condiviso al blocco push specificato dipende dagli elementi 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 cameriere 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, chiamare FltReleasePushLock. Ogni chiamata a FltAcquirePushLockShared deve corrispondere a una chiamata successiva a FltReleasePushLock.
Per acquisire un blocco push per l'accesso esclusivo, chiamare FltAcquirePushLockExclusive.
Per inizializzare un blocco push, chiamare FltInitializePushLock.
Per eliminare un blocco push, chiamare FltDeletePushLock.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | fltkernel.h (include Fltkernel.h) |
libreria | FltMgr.lib |
IRQL | <= APC_LEVEL |