Compartir a través de


Función KeInsertHeadQueue (ntifs.h)

La rutina KeInsertHeadQueue inserta una entrada en el encabezado de la cola especificada si no puede usar inmediatamente la entrada para satisfacer una espera de subproceso.

Sintaxis

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

Parámetros

[in, out] Queue

Puntero a un objeto de cola inicializado para el que el autor de la llamada proporciona almacenamiento residente en un grupo no paginado. Esta estructura se define de la siguiente manera:

typedef struct _KQUEUE {
    DISPATCHER_HEADER Header;
    LIST_ENTRY EntryListHead;
    ULONG CurrentCount;
    ULONG MaximumCount;
    LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
Miembro Significado
Encabezado Encabezado de cola
EntryListHead Puntero a la primera entrada de la cola
CurrentCount Número de entradas de la cola
MaximumCount Número máximo de entradas que puede contener la cola
ThreadListHead Puntero a la primera entrada de la lista de subprocesos

[in, out] Entry

Puntero a la entrada de cola que se va a insertar. Este puntero debe ser una dirección de espacio del sistema residente.

Valor devuelto

KeInsertHeadQueue devuelve el estado de señal anterior de la cola especificada. Si se estableció en cero (no señalado) antes de llamar a KeInsertHeadQueue , KeInsertHeadQueue devuelve cero, lo que significa que no se ponen en cola entradas. Si era distinto de cero (señalado), KeInsertHeadQueue devuelve el número de entradas que se ponen en cola antes de llamar a KeInsertHeadQueue .

Comentarios

Las entradas que KeInsertHeadQueue debe poner en cola deben asignarse desde un grupo no paginado. Por ejemplo, la memoria de las entradas definidas por el autor de la llamada se puede asignar con ExAllocatePoolWithTag. Si el autor de la llamada asigna entradas de un tamaño fijo, la creación de una lista de lookaside con ExInitializeNPagedLookasideList y la asignación desde ella con ExAllocateFromNPagedLookasideList es más eficaz que realizar llamadas frecuentes a ExAllocatePoolWithTag, especialmente para las entradas cuyo tamaño no es un múltiplo de PAGE_SIZE.

Si algún subproceso está esperando en el objeto de cola cuando se llama a KeInsertHeadQueue , esta llamada satisface la espera de un único subproceso. El subproceso se envía para su ejecución con el puntero entry especificado.

Si no hay subprocesos actualmente en espera en el objeto de cola cuando se llama a KeInsertHeadQueue , la entrada especificada se inserta en la cola y se incrementa el estado de señal del objeto de cola.

Para más información sobre el uso de colas internas administradas por controladores, consulte Colas administradas por controladores.

Requisitos

Requisito Value
Plataforma de destino Universal
Encabezado ntifs.h (incluya Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport)

Consulte también

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertQueue

KeRemoveQueue