Condividi tramite


Funzione KeInsertHeadQueue (ntifs.h)

La routine KeInsertHeadQueue inserisce una voce all'inizio della coda specificata se non può usare immediatamente la voce per soddisfare un'attesa del thread.

Sintassi

LONG KeInsertHeadQueue(
  [in, out] PRKQUEUE    Queue,
  [in, out] PLIST_ENTRY Entry
);

Parametri

[in, out] Queue

Puntatore a un oggetto coda inizializzato per il quale il chiamante fornisce spazio di archiviazione residente nel pool non di paging. Questa struttura è definita come segue:

typedef struct _KQUEUE {
    DISPATCHER_HEADER Header;
    LIST_ENTRY EntryListHead;
    ULONG CurrentCount;
    ULONG MaximumCount;
    LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
Membro Significato
intestazione Intestazione coda
EntryListHead Puntatore alla prima voce nella coda
CurrentCount Numero di voci nella coda
MaximumCount Numero massimo di voci che la coda può contenere
ThreadListHead Puntatore alla prima voce nell'elenco di thread

[in, out] Entry

Puntatore alla voce della coda da inserire. Questo puntatore deve essere un indirizzo dello spazio di sistema residente.

Valore restituito

KeInsertHeadQueue restituisce lo stato del segnale precedente della coda specificata. Se è stato impostato su zero (non segnalato) prima di è stato chiamato il KeInsertHeadQueue, KeInsertHeadQueue restituisce zero, ovvero nessuna voce è stata accodata. Se è diverso da zero (segnalato), KeInsertHeadQueue restituisce il numero di voci accodate prima della chiamata KeInsertHeadQueue.

Osservazioni

Le voci da accodare da KeInsertHeadQueue devono essere allocate dal pool non di paging. Ad esempio, la memoria per le voci definite dal chiamante può essere allocata con ExAllocatePoolWithTag. Se il chiamante alloca le voci di una dimensione fissa, la creazione di un elenco lookaside con ExInitializeNPagedLookasideList e l'allocazione da essa con ExAllocateFromNPagedLookasideList è più efficiente rispetto all'esecuzione di chiamate frequenti a ExAllocatePoolWithTag, in particolare per le voci le cui dimensioni non sono un multiplo di PAGE_SIZE.

Se un thread è in attesa dell'oggetto coda quando viene chiamato KeInsertHeadQueue, l'attesa di un singolo thread viene soddisfatta da questa chiamata. Il thread viene inviato per l'esecuzione con il puntatore voce specificato.

Se non è in attesa alcun thread sull'oggetto coda quando viene chiamato KeInsertHeadQueue, la voce specificata viene inserita nella coda e lo stato del segnale dell'oggetto coda viene incrementato.

Per altre informazioni sull'uso di code interne gestite dal driver, vedere Driver-Managed Code.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione ntifs.h (include Ntifs.h)
libreria NtosKrnl.lib
dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
regole di conformità DDI HwStorPortProhibitedDDIs(storport)

Vedere anche

exAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertQueue

KeRemoveQueue