Funzione KeReleaseSemaphore (wdm.h)
La routine KeReleaseSemaphore rilascia l'oggetto semaforo specificato.
Sintassi
LONG KeReleaseSemaphore(
[in, out] PRKSEMAPHORE Semaphore,
[in] KPRIORITY Increment,
[in] LONG Adjustment,
[in] BOOLEAN Wait
);
Parametri
[in, out] Semaphore
Puntatore a un oggetto semaforo inizializzato per il quale il chiamante fornisce l'archiviazione.
[in] Increment
Specifica l'incremento della priorità da applicare se il rilascio del semaforo causa un'attesa da soddisfare.
[in] Adjustment
Specifica un valore da aggiungere al conteggio del semaforo corrente. Il valore deve essere positivo.
[in] Wait
Specifica se la chiamata a KeReleaseSemaphore deve essere seguita immediatamente da una chiamata a una delle routine KeWaitXxx . Se TRUE, la chiamata KeReleaseSemaphore deve essere seguita da una chiamata a KeWaitForMultipleObjects, KeWaitForMutexObject o KeWaitForSingleObject. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.
Valore restituito
Se il valore restituito è zero, lo stato precedente dell'oggetto semaforo non viene segnalato.
Commenti
KeReleaseSemaphore fornisce un aumento della priorità di runtime per i thread in attesa. Se questa chiamata imposta il semaforo sullo stato segnalato, il conteggio del semaforo viene incrementato dal valore specificato. Il chiamante può anche specificare se chiamerà una delle routine KeWaitXxx non appena KeReleaseSemaphore restituisce il controllo.
Il rilascio di un oggetto semaforo causa l'aumento del conteggio del semaforo dal valore del parametro Di regolazione . Se il valore risultante è maggiore del limite dell'oggetto semaforo, il conteggio non viene modificato e viene generata un'eccezione, STATUS_SEMAPHORE_LIMIT_EXCEEDED.
L'aumento del conteggio dell'oggetto semaforo causa il raggiungimento di uno stato segnalato e viene effettuato un tentativo di soddisfare il maggior numero possibile di attese sull'oggetto semaforo.
La routine KeReleaseSemaphore potrebbe generare temporaneamente irQL. Se il parametro Wait è FALSE, la routine, prima di restituire, ripristina il valore IRQL al valore originale che aveva all'inizio della chiamata.
Se WaitTRUE, la routine restituisce senza abbassare = irQL. In questo caso, la chiamata KeReleaseSemaphore deve essere immediatamente seguita da una chiamata KeWaitXxx . Impostando Wait = TRUE, il chiamante può impedire che si verifichi un commutatore di contesto non necessario tra la chiamata KeReleaseSemaphore e la chiamata KeWaitXxx . La routine KeWaitXxx , prima di restituire, ripristina il valore di IRQL all'inizio della chiamata KeReleaseSemaphore . Anche se IRQL disabilita i commutatori di contesto tra le due chiamate, queste chiamate non possono essere usate in modo affidabile come inizio e fine di un'operazione atomica. Ad esempio, tra queste due chiamate, un thread in esecuzione contemporaneamente su un altro processore potrebbe modificare lo stato dell'oggetto semaforo o della destinazione dell'attesa.
Avviso
Una routine di driver paginabile o di thread paginabile eseguita in IRQL = PASSIVE_LEVEL non deve mai chiamare KeReleaseSemaphore con il parametro Wait impostato su TRUE. Tale chiamata causa un errore di pagina irreversibile se la funzione chiamante viene paginata tra le chiamate a KeReleaseSemaphore e KeWaitXxx.
Per altre informazioni sugli oggetti semafori, vedere Semaphore Objects.
I chiamanti di KeReleaseSemaphore devono essere in esecuzione in IRQL <= DISPATCH_LEVEL specificato che Wait è impostato su FALSE. In caso contrario, il chiamante deve essere in esecuzione in IRQL = PASSIVE_LEVEL.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile a partire da Windows 2000. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Vedere La sezione Osservazioni. |
Regole di conformità DDI | HwStorPortProhibitedDDDIs(storport) |