Quantcast
Channel: Ask CORE
Viewing all articles
Browse latest Browse all 590

ハードウェア デバイスのトラブルシューティングについて

$
0
0

こんにちは。Windows プラットフォーム サポートの北原です。

今回は、デバイスのトラブルシューティングに利用頂けるツールをいくつかご紹介したいと思います。

===============
(A) デバイスのトラブルシューティング ツール
===============
Windows 7 及び Windows 8 には、デバイスの問題を自動的に検出し、修復を試みる
ツールが OS に付属されています。何かデバイスの問題が発生した際には、まずこちらを
試してみることをお勧めします。以下はトラブルシューティング ツールの起動手順です。

1. コントロール パネルを開きます
2. [システムとセキュリティ] をクリックします
3. [コンピューターの問題のトラブルシューティング] をクリックします
4. [デバイスを構成する] をクリックします
5. ウィザードに従ってトラブルシューティングを行います

Windows トラブルシューティング - Microsoft Windows
http://windows.microsoft.com/ja-jp/windows7/products/features/windows-troubleshooting

Windows Vista は OS に組み込まれておりませんが、以下のページからツールの入手が必要です。

Windows でのトラブルシューティング - Windows ヘルプ
http://windows.microsoft.com/ja-jp/windows/troubleshooting-windows#troubleshooting-windows=windows-vista
※ [ハードウェアおよびデバイスのトラブルシューティングを実行するには] の項にあります

===============
(B) デバイス マネージャー
===============
トラブルシューティング ツールで問題が解決しない場合は、従来通り、デバイス マネージャー
を利用します。

1. Windows キーを押しながら、Pause/Break キーを押下します
2. [デバイス マネージャー] をクリックします

デバイス マネージャーが起動すると、現在接続されているすべてのデバイスが表示されます。
まずは以下のようなアイコンが無いかを確認します。

1. 無効化
アイコンに画像のような下矢印マークが付いている場合、そのデバイスは無効化されている
ことを示しています。デバイスが無効化されていると、PC はそのデバイスを使用できません。
通常、デバイスが自動的に無効化されることはほとんどありません。何かの不具合があった場合に、
人為的に無効化させる場合がほとんどです。

デバイスを有効化するには、対象のデバイスを右クリックし、[有効] をクリックします。


 

2. 不明なデバイス
画像のように [ほかのデバイス] に含まれているデバイスは、該当するデバイスの種別が
判別できなかったものになります。これは、多くの場合、必要なデバイス ドライバーが
インストールされていないことによるものです。解決にはデバイスの開発元のサイトから
最新のデバイス ドライバーを入手する必要があります。

そもそも、そのデバイスが何であるか分からない場合は、[詳細] タブの [プロパティ] から
[デバイス インスタンス パス] を調べ、それをキーワードに指定してインターネット検索を
してみることをお勧めします。デバイスに関する情報が得られる場合があります。
また、この方法で大した情報が得られなかった場合は、パスに含まれる VEN_XXXX の 4 桁の
英数字と "Vender ID" という文字列、あわせて 2 つのキーワードを指定してインターネット
検索をすると、製造元の企業名がヒットする場合があります。

3. エラー
アイコンに画像のような ! マークが付いている場合、そのデバイスが何らかの理由で正常に
動作していないことを示しています。発生しているエラーには様々な種類があり、種類ごとに
エラー コードが割り振られています。当該のデバイスをダブルクリックすることで、
エラー コードを確認することができます。
 

以下の KB には各エラー コードの説明と対応策が記載されています。
これを参考に Windows 8.1 までの OS 上でトラブルシューティングを行うことができます。

Windows のデバイス マネージャーのエラー コード
http://support.microsoft.com/kb/310123/ja-jp (日本語機械翻訳)
http://support.microsoft.com/kb/310123/en-us (英語)

===============
(C) devcon.exe
===============
devcon.exe は、デバイス マネージャーと同等の機能を持つコマンド ライン ツールです。
コマンド プロンプトでデバイスのトラブルシューティングをする場合に最適です。

以下は devcon.exe を使ってデバイスを有効化した例です。
 

devcon.exe は、Windows Driver Kit (WDK) の中に含まれておりますので、WDK を
インストールすることで、devcon.exe を入手できます。現在の最新の WDK の
インストーラーは以下のページにあります。

WDK と WinDbg のダウンロード
http://msdn.microsoft.com/ja-jp/windows/hardware/hh852365
※ [WDK 8.1 Update のダウンロード] にあります

なお、WDK 8.1 内のデフォルトの devcon.exe の保存場所は以下のとおりです。

- x86 版
  C:\Program Files (x86)\Windows Kits\8.1\Tools\x86\devcon.exe
- x64 版
  C:\Program Files (x86)\Windows Kits\8.1\Tools\x64\devcon.exe

詳細なツールの使い方は、以下の KB に記載があります。

デバイス マネージャーとして機能する DevCon コマンド ライン ユーティリティ
http://support.microsoft.com/kb/311272/ja

余談ですが、devcon.exe はデバイスのトラブルシューティング以外でも、運用で使う
スクリプトに組み込むことでも使用できます。例えば、OS の起動時に現在未接続の
USBデバイスを削除したい場合、以下のような VB スクリプトを用意して、スタート
アップに設定することで実現できます。

on error resume next
' 以下のデバイスの一覧 (未接続デバイスを含む) を取得します
' ディスク ドライブ
' ポータブル デバイス
' ユニバーサル シリアル バス コントローラー
' 記憶域ボリューム
Set objShell = CreateObject("WScript.Shell")
If UCase(objShell.Environment("Process").Item("PROCESSOR_ARCHITECTURE")) = "X86" Then
    strDevcon = "devcon.exe"
Else
    strDevcon = "devcon64.exe"
End If
Set outExec = objShell.Exec(strDevcon & " findall @usb* @*usbstor*")
Set outStream = outExec.StdOut

' 現在接続されているデバイスの一覧を取得します
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colServices = objWMIService.ExecQuery("Select * From Win32_PnPEntity")
Do While Not outStream.AtEndOfStream
  strLine = outStream.ReadLine()
  arrFields = Split(strLine," ")
  FLG = 0
  For Each objService in colServices
    ' Win32_PnPEntity の結果と devcon findall コマンドの結果を比較します
    If arrFields(0) = objService.DeviceID Then
      FLG = 1
      Exit For
    End If
  Next
  ' 比較後、一致する情報が無い (未接続デバイス) 場合、ドライバを削除します
  If FLG = 0 and not IsNumeric(arrFields(0)) Then
     If Right(arrFields(0), 1) = ":" Then
       strDevice = Left(arrFields(0), Len(arrFields(0)) - 1)
     else
       strDevice = arrFields(0)
     End If
     objShell.Run strDevcon & " remove @" & chr(34) & strDevice & chr(34)
  End If
Loop
Set colServices = Nothing
Set outStream = Nothing
Set outExec = Nothing
Set objWMIService = Nothing
Set objShell = Nothing

devcon.exe の findall オプションを使うと、未接続のデバイスも含めた全てのデバイスのリストを表示
させることができます。そして現在接続中のデバイスの一覧を WMI から取得し、それらを突き合せる
ことで未接続のデバイスだけを抽出しています。また、findall オプションの引数にはワイルドカードを
設定できますので、“@usb* @*usbstor*” のように指定することで、USB 関連のデバイスのみ抽出する
ことができます。スクリプトの最後で、抽出した未接続の USB デバイスを remove オプションで一つ一つ
削除しています。

※ 上記のスクリプトはあくまでサンプルです。実際にお使いになられる場合は、
環境にあわせてカスタマイズをし、十分にテストをした上でご使用ください。


Viewing all articles
Browse latest Browse all 590

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>