Funzione IoStartNextPacket (ntifs.h)

La routine IoStartNextPacket dequeue il successivo IRP, se presente, dalla coda del dispositivo associata all'oggetto dispositivo specificato e chiama la routine StartIo del driver.

Sintassi

void IoStartNextPacket(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] BOOLEAN        Cancelable
);

Parametri

[in] DeviceObject

Puntatore all'oggetto dispositivo per il quale l'IRP deve essere dequeued.

[in] Cancelable

Specifica se è possibile annullare gli indirizzi IP nella coda del dispositivo.

Valore restituito

nessuno

Osservazioni

Se non sono presenti irp attualmente nella coda del dispositivo per DeviceObject di destinazione, questa routine restituisce semplicemente il controllo al chiamante.

Se il driver ha passato un puntatore a una routine annulla quando ha chiamato IoStartPacket, deve passare TRUE nel parametro Cancelable di questa routine. Se Cancelable è TRUE, il gestore di I/O userà il blocco di rotazione annulla per proteggere la coda del dispositivo e l'IRP corrente.

I driver che non hanno una routine StartIo non possono chiamare IoStartNextPacket.

I driver che chiamano IoStartNextPacket dalla routine StartIo devono essere consapevoli dei problemi di ricorsione. Se un driver può chiamare IoStartNextPacket in un numero elevato di richieste in successione dalla routine StartIo (ad esempio, quando si verifica un errore del dispositivo e il driver cancella la coda del dispositivo), è necessario impostare l'attributo DeferredStartIo per il dispositivo usando la routine IoSetStartIoAttributes . Questo attributo garantisce che il pacchetto successivo non venga rilasciato finché non viene restituita la chiamata StartIo precedente.

I chiamanti di IoStartNextPacket devono essere in esecuzione in IRQL = DISPATCH_LEVEL. In genere, questa routine viene chiamata dalla routine DpcForIsr o CustomDpc di un driver di dispositivo, entrambe eseguite in IRQL = DISPATCH_LEVEL.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL DISPATCH_LEVEL (vedere la sezione Osservazioni)
Regole di conformità DDI HwStorPortProhibitedDDDIs(storport), IrqlDispatch(storport), IrqlDispatch(storport), IrqlDispatch(wdm), SpinLockSafe(storport), SpinLockSafe(storport), SpinLockSafe(wdm), StartIoRecursion(wdm)

Vedi anche

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket