篩選驅動程式的控制裝置物件
注意
為了獲得最佳可靠性和效能,請使用 檔案系統迷你篩選驅動程式 搭配篩選管理員支援,而不是舊版檔案系統篩選驅動程式。 若要將舊版驅動程式移植到迷你篩選器驅動程式,請參閱 移植舊版篩選驅動程式的指導方針。
建立和使用具名控制項裝置物件需要檔案系統, (CDO) 。 不同于檔案系統,舊版檔案系統篩選驅動程式不需要有 CDO。 如果這樣做,這選擇性地命名為 CDO 代表系統的篩選驅動程式。 其角色是從使用者模式應用程式接收 I/O 要求, (或較不常見,另一個核心模式驅動程式) ,並適當地處理它們。
大部分的檔案系統篩選驅動程式都會建立並使用 CDO。 不過,CDO 上的 I/O 要求支援是選擇性的。 若要提供此支援,當篩選驅動程式呼叫 IoCreateDevice 以建立 CDO 時,它必須提供物件的裝置名稱。 然後,使用者模式應用程式可以藉由呼叫 CreateFile來取得具名 CDO 的控制碼,並提供裝置名稱的使用者模式版本。
例如,請考慮假設的 「MyLegacyFilter」 核心模式驅動程式。 此驅動程式可以使用下列名稱建立 CDO:
\Device\MyLegacyFilter
並呼叫 IoCreateSymbolicLink ,將此名稱連結至對等的使用者模式可見名稱。 此命名是為了讓 MyLegacyFilter 的使用者模式應用程式可以藉由提供名稱來開啟核心模式驅動程式 CDO 的控制碼:
\\.\MyLegacyFilter
呼叫 CreateFile時。
傳送至篩選驅動程式控制裝置物件的 I/O 要求類型
檔案系統篩選驅動程式不需要支援控制裝置物件上任何 I/O 作業, (CDO) 。 不過,大部分篩選準則允許將下列 I/O 要求類型傳送至篩選的 CDO:
IRP_MJ_CREATE (開啟目標裝置物件的控制碼,並將該控制碼提供給使用者應用程式)
IRP_MJ_CLEANUP ( 關閉使用者模式應用程式對目標裝置物件的控制碼)
IRP_MJ_CLOSE (關閉目標裝置物件的最後一個剩餘開啟控制碼)
IRP_MJ_DEVICE_CONTROL、 IRP_MJ_FILE_SYSTEM_CONTROL或 FastIoDeviceControl (,以將私人 IOCTLs 或 FSCTL 傳送至篩選驅動程式)
不同于檔案系統篩選驅動程式所建立的其他所有裝置物件,CDO 不會附加至驅動程式堆疊。 篩選驅動程式的 CDO 上方或下方沒有附加裝置物件。 因此,對於收到的任何 I/O 要求,CDO 可以安全地假設它是唯一的收件者。 這不適用於篩選裝置物件或檔案系統 CDO。 因此,CDO 最終必須完成它收到的每個 IRP。 針對快速 I/O 要求,它必須傳回 TRUE 或 FALSE。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應