Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las rutinas de distribución de un controlador (consulte DRIVER_DISPATCH) controlan los IRP con códigos de función de E/S de IRP_MJ_DEVICE_CONTROL y IRP_MJ_INTERNAL_DEVICE_CONTROL, respectivamente.
Para cada tipo común de dispositivo periférico, el sistema define un conjunto de códigos de control de E/S para IRP_MJ_DEVICE_CONTROL solicitudes. Los nuevos controladores para cada tipo de dispositivo deben admitir estas solicitudes. En la mayoría de los casos, estos códigos de control de E/S públicos para cada tipo de dispositivo no se exportan a aplicaciones en modo de usuario.
Algunos de estos códigos de control de E/S definidos por el sistema se usan mediante controladores de nivel superior que crean IRP para el controlador de dispositivo subyacente llamando a IoBuildDeviceIoControlRequest. Los componentes de Win32 usan otros para comunicarse con un controlador de dispositivo subyacente llamando a la función Win32 DeviceIoControl (que se describe en la documentación del SDK de Microsoft Windows) que, a su vez, llama a un servicio del sistema. El administrador de E/S configura un IRP y almacena el código de función principal IRP_MJ_DEVICE_CONTROL y el código de control de E/S especificado en la estructura de IO_STACK_LOCATION en Parameters.DeviceIoControl.IoControlCode. A continuación, el administrador de E/S llama a la rutina DispatchDeviceControl del controlador de nivel más alto de la cadena.
Para ciertos controladores suministrados por el sistema, diseñados para interoperar y admitir nuevos controladores, el sistema operativo también define un conjunto de códigos de control de entrada/salida para las solicitudes de IRP_MJ_INTERNAL_DEVICE_CONTROL. En la mayoría de los casos, estos códigos de control de E/S públicos permiten que los controladores de nivel superior del complemento interoperan con un controlador de dispositivo subyacente.
Por ejemplo, los controladores paralelos proporcionados por el sistema admiten un conjunto de códigos de control de E/S internos que los controladores suministrados por el proveedor envían en IRP_MJ_INTERNAL_DEVICE_CONTROL solicitudes. Para obtener más información, consulte la Guía de diseño del controlador de dispositivo paralelo.
Casi todas las operaciones solicitadas a través de códigos de control de E/S definidos por el sistema usan E/S almacenadas en búfer, ya que este tipo de solicitud rara vez requiere la transferencia de grandes cantidades de datos. Es decir, incluso a los controladores que configuran sus objetos de dispositivo para la E/S directa se les envían IRPs para solicitudes de control de dispositivos con datos que deben ser transferidos dentro o fuera del búfer en Irp-AssociatedIrp.SystemBuffer> (excepto para ciertos tipos de controladores de dispositivos de nivel superior con controladores multimedia Win32 estrechamente acoplados).
Además, un controlador puede definir un conjunto de códigos de control de E/S privados que otros controladores pueden usar para comunicarse con él. Los nuevos códigos de control de E/S públicos solo se pueden agregar al sistema con la cooperación de Microsoft Corporation, ya que los códigos de control de E/S públicos están integrados en el propio sistema operativo.
Para obtener información específica sobre el conjunto de códigos de control de E/S públicos que deben admitir distintos tipos de controladores y sobre cómo definir códigos de control de E/S privados, consulta las secciones de referencia específicas del dispositivo del Kit de controladores de Windows (WDK).