Share via


Driver-Created Versus Application-Created Dateiobjekte

Warnung

UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 für neuere Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden.

Die archivierten UMDF 1-Beispiele finden Sie im Windows 11, Version 22H2 – Mai 2022 Treiberbeispiele Update.

Weitere Informationen finden Sie unter Erste Schritte mit UMDF.

Wenn eine Anwendung ein Handle für ein Gerät öffnet, ruft das Framework die IQueueCallbackCreate::OnCreateFile-Methode Ihres Treibers auf und stellt einen Zeiger auf die IWDFFile-Schnittstelle für das Dateiobjekt bereit, das dem Gerät zugeordnet ist. Alle E/A-Anforderungen, die die Anwendung an das geöffnete Handle sendet, sind dem erstellten Dateiobjekt zugeordnet. Wenn solche Anforderungen eintreffen, ruft das Framework die entsprechende Methode von einer der vom Treiber bereitgestellten UMDF-Warteschlangenobjektschnittstellen auf. Der Treiber kann dann IWDFIoRequest::GetFileObject aufrufen, um das der Anforderung zugeordnete Dateiobjekt zu bestimmen. Der Treiber kann AssignContext für das Dateiobjekt aufrufen, um kontextspezifisch für die E/A-Sitzung zuzuordnen.

Die folgende Tabelle zeigt Aufrufe der Anwendung und die resultierenden Benachrichtigungen, die der Treiber empfängt.

Anwendungsinitiierung Treiber empfängt

Ein Aufruf der Microsoft Win32 CreateFile-Funktion .

Ein Aufruf der IQueueCallbackCreate::OnCreateFile-Methode .

Ein Aufruf der Win32-Funktion "ReadFileEx", "WriteFileEx" oder "DeviceIoControl" .

Ein Aufruf der IQueueCallbackRead::OnRead-, IQueueCallbackWrite::OnWrite- oder IQueueCallbackDeviceIoControl::OnDeviceIoControl-Methode .

Ein Aufruf der Win32 CloseHandle-Funktion für das letzte geöffnete Handle für das Dateiobjekt.

Ein Aufruf der IFileCallbackCleanup::OnCleanupFile-Methode .

Der Treiber bricht alle E/A-Anforderungen ab, die dem Dateiobjekt zugeordnet sind.

Nachdem der Treiber von der Bereinigungsbenachrichtigung zurückgegeben wurde, bricht UMDF alle ausstehenden E/A-Anforderungen ab.

Nachdem die Bereinigung abgeschlossen ist und UMDF ausstehende E/A-Anforderungen abbricht, erhält der Treiber einen Aufruf seiner IFileCallbackClose::OnCloseFile-Methode .

Eine Systemkomponente kann eine Erstellungsanforderung im Namen einer universellen Windows-App ausstellen. Wenn der Treiber die Prozess-ID der App ermitteln muss, die die Erstellungsanforderung ausgestellt hat, kann er die IWDFFile3::GetInitiatorProcessId-Methode aufrufen.

Vom Treiber erstellte Dateiobjekte

Wenn Ihr Treiber eine E/A-Anforderung unabhängig von der Anwendung erstellen und an den nächsten Treiber im Stapel (das Standard-E/A-Ziel) senden muss, muss der Treiber IWDFDevice::CreateWdfFile aufrufen, um einen Zeiger auf eine IWDFDriverCreatedFile-Schnittstelle abzurufen. In diesem Fall erhält der nächste Treiber die gleichen Benachrichtigungen, die Ihr Treiber empfängt, wenn die Anwendung die Anforderung generiert.

In der folgenden Tabelle sind Aufrufe des Treibers und die resultierenden Benachrichtigungen an den nächsten Treiber im Stapel aufgeführt.

Treiber initiiert Nächster Treiber im Stapel empfängt

Ein Aufruf der IWDFDevice::CreateWdfFile-Methode .

Das Dateiobjekt, das UMDF erstellt, stellt eine E/A-Sitzung zwischen dem Gerät und dem nächsten Gerät im Stapel dar.

Ein Aufruf der IQueueCallbackCreate::OnCreateFile-Methode .

Ein Aufruf der IWDFDevice::CreateRequest-Methode .

Ein Aufruf zum Formatieren der Anforderung (z. B. ein Aufruf der IWDFIoTarget::FormatRequestForIoctl-Methode ).

Ein Aufruf der IWDFIoRequest::Send-Methode .

Ein Aufruf der IQueueCallbackRead::OnRead-, IQueueCallbackWrite::OnWrite- oder IQueueCallbackDeviceIoControl::OnDeviceIoControl-Methode .

Ein Aufruf der IWDFDriverCreatedFile::Close-Methode .

Ein Aufruf der IFileCallbackCleanup::OnCleanupFile-Methode .

Der Treiber bricht alle E/A-Anforderungen ab, die dem Dateiobjekt zugeordnet sind.

Nachdem der Treiber von der Bereinigungsbenachrichtigung zurückgegeben wurde, bricht UMDF alle ausstehenden E/A-Anforderungen ab.

Nachdem die Bereinigung abgeschlossen ist und UMDF ausstehende E/A-Anforderungen abbricht, erhält der Treiber einen Aufruf seiner IFileCallbackClose::OnCloseFile-Methode .

Für das nächste Gerät im Stapel besteht kein Unterschied zwischen dem Dateiobjekt, das von einer Anwendung erstellt wird, und dem Dateiobjekt, das von einem Gerät mit höherer Ebene erstellt wird.