Creación de un objeto device
Un controlador monolítico debe crear un objeto de dispositivo para cada dispositivo físico, lógico o virtual para el que controla las solicitudes de E/S. Un controlador que no crea un objeto de dispositivo para un dispositivo no recibe ningún IRP para el dispositivo.
En algunas áreas tecnológicas, un minidriver asociado a un controlador de clase o controlador de puerto no tiene que crear sus propios objetos de dispositivo. En su lugar, la clase o el controlador de puerto crea el objeto de dispositivo y recibe todos los IRP del dispositivo. A continuación, el controlador de clase o puerto usa un método específico del controlador para pasar la solicitud de E/S al minidriver. Consulte la documentación de su área tecnológica concreta para determinar si Microsoft proporciona una clase o controlador de puerto que crea objetos de dispositivo en nombre del controlador.
Los controladores llaman a IoCreateDevice o IoCreateDeviceSecure para crear sus objetos de dispositivo. Para obtener más información sobre qué rutina usar, consulte las secciones siguientes.
Crear objetos de dispositivo para controladores de filtro y función WDM
Creación de objetos de dispositivo para controladores de bus de WDM
Crear objetos de dispositivo para controladores que no son WDM
Cuando el controlador crea un objeto de dispositivo, proporciona la siguiente información a IoCreateDevice o IoCreateDeviceSecure:
Tamaño de la extensión de dispositivo del dispositivo. La extensión de dispositivo es un área de almacenamiento asignada por el sistema que el controlador puede usar para el almacenamiento específico del dispositivo. Para obtener más información, consulte Extensiones de dispositivo.
Constante definida por el sistema, que indica el DeviceType representado por el objeto de dispositivo. Para obtener más información, vea Especificar tipos de dispositivo.
Una o varias constantes definidas por el sistema que indican las características del dispositivo para el dispositivo. Para obtener más información, consulte Especificación de características del dispositivo.
Valor booleano, denominado Exclusive, que especifica si se debe establecer un bit en las marcas del objeto de dispositivo con DO_EXCLUSIVE, lo que indica que el controlador ofrece un dispositivo exclusivo, como un dispositivo de vídeo, serie, paralelo o sonido. Los controladores WDM deben establecer Exclusive en FALSE. Para obtener más información, vea Especificar el acceso exclusivo a objetos de dispositivo.
Puntero al objeto de controlador para el controlador. Una función WDM o un controlador de filtro recibe un puntero a su objeto de controlador como parámetro para su rutina AddDevice . Todos los controladores reciben un puntero al objeto driver en su rutina DriverEntry . El sistema usa este puntero para asociar el controlador con su objeto de dispositivo.
Puntero opcional a una cadena Unicode terminada en null (DeviceName) que asigna el nombre al dispositivo. Los controladores WDM, excepto los conductores de autobús, no proporcionan un nombre de dispositivo; de este modo se omiten las características de seguridad del administrador de PnP. Para obtener más información, vea Objetos de dispositivo con nombre.
Si la llamada a IoCreateDevice o IoCreateDeviceSecure se realiza correctamente, el administrador de E/S proporciona almacenamiento para el propio objeto de dispositivo y para todas las demás estructuras de datos asociadas al objeto de dispositivo, incluida la extensión del dispositivo, que inicializa con ceros.
Crear objetos de dispositivo para controladores de filtro y función WDM
Los controladores de WDM, distintos de los controladores de autobús, llaman a IoCreateDevice para crear sus objetos de dispositivo. La mayoría de los controladores WDM crean sus objetos de dispositivo desde sus rutinas AddDevice . Algunos controladores, como los controladores de disco que deben responder a ioCTLs de diseño de unidad, llamen a IoCreateDevice desde una rutina de envío.
A menos que las secciones específicas del tipo de dispositivo del estado de documentación del Kit de controladores de Windows (WDK) de lo contrario, el controlador debe crear sus objetos de dispositivo en su rutina AddDevice . Para obtener más información, vea Escribir una rutina AddDevice.
Creación de objetos de dispositivo para controladores de bus de WDM
Un controlador de bus WDM crea un PDO cuando enumera un nuevo dispositivo en respuesta a una solicitud de IRP_MN_QUERY_DEVICE_RELATIONS , si el tipo de relación es BusRelations.
Las reglas siguientes determinan si un controlador de bus llama a IoCreateDevice o IoCreateDeviceSecure para crear un objeto de dispositivo:
Si un dispositivo se puede usar en modo sin procesar, debe llamar a IoCreateDeviceSecure.
Si el dispositivo no es compatible con el modo sin procesar, el controlador de bus puede usar IoCreateDevice o IoCreateDeviceSecure. IoCreateDevice se puede usar cuando la seguridad predeterminada del sistema para los dispositivos del bus es adecuada; IoCreateDeviceSecure se puede usar para especificar un descriptor de seguridad más estricto. Para obtener más información, consulte Control del acceso a dispositivos.
Crear objetos de dispositivo para controladores que no son WDM
Un controlador que no es WDM usa IoCreateDevice para crear objetos de dispositivo sin nombre e IoCreateDeviceSecure para crear objetos de dispositivo con nombre. Tenga en cuenta que los objetos de dispositivo sin nombre de un controlador que no sea WDM no son accesibles desde el modo de usuario, por lo que el controlador normalmente debe crear al menos un objeto con nombre.