Condividi tramite


Linee guida per la scrittura di routine AddDevice

Quando si scrive una routine AddDevice , considerare le linee guida di progettazione seguenti:

  • Se un driver di filtro determina che è stata chiamata la routine AddDevice per un dispositivo che non è necessario eseguire il servizio, il driver di filtro deve restituire STATUS_SUCCESS per consentire il caricamento del resto dello stack di dispositivi per il dispositivo. Il driver di filtro non crea un oggetto dispositivo né lo collega allo stack di dispositivi; il driver di filtro restituisce solo l'esito positivo e consente l'aggiunta del resto dei driver allo stack.

  • Un driver deve fornire spazio di archiviazione, in genere nell'estensione del dispositivo di un oggetto dispositivo, per tutti gli oggetti definiti dal kernel e i blocchi spin esecutivi usati. Un driver deve anche fornire spazio di archiviazione per i puntatori a determinati oggetti ottenuti dal gestore di I/O o da altri componenti di sistema.

    È possibile decidere di allocare memoria aggiuntiva dello spazio di sistema per le esigenze del driver, ad esempio per i buffer di I/O a lungo termine o un elenco lookaside. In tal caso, una routine AddDevice può chiamare le routine seguenti:

    ExAllocatePoolWithTag per la memoria dello spazio di sistema impaginato o non di paging

    ExInitializePagedLookasideList o ExInitializeNPagedLookasideList per inizializzare un elenco lookaside o impaginato

  • Se il driver ha un thread dedicato al dispositivo o attende su qualsiasi oggetto dispatcher definito dal kernel, la routine AddDevice potrebbe inizializzare gli oggetti dispatcher del kernel.

  • Se il driver usa blocchi di rotazione esecutivi o fornisce lo spazio di archiviazione per un blocco di rotazione di interruzione, la routine AddDevice potrebbe inizializzare questi blocchi di rotazione. Per altre informazioni, vedere Blocchi di rotazione .

  • Rafforzare la sicurezza di apertura dei file quando si chiama IoCreateDevice.

    Specificare la caratteristica FILE_DEVICE_SECURE_OPEN nella chiamata a IoCreateDevice. Questa caratteristica è supportata in Windows NT 4.0 SP5 e versioni successive. Indirizza il gestore di I/O a eseguire controlli di sicurezza sull'oggetto dispositivo per tutte le richieste aperte. I fornitori devono specificare questa caratteristica nelle chiamate a IoCreateDevice se la caratteristica FILE_DEVICE_SECURE_OPEN non è impostata nell'INF del programma di installazione di classe del dispositivo o nell'INF del dispositivo e i driver non eseguono i propri controlli di sicurezza all'apertura. Per altre informazioni, vedere Controllo dell'accesso dello spazio dei nomi dei dispositivi.

    Se un driver imposta la caratteristica FILE_DEVICE_SECURE_OPEN quando chiama IoCreateDevice, il gestore di I/O applica il descrittore di sicurezza dell'oggetto dispositivo a qualsiasi apertura o nome file finale relativo. Ad esempio, se FILE_DEVICE_SECURE_OPEN è impostato per \Device\foo e se \Device\foo può essere aperto solo dall'amministratore, \Device\foo\abc può essere aperto anche dall'amministratore. Tuttavia, il gestore di I/O impedisce a un utente normale di aprire \Device\foo e \Device\foo\abc.

    Se un driver per un dispositivo imposta questa caratteristica, il gestore PnP lo propaga a tutti gli oggetti dispositivo per il dispositivo.

Importante

Le DDI di ExAllocatePool descritte in questo argomento sono state deprecate in Windows 10 versione 2004 e sono state sostituite da ExAllocatePool2 e ExAllocatePool3. Per altre informazioni, vedere Aggiornamento delle chiamate ExAllocatePool deprecate a ExAllocatePool2 e ExAllocatePool3.