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

La rutina StartIo inicia la operación de E/S descrita por un IRP.

Sintaxis

DRIVER_STARTIO DriverStartio;

void DriverStartio(
  [in, out] _DEVICE_OBJECT *DeviceObject,
  [in, out] _IRP *Irp
)
{...}

Parámetros

[in, out] DeviceObject

Puntero proporcionado por el autor de la llamada a una estructura DEVICE_OBJECT . Este es el objeto de dispositivo para el dispositivo de destino, creado previamente por la rutina AddDevice del controlador.

[in, out] Irp

Puntero proporcionado por el autor de la llamada a una estructura IRP que describe la operación de E/S solicitada.

Valor devuelto

None

Observaciones

La rutina StartIo de un controlador se ejecuta en un contexto de subproceso arbitrario en IRQL = DISPATCH_LEVEL.

La rutina StartIo es opcional. La rutina StartIo de un controlador, si se proporciona, debe denominarse XxxStartIo, donde Xxx es un prefijo específico del controlador. La rutina DriverEntry del controlador debe almacenar la dirección de la rutina StartIo en DriverObject-DriverStartIo>. (Si no se proporciona ninguna rutina, este puntero debe ser NULL).

Un controlador puede usar IoSetStartIoAttributes para establecer atributos en cuando se llama a su rutina StartIo .

Para obtener información detallada sobre cómo implementar la rutina StartIo de un controlador, vea Escribir una rutina StartIo.

Ejemplos

Para definir una rutina de devolución de llamada StartIo , 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 StartIo denominada MyStartIo, use el tipo de DRIVER_STARTIO como se muestra en este ejemplo de código:

DRIVER_STARTIO MyStartIo;

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

_Use_decl_annotations_
VOID
  MyStartIo(
    struct _DEVICE_OBJECT  *DeviceObject,
    struct _IRP  *Irp 
    )
  {
      // Function body
  }

El tipo de función DRIVER_STARTIO 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 DRIVER_STARTIO 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 DISPATCH_LEVEL.