Gestione di una richiesta di IRP_MN_STOP_DEVICE (Windows 2000 e versioni successive)
Una richiesta di IRP_MN_STOP_DEVICE viene gestita prima dal driver superiore nello stack di dispositivi e quindi da ogni driver inferiore successivo. Un driver gestisce l'arresto di IRP nella routine DispatchPnP .
Un driver gestisce una richiesta di IRP_MN_STOP_DEVICE con una procedura, ad esempio quanto segue:
Assicurarsi che il dispositivo sia sospeso.
Se un driver non sospende completamente il dispositivo in risposta alla richiesta di IRP_MN_QUERY_STOP_DEVICE , deve farlo ora. Impostare un flag HOLD_NEW_REQUESTS nell'estensione del dispositivo ed eseguire qualsiasi altra operazione necessaria per sospendere il dispositivo.
Il dispositivo potrebbe perdere energia durante l'operazione di ribilanciamento delle risorse e quindi potrebbe perdere lo stato del dispositivo. I driver per il dispositivo devono salvare le informazioni sullo stato del dispositivo e ripristinarlo quando ricevono la richiesta di IRP_MN_START_DEVICE successiva.
Rilasciare le risorse hardware per il dispositivo.
In un driver di funzione le operazioni esatte dipendono dal dispositivo e dal driver, ma possono includere la disconnessione di un interruzione con IoDisconnectInterrupt, liberando gli intervalli di indirizzi fisici con MmUnmapIoSpace e liberando le porte di I/O.
Se un driver del filtro o del bus ha acquisito tutte le risorse hardware per il dispositivo, tale driver deve rilasciare le risorse in risposta a una richiesta di IRP_MN_STOP_DEVICE .
Impostare Irp-IoStatus.Status> su STATUS_SUCCESS.
Passare l'IRP al driver inferiore successivo o completare l'IRP.
In un driver di funzione o filtro configurare la posizione dello stack successivo con IoSkipCurrentIrpStackLocation, passare l'IRP al driver inferiore successivo con IoCallDriver e restituire lo stato da IoCallDriver come stato restituito dalla routine DispatchPnP . Non completare l'IRP.
In un driver del bus completare l'IRP usando IoCompleteRequest con IO_NO_INCREMENT e tornare dalla routine DispatchPnP .
Mentre il dispositivo viene arrestato per ribilanciare le risorse, un driver non può avviare eventuali IRP che accedono al dispositivo. Un driver deve accodamento di tali IP, come descritto in Tenere in sospeso un dispositivo quando un dispositivo è sospeso o non eseguirne l'esecuzione se il driver non implementa una coda di gestione IRP e non deve eliminare le richieste di I/O.