Compartir a través de


Configuración de una extensión de dispositivo de controlador de clase de almacenamiento

En las extensiones de dispositivo de cada objeto de dispositivo creado por un controlador de clase de almacenamiento, ese controlador proporciona almacenamiento para los datos determinados por el controlador que usa para administrar las solicitudes de E/S para el dispositivo, como el puntero al PDO pasado a AddDevice, el puntero al objeto de dispositivo devuelto por IoAttachDeviceToDeviceStack, un puntero atrás a su propio objeto de dispositivo, y así sucesivamente.

La mayoría de los controladores de clase de almacenamiento también proporcionan almacenamiento para la siguiente información:

  • Un valor de tiempo de espera específico del tipo de dispositivo

    El controlador de clase puede pasar el valor de tiempo de espera en srBs que envía al controlador de puerto, que veces SRB_FUNCTION_EXECUTE_SCSI solicitudes (consulte SCSI_REQUEST_BLOCK) en nombre de cada controlador de clase. El controlador de puerto devuelve un SRB con su miembro SrbStatus establecido en SRB_STATUS_TIMEOUT si el intervalo entre cuando el controlador de puerto envía la solicitud al controlador subyacente y cuando la solicitud se completa supera el valor de tiempo de espera especificado.

  • Puntero a la rutina de control de errores del controlador de clase

    Consulte Rutinas ioCompletion del controlador de clase de almacenamiento para obtener más información sobre el control de errores en los controladores de clase de almacenamiento.

  • Recuento que el controlador mantiene de errores de protocolo de bus en el dispositivo

  • Puntero a un búfer asignado por el controlador para los datos de detección

    Un controlador de clase debe asignar memoria para los datos de sentido devueltos del grupo no paginado alineado con caché. Para obtener más información sobre cómo asignar memoria para los búferes de controladores, vea Asignar System-Space memoria.

  • Valor predeterminado determinado por el controlador para SrbFlags que el controlador de clase establece en SRB

  • Puntero a un encabezado de lista de búsqueda si el controlador configura una lista de búsqueda para los SRB que asigna.

    Consulte Uso de listas de lookaside para obtener más información.

  • Punteros a un IRP y un SRB asignados y mantenidos en reserva para las solicitudes que deben tener éxito incluso en condiciones de memoria baja, para las operaciones de paginación y las operaciones de recuperación de errores (como las realizadas por una rutina ReleaseQueue del controlador de clase de almacenamiento)

  • Puntero al STORAGE_ADAPTER_DESCRIPTOR y STORAGE_DEVICE_DESCRIPTOR datos recopilados por el controlador de puerto del HBA

    Para obtener información sobre cómo obtienen y usan estos datos los controladores de clase, consulte Rutina GetDescriptor del controlador de clase de almacenamiento.

  • Marcas que indican el estado PnP anterior y actual, para administrar las transiciones entre estados del dispositivo

  • Marca que indica el estado actual de energía del dispositivo, para evitar un trabajo adicional en el control de solicitudes de alimentación redundantes.

  • Recuento de archivos de paginación del sistema, si los hay, en función de las solicitudes de notificación de paginación recibidas por el controlador (IRP_MJ_PNP con IRP_MN_DEVICE_USAGE_NOTIFICATION)

Un controlador de clase de almacenamiento no puede enviar solicitudes a su dispositivo a través del controlador de puerto de almacenamiento sin usar el puntero de objeto de dispositivo devuelto por IoAttachDeviceToDeviceStack y almacenado en la extensión del dispositivo mediante la rutina AddDevice del controlador.