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.
Tenga en cuenta los siguientes puntos al implementar una rutina StartIo :
Una rutina StartIo debe sincronizar su acceso a un dispositivo físico y a cualquier información de estado compartido o recursos que el controlador mantiene en la extensión del dispositivo con las demás rutinas del controlador que acceden al mismo dispositivo, ubicación de memoria o recursos.
Si la rutina StartIo comparte el dispositivo o el estado con el ISR, debe usar KeSynchronizeExecution para llamar a una rutina SynchCritSection proporcionada por el controlador para programar el dispositivo o para acceder al estado compartido. Para obtener más información, consulte Uso de secciones críticas.
Si la rutina StartIo comparte el estado o los recursos con rutinas distintas del ISR, debe proteger el estado compartido o los recursos con un bloqueo de giro ejecutivo inicializado por el controlador para el que el controlador proporciona el almacenamiento. Para obtener más información, consulte Bloqueos de giro.
Si un controlador de dispositivo no WDM monolítico configura un objeto de controlador, su rutina StartIo puede usar el objeto de controlador para sincronizar las operaciones a través de un dispositivo físico compartido con dispositivos conectados (similares).
Consulte Objetos de controlador para obtener más información.
A menos que un controlador de nivel superior estrechamente acoplado predivida las solicitudes de transferencia de DMA grandes para su controlador de dispositivo subyacente, la rutina StartIo del controlador de dispositivo subyacente debe dividir las grandes solicitudes de transferencia en rangos de transferencia parcial, y el controlador debe realizar una secuencia de operaciones de dispositivo con transferencias parciales. Cada transferencia parcial debe tener un tamaño para adaptarse a las funcionalidades del hardware: las funcionalidades del dispositivo del controlador o, para un dispositivo DMA subordinado, las funcionalidades del controlador DMA del sistema, que tenga restricciones más estrictas.
Consulte Objetos de adaptador y DMA para obtener más información sobre el uso de DMA del sistema o del bus-master.
La rutina StartIo de un controlador que usa DMA debe sincronizar las transferencias mediante un objeto de adaptador.
Se ejecuta una rutina StartIo en IRQL = DISPATCH_LEVEL, lo que restringe el conjunto de rutinas de soporte técnico a las que puede llamar.
Por ejemplo, una rutina StartIo no puede tener acceso ni asignar memoria paginable y no puede esperar a que un objeto distribuidor se establezca en el estado señalado. Por otro lado, una rutina StartIo puede adquirir y liberar un bloqueo de giro ejecutivo asignado por el controlador con KeAcquireSpinLockAtDpcLevel y KeReleaseSpinLockFromDpcLevel, que se ejecutan más rápido que KeAcquireSpinLock y KeReleaseSpinLock.
Consulte Administración de prioridades de hardware y bloqueos de espera activa para obtener más información.
Si el controlador contiene IRP en un estado cancelable, su rutina StartIo debe comprobar si el IRP de entrada ya se ha cancelado antes de que comience cualquier procesamiento para esa solicitud en su dispositivo. Para obtener más información, consulte Cancelación de IRP.