共用方式為


Driver-Created 與 Application-Created 檔案物件

警告

UMDF 2 是最新版的 UMDF,並取代 UMDF 1。 所有新的UMDF驅動程式都應該使用UMDF 2撰寫。 未將新功能新增至 UMDF 1,而且較新版本的 Windows 10 上對 UMDF 1 的支援有限。 通用 Windows 驅動程式必須使用 UMDF 2。

封存的 UMDF 1 範例可在 Windows 11 版本 22H2 - 2022 年 5 月驅動程式範例更新中找到。

如需詳細資訊,請參閱 開始使用 UMDF

當應用程式開啟裝置的控制代碼時,架構會呼叫驅動程式的 IQueueCallbackCreate::OnCreateFile 方法,並提供與裝置相關聯的檔案物件的 IWDFFile 介面指標。 應用程式傳送至開啟句柄的任何 I/O 要求都會與建立的檔案對象相關聯。 當這類要求送達時,架構會從其中一個驅動程式提供的 UMDF 佇列物件介面呼叫適當的方法。 然後,驅動程式可以呼叫 IWDFIoRequest::GetFileObject,以判斷與要求相關聯的檔案物件。 驅動程式可以在檔案物件上呼叫 AssignContext,以將 I/O 會話特定的內容產生關聯。

下表顯示應用程式的呼叫,以及驅動程式所接收的結果通知。

應用程式起始 驅動程式接收

呼叫 Microsoft Win32 CreateFile 函式。

呼叫其 IQueueCallbackCreate::OnCreateFile 方法。

呼叫 Win32 ReadFileExWriteFileExDeviceIoControl 函式。

呼叫其 IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWriteIQueueCallbackDeviceIoControl::OnDeviceIoControl 方法。

呼叫 Win32 CloseHandle 函式,以取得檔案對象的最後一個開啟句柄。

呼叫其 IFileCallbackCleanup::OnCleanupFile 方法。

驅動程式會取消或完成與檔案對象相關聯的所有 I/O 要求。

在驅動程式收到清除通知並完成處理後,UMDF 會取消所有擱置的 I/O 請求。

清除完成且 UMDF 取消擱置的 I/O 要求之後,驅動程式會收到其 IFileCallbackClose::OnCloseFile 方法的呼叫。

系統元件可能會代表通用 Windows 應用程式發出建立要求。 如果驅動程式需要判斷發出建立要求之應用程式的進程標識符,它可以呼叫 IWDFFile3::GetInitiatorProcessId 方法。

驅動程式建立的檔案物件

如果您的驅動程式需要建立和傳送與應用程式無關的 I/O 要求至堆棧中的下一個驅動程式(預設 I/O 目標),驅動程式必須呼叫 IWDFDevice::CreateWdfFile,以擷取 IWDFDriverCreatedFile 介面的指標。 在此情況下,下一個驅動程式會在應用程式產生要求時收到與驅動程式收到的相同通知。

下表顯示您的驅動程式所進行的呼叫,及其對堆疊中下一個驅動程式所產生的通知。

驅動程式啟動 堆疊中的下一個驅動程式接收到

IWDFDevice:CreateWdfFile 方法的一次呼叫。

UMDF 建立的檔案物件代表裝置與堆疊中下一個裝置之間的 I/O 會話。

呼叫其 IQueueCallbackCreate::OnCreateFile 方法。

IWDFDevice::CreateRequest 方法的呼叫。

對請求進行格式化的呼叫(例如,呼叫 IWDFIoTarget::FormatRequestForIoctl 方法)。

IWDFIoRequest::Send 方法的呼叫。

呼叫其 IQueueCallbackRead::OnReadIQueueCallbackWrite::OnWriteIQueueCallbackDeviceIoControl::OnDeviceIoControl 方法。

IWDFDriverCreatedFile::Close 方法的呼叫。

呼叫其 IFileCallbackCleanup::OnCleanupFile 方法。

驅動程式會取消或完成與檔案對象相關聯的所有 I/O 要求。

在驅動程式從清理通知返回之後,UMDF 會取消任何擱置的 I/O 要求。

清除完成且 UMDF 取消擱置的 I/O 要求之後,驅動程式會收到其 IFileCallbackClose::OnCloseFile 方法的呼叫。

針對堆疊中的下一個裝置,應用程式所建立的檔案物件與較高層裝置所建立的檔案對象之間沒有任何差異。