Funzione IoReportTargetDeviceChangeAsynchronous (wdm.h)
La routine IoReportTargetDeviceChangeAsynchronous notifica al gestore PnP che si è verificato un evento personalizzato in un dispositivo.
Sintassi
NTSTATUS IoReportTargetDeviceChangeAsynchronous(
[in] PDEVICE_OBJECT PhysicalDeviceObject,
[in] PVOID NotificationStructure,
[in, optional] PDEVICE_CHANGE_COMPLETE_CALLBACK Callback,
[in, out] PVOID Context
);
Parametri
[in] PhysicalDeviceObject
Puntatore al PDO del dispositivo segnalato.
[in] NotificationStructure
Puntatore a una struttura TARGET_DEVICE_CUSTOM_NOTIFICATION fornita dal chiamante che descrive l'evento personalizzato. Il gestore PnP invia questa struttura ai driver registrati per la notifica dell'evento.
Questa struttura fornita dal chiamante può essere liberata una volta restituita la routine, perché il gestore PnP crea una copia superficiale e usa la copia per notificare i driver. La copia viene liberata automaticamente dal gestore PnP una volta che non è più necessaria. Vedere la sezione Osservazioni sui requisiti del pool di allocazione.
NotificationStructure. FileObject deve essere NULL. NotificationStructure. evento deve contenere il GUID personalizzato per l'evento. Gli altri campi del NotificationStructure devono essere compilati in base alle esigenze dell'evento personalizzato.
Il gestore PnP compila il NotificationStructure.campo FileObject quando invia notifiche ai registranti.
[in, optional] Callback
Facoltativamente, punta a una routine fornita dal chiamante che il gestore PnP chiama al termine della notifica ai driver registrati per questo evento personalizzato.
La routine di callback ha il tipo seguente:
typedef
VOID
(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
IN PVOID Context
);
Una routine di callback completa della modifica del dispositivo non deve bloccarsi e non deve chiamare routine sincrone che generano eventi PnP.
Il gestore PnP chiama routine di callback device-change-complete in IRQL = PASSIVE_LEVEL.
[in, out] Context
Facoltativamente punta a una struttura di contesto fornita dal chiamante che il gestore PnP passa alla routine callback. Il chiamante deve allocare questa struttura dalla memoria non di paging.
Valore restituito
Codice restituito | Descrizione |
---|---|
STATUS_INVALID_DEVICE_REQUEST | Il chiamante ha specificato un evento PnP di sistema, ad esempio GUID_TARGET_DEVICE_QUERY_REMOVE. Questa routine è solo per gli eventi personalizzati. |
Osservazioni
Dopo il IoReportTargetDeviceChangeAsynchronous routine notifica al gestore PnP che si è verificato un evento personalizzato in un dispositivo, la routine restituisce immediatamente; non attende mentre il gestore PnP invia una notifica dell'evento ai driver registrati per la notifica nel dispositivo. Non utilizzare questa routine per segnalare gli eventi PnP di sistema, ad esempio GUID_TARGET_DEVICE_REMOVE_COMPLETE.
Driver che definisce un evento di dispositivo personalizzato chiama IoReportTargetDeviceChangeAsynchronous per informare il gestore PnP che si è verificato l'evento personalizzato. La notifica personalizzata può essere usata per eventi come una modifica dell'etichetta del volume.
La struttura di notifica personalizzata contiene un evento definito dal driver con il proprio GUID. I writer di driver possono generare GUID con Uuidgen.exe o Guidgen.exe (inclusi in Microsoft Windows SDK).
Quando un driver chiama questa routine durante la gestione di un evento, un IRP_MN_REMOVE_DEVICEo un IRP_MN_SURPRISE_REMOVAL, il gestore PnP chiama la routine callback del driver dopo che il driver viene restituito e lo stack si rimuove.
I chiamanti di IoReportTargetDeviceChangeAsynchronous devono essere in esecuzione in IRQL <= DISPATCH_LEVEL. Se un writer di driver chiama questa routine in IRQL = DISPATCH_LEVEL, è necessario allocare NotificationStructure dalla memoria non di paging.