Condividi tramite


Registrazione per la notifica del driver asincrona

Per usare la notifica del driver asincrona, un driver di dispositivo implementa funzioni di callback chiamate dal sistema operativo quando si aggiunge dinamicamente un processore o un modulo di memoria alla partizione hardware. L'esempio di codice seguente illustra i prototipi per tali funzioni di callback:

// Prototypes for the asynchronous
// notification callback functions
NTSTATUS
  AsyncProcessorCallback(
    IN PVOID NotificationStructure,
    IN PVOID Context
    );

NTSTATUS
  AsyncMemoryCallback(
    IN PVOID NotificationStructure,
    IN PVOID Context
    );

Un driver di dispositivo registra per la notifica asincrona chiamando la funzione IoRegisterPlugPlayNotification , una volta per ognuna delle funzioni di callback del driver di dispositivo, specificando un puntatore a uno dei GUID seguenti per il parametro EventCategoryData :

GUID_DEVICE_PROCESSOR
Registrare per ricevere una notifica quando un processore viene aggiunto dinamicamente alla partizione hardware.

GUID_DEVICE_MEMORY
Registrare per ricevere una notifica quando la memoria viene aggiunta dinamicamente alla partizione hardware.

Questi GUID sono definiti nel file di intestazione, Poclass.h.

Nell'esempio di codice seguente viene illustrato come registrare entrambe le notifiche:

PVOID ProcessorNotificationEntry;
PVOID MemoryNotificationEntry;
NTSTATUS Status;

Status =
  IoRegisterPlugPlayNotification(
    EventCategoryDeviceInterfaceChange,
    0,
    &GUID_DEVICE_PROCESSOR,
    DriverObject,
    AsyncProcessorCallback,
    NULL,
    &ProcessorNotificationEntry
    );

Status =
  IoRegisterPlugPlayNotification(
    EventCategoryDeviceInterfaceChange,
    0,
    &GUID_DEVICE_MEMORY,
    DriverObject,
    AsyncMemoryCallback,
    NULL,
    &MemoryNotificationEntry
    );

Nota Se un driver di dispositivo deve ricevere una notifica solo sui processori, non deve implementare una funzione di callback per la memoria o la registrazione per la notifica sulla memoria. Analogamente, se un driver di dispositivo deve ricevere solo una notifica sulla memoria, non deve implementare una funzione di callback per processori o registrare per la notifica sui processori.

Quando un driver di dispositivo deve interrompere la ricezione di notifiche del driver asincrone, ad esempio quando viene scaricato, deve annullare la registrazione di ogni funzione di callback chiamando la funzione IoUnregisterPlugPlayNotification . Nell'esempio di codice seguente viene illustrato come annullare la registrazione delle funzioni di callback:

// Unregister for asynchronous notifications
Status =
  IoUnregisterPlugPlayNotification(
    ProcessorNotificationEntry
    );

Status =
  IoUnregisterPlugPlayNotification(
    MemoryNotificationEntry
    );