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

DriverEntry es la primera rutina a la que se llama después de cargar un controlador y es responsable de inicializar el controlador.

Sintaxis

DRIVER_INITIALIZE DriverInitialize;

NTSTATUS DriverInitialize(
  [in] _DRIVER_OBJECT *DriverObject,
  [in] PUNICODE_STRING RegistryPath
)
{...}

Parámetros

[in] DriverObject

Puntero a una estructura de DRIVER_OBJECT . Este es el objeto de controlador del controlador.

[in] RegistryPath

Puntero a una cadena Unicode con recuento que especifica la ruta de acceso a la clave del Registro del controlador.

Valor devuelto

Si la rutina se realiza correctamente, debe devolver STATUS_SUCCESS. De lo contrario, debe devolver uno de los valores de estado de error definidos en Ntstatus.h.

Comentarios

El parámetro DriverObject proporciona la rutina DriverEntry con un puntero al objeto de controlador del controlador, que el administrador de E/S asigna. La rutina DriverEntry debe rellenar el objeto de controlador con puntos de entrada para las rutinas estándar del controlador.

El puntero DriverObject proporciona al controlador acceso a DriverObject-HardwareDatabase>, que apunta a una cadena Unicode con recuento que especifica una ruta de acceso al árbol \Registry\Machine\Hardware del registro.

La cadena de ruta de acceso del Registro a la que apunta RegistryPath tiene el formato \Registry\Machine\System\CurrentControlSet\Services\DriverName. Un controlador puede usar esta ruta de acceso para almacenar información específica del controlador; consulte Claves del Registro para controladores. La rutina DriverEntry debe guardar una copia de la cadena Unicode, no el puntero, ya que el administrador de E/S libera el búfer de RegistryPath después de que DriverEntry devuelva.

Para obtener más información sobre cómo implementar una rutina DriverEntry , vea Escribir una rutina DriverEntry.

Aunque es posible asignar un nombre a esta rutina algo distinto de DriverEntry, no se recomienda hacerlo. Las herramientas de compilación proporcionadas por DDK informan automáticamente al enlazador de que el punto de entrada del controlador se denomina DriverEntry, por lo que dar a la rutina otro nombre requiere que modifique las herramientas de compilación. Para obtener más información acerca de las herramientas de compilación, consulte Building a Driver (Creación de un controlador).

Ejemplos

Para definir una rutina de devolución de llamada driverEntry , 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 Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Para definir una rutina de devolución de llamada driverEntry , use el tipo de DRIVER_INITIALIZE como se muestra en este ejemplo de código:

DRIVER_INITIALIZE DriverEntry;

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

_Use_decl_annotations_
NTSTATUS 
  DriverEntry( 
    struct _DRIVER_OBJECT  *DriverObject,
    PUNICODE_STRING  RegistryPath 
    )
  {
      // Function body
  }

El tipo de función DRIVER_INITIALIZE 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_INITIALIZE 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 roles de función para controladores WDM. Para obtener información sobre _Use_decl_annotations_, consulte Anotación del comportamiento de la función.

Requisitos

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

Consulte también

DRIVER_OBJECT