デバイス マネージャーでのデバイスの非表示
既定では、デバイス マネージャーにはコンピューター上のすべてのデバイスの状態が表示されます。 状況によっては、特定のデバイスをデバイス マネージャーに表示しない必要が生じることがあります。 たとえば、マザーボードには、ユーザーがアクセスできないスロットを備えた CardBus コントローラーが存在する場合があります。 ユーザーはスロットを使用できないため、そのデバイスに関する情報をデバイス マネージャーに表示する必要はありません。
デバイス マネージャーでデバイスを非表示にするには、デバイスを非表示デバイスとしてマークします。 通常、デバイス マネージャーに非表示のデバイスは表示されません。 (ただし、ユーザーがこの設定をオーバーライドし、非表示デバイスであっても、デバイス マネージャー内にすべてのデバイスを表示できる点に注意してください。この設定をオーバーライドする方法について詳しくは、「非表示デバイスの表示」をご覧ください)。
デバイスを非表示としてマークする方法は 2 つあり、デバイスのドライバー内で、または ACPI BIOS を使用してマークできます。
ドライバー内からデバイスを非表示にする
ドライバーには、ドライバーを非表示としてマークする方法が 2 つあります。
ファンクション ドライバーまたはファンクション フィルター ドライバーは、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 です。 たとえば、次のコード例は、USB コントローラーが破損していて、非表示にする必要があることを BIOS が示す方法を示しています。
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 メソッドを通じて記述されているデバイスのデコード状態のみ追跡する必要があります。