Directrices para escribir rutinas AddDevice
Tenga en cuenta las siguientes directrices de diseño al escribir una rutina AddDevice :
Si un controlador de filtro determina que se llamó a su rutina AddDevice para un dispositivo que no necesita atender, el controlador de filtro debe devolver STATUS_SUCCESS para permitir que el resto de la pila de dispositivos se cargue para el dispositivo. El controlador de filtro no crea un objeto de dispositivo ni lo asocia a la pila de dispositivos; El controlador de filtro solo devuelve éxito y permite que el resto de los controladores se agreguen a la pila.
Un controlador debe proporcionar almacenamiento, normalmente en la extensión del dispositivo de un objeto de dispositivo, para los objetos definidos por el kernel y los bloqueos de número ejecutivo que usa. Un controlador también debe proporcionar almacenamiento para punteros a determinados objetos obtenidos del administrador de E/S u otros componentes del sistema.
Puede decidir asignar memoria adicional de espacio del sistema para las necesidades del controlador, como para búferes de E/S a largo plazo o una lista de aspecto. Si es así, una rutina AddDevice puede llamar a las siguientes rutinas:
ExAllocatePoolWithTag para la memoria de espacio del sistema paginada o no paginada
ExInitializePagedLookasideList o ExInitializeNPagedLookasideList para inicializar una lista de lookaside paginada o no paginada
Si el controlador tiene un subproceso dedicado al dispositivo o espera en cualquier objeto de distribuidor definido por kernel, la rutina AddDevice podría inicializar objetos de distribuidor del kernel.
Si el controlador usa bloqueos de giro ejecutivos o proporciona el almacenamiento para un bloqueo de giro de interrupción, la rutina AddDevice podría inicializar estos bloqueos de giro. Consulte Bloqueos de número para obtener más información.
Apriete la seguridad abierta de archivos al llamar a IoCreateDevice.
Especifique la característica FILE_DEVICE_SECURE_OPEN en la llamada a IoCreateDevice. Esta característica es compatible con Windows NT 4.0 SP5 y versiones posteriores. Dirige al administrador de E/S para realizar comprobaciones de seguridad en el objeto de dispositivo para todas las solicitudes abiertas. Los proveedores deben especificar esta característica en las llamadas a IoCreateDevice si la característica FILE_DEVICE_SECURE_OPEN no está establecida en el INF del instalador de clase del dispositivo o en el INF del dispositivo y los controladores no realizan sus propias comprobaciones de seguridad al abrirse. (Para obtener más información, vea Controlar el acceso al espacio de nombres del dispositivo).
Si un controlador establece la característica FILE_DEVICE_SECURE_OPEN cuando llama a IoCreateDevice, el administrador de E/S aplica el descriptor de seguridad del objeto de dispositivo a cualquier apertura relativa o se abre el nombre de archivo final. Por ejemplo, si FILE_DEVICE_SECURE_OPEN está establecido para \Device\foo y si el administrador solo puede abrir \Device\foo, el administrador también puede abrir \Device\foo\abc. Sin embargo, el administrador de E/S impide que un usuario normal abra \Device\foo y \Device\foo\abc.
Si un controlador de un dispositivo establece esta característica, el administrador de PnP lo propaga a todos los objetos de dispositivo del dispositivo.
Importante
Los DDIs exAllocatePool descritos en este tema han quedado en desuso en Windows 10, versión 2004 y se han reemplazado por ExAllocatePool2 y ExAllocatePool3. Para obtener más información, consulte Actualización de llamadas exAllocatePool en desuso a ExAllocatePool2 y ExAllocatePool3.