DRIVER_INITIALIZE función de devolución de llamada (wdm.h)
DRIVER_INITIALIZE es la definición de tipo del punto de entrada de inicialización del controlador, que se denomina convencionalmente DriverEntry. Esta es la primera rutina a la que se llama después de cargar un controlador.
Sintaxis
DRIVER_INITIALIZE DriverInitialize;
NTSTATUS DriverInitialize(
[in] _DRIVER_OBJECT *DriverObject,
[in] PUNICODE_STRING RegistryPath
)
{...}
Parámetros
[in] DriverObject
Puntero a la estructura DRIVER_OBJECT 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.
Observaciones
El parámetro DriverObject proporciona la rutina DriverEntry con un puntero al objeto driver del controlador, que asigna el administrador de E/S. La rutina de 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 de 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 DriverEntry.
Para obtener más información sobre cómo implementar una rutina de DriverEntry, consulte Writing a DriverEntry Routine.
Aunque es posible asignar un nombre a esta rutina que no sea 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 sobre las herramientas de compilación, consulte Building a Driver.
Ejemplos
Para definir una rutina de devolución de llamada de 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 Análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores.
Para definir una rutina de devolución de llamada de 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 mayor precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación _Use_decl_annotations_
a la definición de función. La anotación _Use_decl_annotations_
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 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 | Valor |
---|---|
de la plataforma de destino de | Escritorio |
encabezado de | wdm.h (include Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h) |
irQL | Se llama en PASSIVE_LEVEL. |