Compartir a través de


Función KeInsertQueue (ntifs.h)

El KeInsertQueue rutina inserta una entrada en la cola de la cola dada si no puede usar inmediatamente la entrada para satisfacer una espera de subproceso.

Sintaxis

LONG KeInsertQueue(
  [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.

[in, out] Entry

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

Valor devuelto

keInsertQueue devuelve el estado de señal anterior de la cola de dada. Si se estableció en cero (es decir, no se señala) antes de se llamó a keInsertQueue, KeInsertQueue devuelve cero, lo que significa que no se ponen en cola entradas. Si no era cero (señalizado), keInsertQueue devuelve el número de entradas que se ponen en cola antes de llamar a keInsertQueue.

Observaciones

Las entradas que se van a poner en cola KeInsertQueue 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 búsqueda con ExInitializeNPagedLookasideList y la asignación desde ella con ExAllocateFromNPagedLookasideList es más eficaz que realizar llamadas frecuentes a ExAllocatePoolWithTag, especialmente para entradas cuyo tamaño no sea un múltiplo de PAGE_SIZE.

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

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

Para obtener más información sobre el uso de colas internas administradas por controladores, consulte Driver-Managed Queues.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de ntifs.h (incluya Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL
reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport)

Consulte también

ExAllocateFromNPagedLookasideList

ExAllocatePoolWithTag

ExInitializeNPagedLookasideList

KeInitializeQueue

KeInsertHeadQueue

KeRemoveQueue