DRIVER_INITIALIZE funzione di callback (wdm.h)

DriverEntry è la prima routine chiamata dopo il caricamento di un driver ed è responsabile dell'inizializzazione del driver.

Sintassi

DRIVER_INITIALIZE DriverInitialize;

NTSTATUS DriverInitialize(
  [in] _DRIVER_OBJECT *DriverObject,
  [in] PUNICODE_STRING RegistryPath
)
{...}

Parametri

[in] DriverObject

Puntatore a una struttura DRIVER_OBJECT . Si tratta dell'oggetto driver del driver.

[in] RegistryPath

Puntatore a una stringa Unicode con conteggiata che specifica il percorso della chiave del Registro di sistema del driver.

Valore restituito

Se la routine ha esito positivo, deve restituire STATUS_SUCCESS. In caso contrario, deve restituire uno dei valori di stato di errore definiti in Ntstatus.h.

Commenti

Il parametro DriverObject fornisce alla routine DriverEntry un puntatore all'oggetto driver del driver, allocato dal gestore di I/O. La routine DriverEntry deve compilare l'oggetto driver con punti di ingresso per le routine standard del driver.

Il puntatore DriverObject consente al driver di accedere a DriverObject-HardwareDatabase>, che punta a una stringa Unicode con conteggiata che specifica un percorso all'albero \Registry\Machine\Hardware del Registro di sistema.

La stringa di percorso del Registro di sistema a cui punta RegistryPath è nel formato \Registry\Machine\System\CurrentControlSet\Services\DriverName. Un driver può usare questo percorso per archiviare informazioni specifiche del driver; vedere Chiavi del Registro di sistema per i driver. La routine DriverEntry deve salvare una copia della stringa Unicode, non il puntatore, poiché il gestore di I/O libera il buffer RegistryPath dopo la restituzione di DriverEntry .

Per altre informazioni sull'implementazione di una routine DriverEntry , vedere Scrittura di una routine DriverEntry.

Anche se è possibile assegnare a questa routine un nome diverso da DriverEntry, questa operazione non è consigliata. Gli strumenti di compilazione forniti da DDK informano automaticamente il linker che il punto di ingresso del driver è denominato DriverEntry, quindi per assegnare alla routine un altro nome è necessario modificare gli strumenti di compilazione. Per altre informazioni sugli strumenti di compilazione, vedere Compilazione di un driver.

Esempio

Per definire una routine di callback DriverEntry , è innanzitutto necessario fornire una dichiarazione di funzione che identifica il tipo di routine di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione tramite i tipi di funzione di callback consente di analizzare il codice per i driver, l'SDV ( Static Driver Verifier ) e altri strumenti di verifica di trovare errori ed è un requisito per la scrittura di driver per il sistema operativo Windows.

Per definire una routine di callback DriverEntry , usare il tipo di DRIVER_INITIALIZE, come illustrato in questo esempio di codice:

DRIVER_INITIALIZE DriverEntry;

Implementare quindi la routine di callback come indicato di seguito:

_Use_decl_annotations_
NTSTATUS 
  DriverEntry( 
    struct _DRIVER_OBJECT  *DriverObject,
    PUNICODE_STRING  RegistryPath 
    )
  {
      // Function body
  }

Il tipo di funzione DRIVER_INITIALIZE è definito nel file di intestazione Wdm.h. Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'annotazione _Use_decl_annotations_ alla definizione della funzione. L'annotazione _Use_decl_annotations_ garantisce che vengano utilizzate le annotazioni applicate al tipo di funzione DRIVER_INITIALIZE nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver WDM. Per informazioni su _Use_decl_annotations_, vedere Annotazione del comportamento della funzione.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wdm.h (include Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h)
IRQL Chiamato a PASSIVE_LEVEL.

Vedi anche

DRIVER_OBJECT