Condividi tramite


Prevenzione di uno squilibrio di creazione e chiusura delle notifiche a un driver

Avviso

UMDF 2 è la versione più recente di UMDF e sostituisce UMDF 1. Tutti i nuovi driver UMDF devono essere scritti usando UMDF 2. Non vengono aggiunte nuove funzionalità a UMDF 1 ed è disponibile un supporto limitato per UMDF 1 nelle versioni più recenti di Windows 10. I driver di Windows universali devono usare UMDF 2.

Gli esempi di UMDF 1 archiviati sono disponibili nell'aggiornamento degli esempi di driver di Windows 11 versione 22H2 - Maggio 2022.

Per altre info, vedi Introduzione con UMDF.

Un driver UMDF superiore può usare il metodo IWDFDeviceInitialize::AutoForwardCreateCleanupClose per controllare quando il framework inoltra automaticamente le notifiche create-file, cleanup-file e close-file al driver inferiore successivo nello stack di dispositivi. Tuttavia, poiché il driver superiore imposta AutoForwardCreateCleanupClose per l'inoltro automatico solo a livello di dispositivo e non a livello di file, l'inoltro deve essere lo stesso per tutti i file per un dispositivo. Il framework garantisce questo comportamento di inoltro per le notifiche cleanup-file e close-file. Se il driver superiore implementa la funzione di callback IQueueCallbackCreate::OnCreateFile , deve assicurarsi che il comportamento di inoltro sia lo stesso per tutte le richieste di creazione file ed è coerente con il comportamento di inoltro per le notifiche cleanup-file e close-file. In caso contrario, i driver più bassi potrebbero ricevere una quantità diversa di chiamate ai metodi IQueueCallbackCreate::OnCreateFile e IFileCallbackCleanup::OnCleanupFile e IFileCallbackClose::OnCloseFile .

Per evitare che i driver inferiori ricevano una quantità diversa di notifiche create-file e close-file, il driver superiore deve garantire, nella relativa funzione di callback IQueueCallbackCreate::OnCreateFile , che:

  • Il comportamento di inoltro è lo stesso per tutti i file di un dispositivo.

  • Il comportamento di inoltro è coerente con il modo in cui imposta il parametro flag di IWDFDeviceInitialize::AutoForwardCreateCleanupClose. Ovvero:

    • Se il driver imposta il flag su WdfTrue, il driver deve inoltrare tutte le richieste create-file nello stack di dispositivi.
    • Se il driver imposta il flag su WdfFalse, il driver non deve inoltrare alcuna richiesta di create-file nello stack.
    • Se il driver imposta il flag su WdfUseDefault e:
      • Se il driver è un driver di funzione, non deve inoltrare le richieste create-file nello stack.
      • Se il driver è un driver di filtro, deve inoltrare tutte le richieste create-file nello stack.

In situazioni in cui il driver non può inoltrare una richiesta di creazione file, il driver può comunque generare una nuova richiesta di creazione file per driver inferiori chiamando il metodo IWDFDevice::CreateWdfFile per creare un nuovo file WDF. Il driver può quindi completare la richiesta di creazione file originale in base ai risultati della richiesta create-file appena generata, ovvero dai risultati di CreateWdfFile.