Condividi tramite


Routine dispatch 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 che 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ù alto 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 il quale 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 dispositivo seriali e di classe paralleli gestiscono queste richieste impostando la lunghezza o la posizione FILE_STANDARD_INFORMATION o FILE_POSITION_INFORMATION su zero. Altri driver di dispositivo di livello più alto devono supportare queste richieste, in particolare se un driver in modalità utente o 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ù alto.

  • DispatchFlushBuffers

    Un driver che memorizza nella cache i dati in un dispositivo o memorizza i dati 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 ignorare i dati memorizzati nel buffer o memorizzati nella cache letti dal dispositivo.

    Ad esempio, i driver di classe mouse e tastiera di sistema, che hanno buffer circolari interni per i dati di input dai dispositivi, supportano la richiesta di scaricamento. Anche i driver dei dispositivi di archiviazione di massa e dei driver sovrapposti supportano 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 risparmio energia invii un IRP di alimentazione del sistema per arrestare 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 su cui sono sovrapposti possono basarsi su un driver del file system di livello più alto per inviare i runtime di integrazione di arresto quando il sistema sta per essere arrestato. Ovvero, l'FSD è responsabile di assicurarsi che tutti i dati dei file memorizzati nella cache vengano scritti nei dispositivi periferici, chiamando i driver sottostanti per scaricare i dati dalle cache o dai buffer del dispositivo (se presenti) e così via prima che il sistema venga arrestato.

Il driver di un dispositivo di archiviazione di massa che memorizza nella cache i dati 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 dispone di cache interna, deve anche fornire routine DispatchShutdown e DispatchFlushBuffers .

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