IRP_MJ_DEVICE_CONTROL

Cada controlador cuyos objetos de dispositivo pertenecen a un tipo de dispositivo determinado (consulte Especificar tipos de dispositivo) es necesario para admitir esta solicitud en una rutina DispatchDeviceControl , si existe un conjunto de códigos de control de E/S definidos por el sistema (IOCTLs) para el tipo. Para obtener más información sobre las E/S, consulte Introducción a los códigos de control de E/S.

Normalmente, los controladores de nivel superior pasan estas solicitudes a un controlador de dispositivo subyacente. Se supone que cada controlador de dispositivo de una pila de controladores admite esta solicitud, junto con un conjunto de IOCTLs específicos del tipo de dispositivo, públicos o privados. Para obtener más información sobre las ICTL para tipos de dispositivo específicos, consulte la documentación específica del tipo de dispositivo en el Kit de controladores de Microsoft Windows (WDK).

Cuándo se envió

Cada vez que siga la finalización correcta de una solicitud de creación.

Parámetros de entrada

El código de control de E/S se encuentra en Parameters.DeviceIoControl.IoControlCode en la ubicación de la pila de E/S del controlador del IRP.

Otros parámetros de entrada dependen del valor del código de control de E/S. Para obtener más información, vea Descripciones del búfer para códigos de control de E/S.

Parámetros de salida

Los parámetros de salida dependen del valor del código de control de E/S. Para obtener más información, vea Descripciones del búfer para códigos de control de E/S.

Operación

Un controlador recibe este código de control de E/S porque el subproceso en modo de usuario ha llamado a la función DeviceIoControl de Microsoft Win32 o a un controlador de modo kernel de nivel superior ha configurado la solicitud. Posiblemente, un controlador en modo de usuario ha llamado DeviceIoControl, pasando un código de control de E/S definido por el controlador (también denominado privado), para solicitar compatibilidad específica del dispositivo o del controlador desde un controlador de dispositivo estrechamente acoplado y en modo kernel.

Al recibir una solicitud de control de E/S de dispositivo, un controlador de nivel superior normalmente pasa el IRP al controlador inferior siguiente. Sin embargo, hay algunas excepciones a esta práctica. Por ejemplo, un controlador de clase que ha almacenado información de configuración obtenida del controlador de puerto subyacente podría completar ciertas solicitudes IOCTL_XXX sin pasar irP al controlador de puerto correspondiente.

Al recibir una solicitud de control de E/S de dispositivo, un controlador de dispositivo examina el código de control de E/S para determinar cómo satisfacer la solicitud. Para la mayoría de los códigos de control de E/S públicos, los controladores de dispositivo transfieren una pequeña cantidad de datos hacia o desde el búfer en Irp-AssociatedIrp.SystemBuffer>.

Para obtener información general sobre los códigos de control de E/S para IRP_MJ_DEVICE_CONTROL o solicitudes de IRP_MJ_INTERNAL_DEVICE_CONTROL , consulte Uso de códigos de control de E/S. Consulte también Solicitudes de E/S de Type-Specific de dispositivo.

Requisitos

Encabezado

Wdm.h (incluya Wdm.h, Ntddk.h o Ntifs.h)

Consulte también

DispatchDeviceControl