Windows Vista以降のバージョンのWindowsでは、統合デバイス プロパティ モデルには、デバイス ステータス プロパティと問題コードプロパティが含まれます。 統合デバイス プロパティ モデルでは、 プロパティ キー を使用してこれらのプロパティを表します。
Windows Server 2003、Windows XP、Windows 2000 では、統合プロパティ モデルのプロパティ キーはサポートされず、これらのプロパティを表す対応するレジストリ エントリ値もサポートされていません。 ただし、対応する情報は 、CM_Get_DevNode_Status 関数を呼び出すことによって取得できます。 以前のバージョンのWindowsとの互換性を維持するために、Windows Vista以降のバージョンでもCM_Get_DevNode_Statusがサポートされています。 ただし、統合デバイス プロパティ モデルのプロパティ キーを使用して、デバイスのプロパティにアクセスする必要があります。
さらに、Windows 8 以降のバージョンの Windows では、問題状態プロパティもあります。 このプロパティには、デバイスに設定された問題コードに関連する追加情報を含む可能性がある NTSTATUS 値が含まれています。 問題の状態の値がSTATUS_SUCCESSの場合、問題コードがデバイスに設定されたときに、問題のコードに関連する追加情報は利用できませんでした。
プロパティ キーを使用して、Windows Vista 以降のバージョンのデバイス ドライバーのプロパティにアクセスする方法については、「デバイス インスタンスのプロパティへのアクセス (Windows Vista 以降)」を参照してください。
Windows Server 2003、Windows XP、Windows 2000 のデバイス インスタンスの状態と問題のコードにアクセスするには、CM_Get_DevNode_Statusを呼び出し、次のパラメーターを指定します。
デバイス インスタンスに設定されている状態ビット フラグを受け取る ULONG 型の値へのポインターに pulStatus を設定します。 ステータス値は、 Cfg.h で定義されているプレフィックス "DN_" を持つビット フラグの任意の組み合わせにすることができます。
pulProblemNumber を、デバイス インスタンスに設定されている問題番号を受け取る ULONG 型の値へのポインターに設定します。 問題番号は、 Cfg.h で定義されているプレフィックス "CM_PROB_" を持つ定数の 1 つです。 CM_Get_DevNode_Status は、pulStatus で DN_HAS_PROBLEM が設定されている場合にのみ、問題番号を設定します。
dnDevInst を、状態と問題コードを取得するデバイスのデバイス インスタンス ハンドルに設定します。
ulFlags を 0 に設定します。
CM_Get_DevNode_Statusの呼び出しが成功した場合、CM_Get_DevNode_Statusはデバイス インスタンスの要求された状態と問題のコードを取得し、CR_SUCCESSを返します。 関数呼び出しが失敗した場合、 CM_Get_DevNode_Status は、 Cfgmgr32.h で定義されているプレフィックス "CR_" のエラー コードの 1 つを返します。
デバイス マネージャーを使用してデバイスの問題コードと問題の状態を見つける
デバイスに問題がある場合、デバイス マネージャーは、ツリー ビュー内のデバイスのアイコンに感嘆符付きの黄色い三角形を重ねて表示します。 デバイスを右クリックし、[プロパティ] を選択すると、デバイスに関する詳細情報を含むダイアログが表示されます。 [ 全般 ] タブの [ デバイスの状態 ] フィールドに問題コードが表示されます。
[問題の状態] プロパティは、デバイス マネージャー のデバイスの [詳細] タブの [プロパティ] ドロップダウンに表示されます。
デバッガーを使用してデバイスの問題コードと問題の状態を見つける
カーネル デバッガーで問題コードがあるすべてのデバイスを表示するには、!devnode 0 21 拡張機能を使用します。 これにより、デバイス上の ProblemStatus も表示されます。 例えば次が挙げられます。
0: kd> !devnode 0 21
Dumping IopRootDeviceNode (= 0x85d37e30)
DevNode 0x8ad6ab78 for PDO 0x81635c30
InstancePath is "ROOT\DIINSTALLDRIVER\0003"
ServiceName is "isolated"
State = DeviceNodeRemoved (0x312)
Previous State = DeviceNodeInitialized (0x302)
Problem = CM_PROB_FAILED_ADD
Problem Status = 0xc00000bb
DEVICE_NODE アドレスで !devnode を発行して、問題コードと問題の状態を表示することもできます。
0: kd> !devnode 0x8ad6ab78
DevNode 0x8ad6ab78 for PDO 0x81635c30
Parent 0x85d37e30 Sibling 0x8adee670 Child 0000000000
...
Problem = CM_PROB_FAILED_ADD
Problem Status = 0xc00000bb