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 函式。 |
|
對 Win32 ReadFileEx、 WriteFileEx或 DeviceIoControl 函式的呼叫。 |
呼叫其 IQueueCallbackRead::OnRead、 IQueueCallbackWrite::OnWrite或 IQueueCallbackDeviceIoControl::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 會話。 |
|
呼叫 IWDFDevice::CreateRequest 方法。 例如,呼叫來格式化要求 (,呼叫 IWDFIoTarget::FormatRequestForIoctl 方法) 。 呼叫 IWDFIoRequest::Send 方法。 |
呼叫其 IQueueCallbackRead::OnRead、 IQueueCallbackWrite::OnWrite或 IQueueCallbackDeviceIoControl::OnDeviceIoControl 方法。 |
呼叫 IWDFDriverCreatedFile::Close 方法。 |
呼叫其 IFileCallbackCleanup::OnCleanupFile 方法。 驅動程式會取消或完成與檔案物件相關聯的所有 I/O 要求。 在驅動程式從清除通知傳回之後,UMDF 會取消任何擱置的 I/O 要求。 清除完成且 UMDF 解除擱置的 I/O 要求之後,驅動程式會收到其 IFileCallbackClose::OnCloseFile 方法的呼叫。 |
針對堆疊中的下一個裝置,應用程式所建立的檔案物件與較高層裝置所建立的檔案物件之間沒有任何差異。