Compartir a través de


IO_WORKITEM_ROUTINE función de devolución de llamada (wdm.h)

Una rutina WorkItem realiza el procesamiento de un elemento de trabajo en cola por la rutina IoQueueWorkItem .

Sintaxis

IO_WORKITEM_ROUTINE IoWorkitemRoutine;

void IoWorkitemRoutine(
  [in]           PDEVICE_OBJECT DeviceObject,
  [in, optional] PVOID Context
)
{...}

Parámetros

[in] DeviceObject

Puntero a uno de los objetos de dispositivo del autor de la llamada. Este es el puntero que se pasó como parámetro DeviceObject a IoAllocateWorkItem cuando se asignó el elemento de trabajo o como parámetro IoObject a IoInitializeWorkItem cuando se inicializó el elemento de trabajo.

[in, optional] Context

Especifica información de contexto específica del controlador. Este es el valor que se pasó como parámetro Context a IoQueueWorkItem cuando se puso en cola el elemento de trabajo.

Valor devuelto

None

Observaciones

El controlador pone en cola una rutina WorkItem mediante una llamada a IoQueueWorkItem y un subproceso de trabajo del sistema ejecuta posteriormente la rutina. Una rutina WorkItem debe ejecutarse durante un período de tiempo limitado; de lo contrario, el sistema puede interbloquear. Para obtener más información, vea Subprocesos de trabajo del sistema.

Una rutina WorkItem se ejecuta en IRQL = PASSIVE_LEVEL y en un contexto de subproceso del sistema.

Ejemplos

Para definir una rutina de devolución de llamada workItem , primero debe proporcionar una declaración de función que identifique el tipo de rutina de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Análisis de código para controladores, Comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una rutina de devolución de llamada WorkItem denominada MyWorkItem, use el tipo IO_WORKITEM_ROUTINE tal y como se muestra en este ejemplo de código:

IO_WORKITEM_ROUTINE MyWorkItem;

A continuación, implemente la rutina de devolución de llamada de la siguiente manera:

_Use_decl_annotations_
VOID
  MyWorkItem(
    PDEVICE_OBJECT  DeviceObject,
    PVOID  Context 
    )
  {
      // Function body
  }

El tipo de función IO_WORKITEM_ROUTINE se define en el archivo de encabezado Wdm.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación a la _Use_decl_annotations_ definición de la función. La _Use_decl_annotations_ anotación garantiza que se usen las anotaciones que se aplican al tipo de función IO_WORKITEM_ROUTINE en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de rol de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_, vea Anotación del comportamiento de la función.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL Se llama en PASSIVE_LEVEL.

Consulte también

IO_WORKITEM

IoQueueWorkItem