從設備管理器隱藏裝置 - Windows drivers

根據預設,設備管理員會顯示計算機上每個裝置的狀態。 在某些情況下,您可能會想要防止某些裝置出現在設備管理器中。 例如,主機板可能有 CardBus 控制器,其插槽無法供使用者存取。 因為使用者無法使用插槽,所以您不希望裝置管理員顯示任何相關裝置信息。

若要在設備管理器中隱藏裝置,您可以將裝置標示為 隱藏的裝置。 一般而言,設備管理員不會顯示隱藏的裝置。 不過,請注意,使用者可以覆寫此設定,並在設備管理器內顯示所有裝置,甚至是隱藏的裝置。如需如何覆寫此設定的詳細資訊,請參閱 檢視隱藏的裝置。)

有兩種方式可將裝置標示為隱藏:在裝置的驅動程式內或使用 ACPI BIOS。

隱藏驅動程式內的裝置

驅動程式管理者有兩種方式可將驅動程式設定為隱藏:

函式驅動程式或函式篩選驅動程式可以透過回應IRP_MN_QUERY_PNP_DEVICE_STATE IRP,要求作業系統隱藏成功啟動的裝置。 IRP 到達時,驅動程式的分派例程必須將 IoStatus.Information 中的 PNP_DEVICE_DONT_DISPLAY_UI 位設定為 TRUE。

在 Windows XP 和更新版本的 Windows 作業系統上,總線驅動程式或總線篩選驅動程式可以藉由回應 IRP_MN_QUERY_CAPABILITIES IRP 來隱藏任何裝置,不論是否已啟動。 IRP 到達時,驅動程式必須在驅動程式的分派例程中將 Parameters.DeviceCapabilities.NoDisplayInUI 成員設定為 TRUE 。 在某些情況下,總線篩選驅動程式可能需要在完成例程中設定此位。 當基礎總線驅動程式的分派例程錯誤地清除其他驅動程式設定的所有功能欄位時,需要這個額外的步驟。

使用 ACPI BIOS 隱藏裝置

您可以將裝置標示為隱藏在 ACPI BIOS 中。 BIOS 可以公開裝置的_STA方法。 _STA方法會傳回位掩碼。 位元2(遮罩0x4)會指定裝置管理員是否應該預設使裝置可見。 如果裝置應該顯示,則此位應該是 1,否則為 0。

例如,下列程式代碼範例示範根總線上的USB控制器如何隱藏。

Device(PCI0) // Root PCI bus

_HID *PNP0A03

...

Device(UCTL) // USB controller

_ADR 0xddddffff // dddd = device, ffff = function

_STA 0xB // Device present, but not shown

在 Microsoft Windows 2000 中,您只能隱藏已啟動、可運作的裝置。 在 Windows XP 和更新版本的 Windows 中,您也可以隱藏中斷的裝置。 _STA 方法傳回的位元 3(遮罩 0x8)用於表示裝置是否正常運作。 如果裝置正常運作,則此位為 1,否則為 0。 例如,下列程式代碼範例示範 BIOS 如何指出 USB 控制器已中斷,且應該隱藏:

Device(PCI0) // Root PCI bus

_HID *PNP0A03

...

Device(UCTL) // USB controller

_ADR 0xddddffff // dddd = device, ffff = function

_STA 0x3 // Present, but broken and not shown

注意 「譯碼」位 (0x2) 與透過 _ADR 方法描述的裝置沒有任何相關性。 先前的程式代碼範例也會在沒有譯碼位集的情況下運作。 BIOS 寫入器只能針對透過 _HID 方法描述的裝置追蹤譯碼狀態。