Función IoStartNextPacket (ntifs.h)
La rutina IoStartNextPacket pone en cola el siguiente IRP, si existe, de la cola de dispositivos asociada del objeto de dispositivo determinado y llama a la rutina StartIo del controlador.
Sintaxis
void IoStartNextPacket(
[in] PDEVICE_OBJECT DeviceObject,
[in] BOOLEAN Cancelable
);
Parámetros
[in] DeviceObject
Puntero al objeto de dispositivo para el que se va a poner en cola el IRP.
[in] Cancelable
Especifica si se pueden cancelar los IRP de la cola de dispositivos.
Valor devuelto
None
Observaciones
Si no hay ningún IRP actualmente en la cola de dispositivos para el DeviceObject de destino, esta rutina simplemente devuelve el control al autor de la llamada.
Si el controlador pasó un puntero a una rutina de cancelación cuando llamó a IoStartPacket, debe pasar TRUE en el parámetro Cancelable de esta rutina. Si Cancelable es TRUE, el administrador de E/S usará el bloqueo de número de cancelación para proteger la cola del dispositivo y el IRP actual.
Los controladores que no tienen una rutina StartIo no pueden llamar a IoStartNextPacket.
Los controladores que llaman a IoStartNextPacket desde su rutina StartIo deben tener en cuenta los problemas de recursividad. Si un controlador puede llamar a IoStartNextPacket en un gran número de solicitudes sucesivamente desde su rutina StartIo (por ejemplo, cuando se produce un error de dispositivo y el controlador está borrando la cola de dispositivos), debe establecer el atributo DeferredStartIo para el dispositivo mediante la rutina IoSetStartIoAttributes . Este atributo garantiza que el siguiente paquete no se emitirá hasta que se devuelva la llamada a StartIo anterior.
Los autores de llamadas de IoStartNextPacket deben ejecutarse en IRQL = DISPATCH_LEVEL. Normalmente, se llama a esta rutina desde la rutina DpcForIsr o CustomDpc del controlador de dispositivo, que se ejecutan en IRQL = DISPATCH_LEVEL.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 |
Plataforma de destino | Universal |
Encabezado | ntifs.h (incluye Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | DISPATCH_LEVEL (consulte la sección Comentarios) |
Reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm) |