Función ExInitializeWorkItem (wdm.h)
ExInitializeWorkItem inicializa un elemento de cola de trabajo con un contexto proporcionado por el autor de la llamada y una rutina de devolución de llamada que se va a poner en cola para su ejecución cuando se proporciona control a un subproceso de trabajo del sistema.
Advertencia
Use esta rutina con extrema precaución. Consulte la sección comentarios de a continuación.
Sintaxis
void ExInitializeWorkItem(
[in] PWORK_QUEUE_ITEM Item,
[in] PWORKER_THREAD_ROUTINE Routine,
[in] PVOID Context
);
Parámetros
[in] Item
Puntero a una estructura de WORK_QUEUE_ITEM asignada por el autor de la llamada que se va a inicializar. Esta estructura debe asignarse desde un grupo no paginado. La rutina de devolución de llamada especificada en el parámetro rutina de es responsable de liberar este elemento de trabajo cuando ya no es necesario llamando a ExFreePool o ExFreePoolWithTag.
[in] Routine
Puntero a una rutina definida por el autor de la llamada que se llamará para procesar el elemento de trabajo. Esta rutina se llamará en el contexto de un subproceso del sistema en IRQL PASSIVE_LEVEL. Esta rutina se declara de la siguiente manera:
VOID
(*PWORKER_THREAD_ROUTINE)(
IN PVOID Parameter
);
Parámetro
Puntero de información de contexto que se pasó en el parámetro context .
[in] Context
Puntero a la información de contexto proporcionada por el autor de la llamada que se va a pasar a la rutina de devolución de llamada especificada en el parámetro rutina de.
Valor devuelto
Ninguno
Observaciones
ExInitializeWorkItem inicializa el elemento de trabajo con la rutina de devolución de llamada y el puntero de contexto especificados y punteros de lista NULL.
Para agregar el elemento de trabajo a una cola de trabajo del sistema, llame a ExQueueWorkItem.
Los elementos de trabajo son un recurso limitado y los controladores solo deben asignarlos según sea necesario. Por ejemplo, no asigne un elemento de trabajo en driverEntry para el uso dedicado del controlador.
ExInitializeWorkItem y exQueueWorkItem solo se pueden usar en los casos en los que el elemento de trabajo especificado no esté asociado a ningún objeto de dispositivo o pila de dispositivos. En todos los demás casos, los controladores deben usar IoAllocateWorkItem, IoFreeWorkItemy IoQueueWorkItem, ya que solo estas rutinas garantizan que el objeto de dispositivo asociado al elemento de trabajo especificado permanezca disponible hasta que se haya procesado el elemento de trabajo.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de | Escritorio |
encabezado de | wdm.h (include FltKernel.h, Ntifs.h, Ntddk.h, Wdm.h) |
irQL | Cualquier nivel |