Condividi tramite


Routine di invio facoltative

I driver possono includere le routine dispatch seguenti:

  • DispatchCleanup

    IRP_MJ_CLEANUP indica che l'ultimo handle per un oggetto file associato all'oggetto dispositivo di destinazione viene chiuso. Le richieste di I/O in sospeso per l'oggetto file potrebbero essere ancora presenti. I driver possono implementare una routine DispatchCleanup per eseguire la pulizia non specifica di alcun handle di file specifico. I driver possono anche usare la routine DispatchClose per lo stesso scopo.

  • DispatchQueryInformation, DispatchSetInformation

    Alcuni driver di livello più elevato potrebbero dover elaborare IRP_MJ_QUERY_INFORMATION e IRP_MJ_SET_INFORMATION IRP. Tali richieste indicano che un'applicazione in modalità utente, un componente in modalità kernel o un driver ha richiesto informazioni sulla lunghezza dell'oggetto file (che rappresenta l'oggetto dispositivo del driver) per cui il richiedente in modalità utente ha un handle o che il richiedente in modalità utente sta tentando di impostare una fine del file su tale oggetto file.

    I driver di classe paralleli e di dispositivo seriali gestiscono queste richieste impostando FILE_STANDARD_INFORMATION o FILE_POSITION_INFORMATION la lunghezza o la posizione su zero. Altri driver di dispositivo di livello più elevato devono supportare queste richieste, in particolare se un driver in modalità utente o un driver in modalità kernel potrebbe chiamare funzioni di runtime C per modificare l'oggetto file. I driver del file system devono supportare queste richieste in modo più completo rispetto a questi driver di dispositivo di livello più elevato.

  • DispatchFlushBuffers

    Un driver che memorizza nella cache i dati in un dispositivo o memorizza i dati nel buffer internamente nella memoria allocata dal driver potrebbe ricevere IRP_MJ_FLUSH_BUFFERS. La ricezione di questa richiesta indica che il driver deve scrivere i dati memorizzati nel buffer o scaricare i dati memorizzati nella cache nel dispositivo oppure rimuovere i dati memorizzati nel buffer o memorizzati nella cache letti dal dispositivo.

    Ad esempio, i driver di classe della tastiera e del mouse del sistema, che hanno buffer circolari interni per i dati di input dai loro dispositivi, supportano la richiesta di svuotamento. I driver di dispositivi di archiviazione di massa e i driver a loro sovrapposti supportano anch'essi questa richiesta.

  • DispatchShutdown

    Qualsiasi driver che probabilmente verrà chiamato prima dell'arresto del sistema deve gestire IRP_MJ_SHUTDOWN. La routine DispatchShutdown deve eseguire qualsiasi operazione di pulizia determinata dal driver prima che il gestore dell'alimentazione invii un IRP per impostare l'alimentazione del sistema per spegnere il sistema. Un driver può chiamare IoRegisterShutdownNotification o IoRegisterLastChanceShutdownNotification per eseguire la registrazione per la notifica di arresto.

I driver per i dispositivi di archiviazione di massa e i driver intermedi sovrapposti possono basarsi su un driver di file system di livello più alto per inviargli IRP di spegnimento quando il sistema sta per spegnersi. Cioè, l'FSD è responsabile di assicurarsi che tutti i dati dei file memorizzati nella cache vengano scritti su dispositivi periferici, chiamando i driver sottostanti per svuotare i dati dalle eventuali cache o buffer dei dispositivi (se presenti) e così via prima che il sistema venga arrestato.

Il driver di un dispositivo di archiviazione di massa che memorizza i dati nella cache internamente deve fornire routine DispatchShutdown e DispatchFlushBuffers . Se un driver di archiviazione di massa memorizza nel buffer i dati in memoria, ma il dispositivo non ha alcuna cache interna, deve anche fornire routine DispatchShutdown e DispatchFlushBuffers .

Qualsiasi driver intermedio sovrapposto a un driver che gestisce le richieste di IRP_MJ_FLUSH_BUFFERS e IRP_MJ_SHUTDOWN aggiunge anche le routine DispatchShutdown e DispatchFlushBuffers.