デバイス ドライバをデバッグする場合、ドライバとその関連サブシステムから詳細なデバッグ トレースを取得する必要があります。
マイクロソフトが提供する大部分のドライバとサブシステムでは、グローバル変数とあらかじめ定義された一連の変数を使用して、デバッガに送られるデバッグ トレース情報の詳細レベルを制御しています。
この資料では、次の項目について説明します。
| ? |
カーネル デバッガとレジストリの値を使用して、デバッグ トレース レベルを有効にし、制御する方法
|
| ? |
特定の種類のドライバに対し、対応するデバッガ拡張機能を使用して、デバッグ トレースを有効にし、制御する方法
|
| ? |
Windows 2000 と Windows XP でのデバッグ トレースを有効にする方法の違い
|
先頭へ戻る
重要 : この資料には、開発およびテストを目的とした .chk ファイルの実行に関する情報が記載されています。Microsoft Product Support Services (PSS) は、問題を特定するために PSS の指示で .chk ファイルをインストールした場合を除き、.chk ファイルがインストールされている運用システムをサポートしません。運用システムに .chk ファイルをインストールする前に、必ずシステムをバックアップし、問題が発生した場合に、置き換えたファイルを復元する方法を確認してください。
.chk ファイルの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
103659 (http://support.microsoft.com/kb/103659/)
ハードウェアの検査中にセットアップが応答を停止する (Ntdetect.com の使用方法)
320040 (http://support.microsoft.com/kb/320040/) Windows 2000 で Ntdetect.chk を使用してハードウェアの問題を特定する方法
システムのバックアップと復元の方法については、Windows 2000 ヘルプとサポートを参照してください。
Ntbackup の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
240363 (http://support.microsoft.com/kb/240363/)
システム状態のバックアップと復元の方法
また、バックアップ製品の使用方法に関する情報については、バックアップ製品の提供元に問い合わせてください。
注 : 次のデバッグ情報は、随時変更される場合があります。また、このデバッグ情報はドライバのデバッグのみを目的としており、ドライバの開発者以外には不要である可能性があります。
先頭へ戻る
ビデオ ミニポートのデバッグ
ビデオ ミニポートのデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド ビデオ ポートとミニポート ドライバが必要です。
|
| ? |
デバッガ拡張機能は使用されません。
|
| ? |
デバッグ トレースを有効にするために、グローバル変数が設定されます。
|
| ? |
変数名は、Windows 2000 と Windows XP では異なります。
|
| ? |
Windows 2000 では、次の手順を実行して、レジストリまたはデバッガからデバッグ トレースを有効にできます。
| ? |
レジストリの VideoDebugLevel の値 (0 〜 3) を次のように設定します。
HKEY_LOCAL_MACHINE\SYSTEM\CCS\Services\DriverName\DeviceN VideoDebugLevel:REG_DWORD: 2 | | ? |
または、デバッガから次のように設定します。
ed videoprt!VideoDebugLevel 2 |
|
| ? |
Windows XP ベースのコンピュータのビデオ ポートでは、新しい DbgPrintEx 関数を使用します (詳細については、この資料の「注意事項」を参照してください)。
ビデオ ドライバ用に定義されている変数は、次のとおりです。
Kd_IHVVIDEO_Mask
Kd_VIDEO_Mask
Kd_VIDEOPRT_Mask
マスクを設定するには、次の手順を実行します。
| ? |
レジストリに必要なマスクを追加します。
例 : HKEY_LOCAL_MACHINE\SYSTEM\CCS\Control\Session?Manager\Debug?Print?Filter "IHVVIDEO"=DWORD: 0xffffffff | | ? |
または、デバッガから次のように設定します。
ed Kd_IHVVIDEO_Mask 0xffffffff |
|
先頭へ戻る
1394 のデバッグ
1394 のデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド 1394 モジュールが必要です。
|
| ? |
Windows 2000 および Windows XP ベースのシステムで、デバッガから対応するグローバル変数を設定します。次に例を示します。
ed ohci1394!ohcidebuglevel 6 |
モジュール名
|
デバッグ シンボル
|
範囲
|
|---|
|
OHCI1394.SYS
|
ohcidebuglevel
|
1 〜 6
| |
SBP2PORT.SYS
|
sbp2debuglevel
|
1 〜 4
| |
1394BUS.SYS
|
busdebuglevel
|
1 〜 5
|
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
259855 (http://support.microsoft.com/kb/259855/)
[HOWTO] IEEE 1394 ドライバのデバッグの出力を有効にする方法
|
先頭へ戻る
USB のデバッグ
USB (Universal Serial Bus) のデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド USB モジュールが必要です。
|
| ? |
Windows 2000 ベースのシステムでは、デバッガから対応するグローバル変数を設定する必要があります。次に例を示します。
ed USBD!USBD_Debug_Trace_Level 2 |
??モジュール名??
|
??デバッグ シンボル??
|
範囲
|
|---|
|
UHCD.SYS
|
UHCD_Debug_Trace_Level
|
0 〜 2
| |
OPENHCI.SYS
|
OHCI_Debug_Trace_Level
|
0 〜 2
| |
USBHUB.SYS
|
USBH_Debug_Trace_Level
|
0 〜 3
| |
USBD.SYS
|
USBD_Debug_Trace_Level
|
0 〜 3
|
|
| ? |
Windows XP ベースのシステムでは、次のパラメータを使用します。
|
??モジュール名??
|
??デバッグ シンボル??
|
範囲
|
|---|
|
USBPORT.SYS
|
USBPORT_Debug_Trace_Level
|
0 〜 4
| |
USBCCGP.SYS
|
DbgVerbose
|
0 または 1
| |
USBHUB.SYS
|
USBH_Debug_Trace_Level
|
0 〜 3
| |
USBD.SYS
|
USBD_Debug_Trace_Level
|
0 〜 3
| |
USBPORT.SYS
|
USBPORT_CatcTrapEnable
|
0 〜 1
|
|
| ? |
すべての USB ミニポート ドライバのデバッグ出力に USBPORT が使用されます。
|
先頭へ戻る
PCI のデバッグ
PCI (Peripheral Component Interconnect) のデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド PCI.SYS モジュールが必要です。
|
| ? |
Windows 2000 および Windows XP ベースのシステムで、デバッガから対応するグローバル変数を設定します。次に例を示します (0x3 が最も詳細です)。
ed PCI!PciDebug 0x3 |
??モジュール名??
|
??デバッグ シンボル??
|
範囲
|
|---|
|
PCI.SYS
|
?PciDebug?
|
?0 〜 3?
|
|
先頭へ戻る
PCMCIA のデバッグ
PCMCIA のデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド pcmcia モジュールが必要です。
|
| ? |
Windows 2000 および Windows XP ベースのシステムで、デバッガから対応するグローバル変数を設定します。次に例を示します。
ed PCMCIA!PcmciaDebugMask 0xFFFFFFFF
値の定義は以下のとおりです。
#define PCMCIA_DEBUG_ALL 0xFFFFFFFF
#define PCMCIA_DEBUG_TUPLES 0x00000001
#define PCMCIA_DEBUG_ENABLE 0x00000002
#define PCMCIA_DEBUG_PARSE 0x00000004
#define PCMCIA_DUMP_CONFIG 0x00000008
#define PCMCIA_DEBUG_INFO 0x00000010
#define PCMCIA_DEBUG_IOCTL 0x00000020
#define PCMCIA_DEBUG_DPC 0x00000040
#define PCMCIA_DEBUG_ISR 0x00000080
#define PCMCIA_DEBUG_CANCEL 0x00000100
#define PCMCIA_DUMP_SOCKET 0x00000200
#define PCMCIA_READ_TUPLE 0x00000400
#define PCMCIA_SEARCH_PCI 0x00000800
#define PCMCIA_DEBUG_FAIL 0x00008000
#define PCMCIA_PCCARD_READY 0x00010000
#define PCMCIA_DEBUG_DETECT 0x00020000
#define PCMCIA_COUNTERS 0x00040000
#define PCMCIA_DEBUG_OVERRIDES 0x00080000
#define PCMCIA_DEBUG_IRQMASK 0x00100000
|
??モジュール名??
|
??デバッグ シンボル??
|
範囲
|
|---|
|
PCMCIA.SYS
|
?PcmciaDebugMask?
|
?0-FFFFFFFF?
|
|
先頭へ戻る
NDIS のデバッグ
NDIS (Network Driver Interface Specification) のデバッグを行う際は、次のことに注意してください。
| ? |
NDIS のデバッグには、チェック ビルド NDIS が必要です。Windows 2000 以降のバージョンで NDIS デバッグ トレースを有効にする方法の詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
|
先頭へ戻る
ストレージ ドライバのデバッグ
ストレージ ドライバのデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド ストレージ モジュールが必要です。
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
296225 (http://support.microsoft.com/kb/296225/)
SCSIPORT のデバッグ ログを有効にする方法
|
先頭へ戻る
プリンタ ドライバのデバッグ
プリンタ ドライバのデバッグを行う際は、次のことに注意してください。
ユーザー モード
| ? |
チェック ビルド システムまたはチェック ビルド プリンタ ドライバ コンポーネント (unidrv または pscript) が必要です。
|
| ? |
ユーザー インターフェイス (UI) モジュールをデバッグするか、レンダリング モジュールをデバッグするかに応じて、印刷アプリケーションまたはスプーラ プロセス (spoolsv.exe) にアタッチします。
|
| ? |
Unidrv をデバッグする場合は、次の設定を使用します。
ed unidrv!giDebugLevel 1 |
カーネル モード
| ? |
gflags コマンドを実行して、spoolsv.exe の次のフラグを有効にします。
| ? |
Windows 2000 の場合 : "Place Heap Allocation at end of pages"
| | ? |
Windows XP の場合 : "enable page heap"
|
|
| ? |
スプーラを再起動します (net stop/start spooler)。
|
| ? |
Win32K.sys に対して verifier.exe を実行して、プリンタ ドライバをデバッグします。
|
先頭へ戻る
オーディオ ドライバのデバッグ
オーディオ ドライバのデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド オーディオ モジュールが必要です。
|
| ? |
Windows 2000 および Windows XP ベースのシステムで、デバッガから対応するグローバル変数を設定します。次に例を示します。
ed USBAUDIO!USBAudioDebugLevel 3 |
???モジュール名???
|
????デバッグ シンボル????
|
??範囲??
|
|---|
|
USBAUDIO.SYS
|
USBAudioDebugLevel
|
0 〜 3
| |
SYSAUDIO.SYS
|
SYSAUDIOTraceLevel
|
0 〜 100
|
|
先頭へ戻る
HID ドライバのデバッグ
HID ドライバのデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド HID モジュールが必要です。
|
| ? |
Windows 2000 および Windows XP ベースのシステムで、デバッガから対応するグローバル変数を設定します。次に例を示します。
ed HIDCLASS!dbgverbose 1 |
???モジュール名???
|
????デバッグ シンボル????
|
??範囲??
|
|---|
|
HIDUSB.SYS
|
HIDUSB_DebugLevel
|
0 〜 1
| |
HIDCLASS.SYS
|
dbgverbose
|
0 〜 1
|
|
先頭へ戻る
シリアル ドライバのデバッグ
シリアル ドライバのデバッグを行う際は、次のことに注意してください。
| ? |
チェック ビルド システムまたはチェック ビルド シリアル モジュールが必要です。
|
| ? |
Serial.sys (Windows 2000 および Windows XP ベースのシステムの両方)
| ? |
レジストリの DebugLevel の値を次のように設定します。
HKLM\System\CCS\Services\Serial “DebugLevel”= REG_DWORD:0xFFFFFFFF
または、デバッガから次のように設定します。
ed Serial!SerialDebugLevel (0x00000000 - 0xFFFFFFFF) | | ? |
マスク値は次のディレクトリで定義されています。
%DDKROOT%\src\kernel\serial\serial.h
|
|
| ? |
Serenum.sys (Windows 2000 および Windows XP ベースのシステムの両方)
| ? |
レジストリの DebugLevel の値を次のように設定します。
HKEY_LOCAL_MACHINE\System\CCS\Services\Serenum "DebugLevel"= REG_DWORD:1FF | | ? |
マスク値は次のディレクトリで定義されています。
%DDKROOT%\src\kernel\serenum\serenum.h
|
|
先頭へ戻る
モデム ドライバのデバッグ
Windows 2000 および Windows XP ベースのシステムで unimodem の完全な詳細デバッグを有効にするには、チェック ビルドを用意し、次の手順を実行する必要があります。
| 1. |
Mdminst.dll と Unimdm.tsp を除くすべてのファイルについて、次のレジストリ キーを追加します。
| ? | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Unimodem "DebugFlags"=dword:0000003f | | ? | HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon "SFCDisable"=dword:00000001 | | ? | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Modem "DebugFlags"=dword:0000003f | | ? | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Modemcsa "DebugFlags"=dword:0000003f |
|
| 2. |
Mdminst.dll については、Unimdm.ini を %windir% にコピーします。Unimdm.ini ファイルの例を次に示します。
[ModemUI]
; DumpFlags:
; 00000001 DCB
; 00000002 MODEMSETTINGS
; 00000004 DEVCAPS
DumpFlags=0x0000000f
; TraceFlags:
; 00000001 Warnings
; 00000002 Errors
; 00000004 General
; 00000008 Function trace
TraceFlags=0x0000000f
; BreakFlags:
; 00000001 Break on validate
; 00000040 Break on process attach
; 00000100 Break on API enter
BreakFlags=0x00000000
;; --------------------------------------------------------------------
[Modem]
; DumpFlags:
DumpFlags=0x0000000f
; TraceFlags:
; 00000001 Warnings
; 00000002 Errors
; 00000004 General
; 00000008 Function trace
; 00010000 Detection queries
; 00020000 Class installer trace
TraceFlags=0x0003000f
; BreakFlags:
; 00000001 Break on validate
; 00000040 Break on process attach
; 00000100 Break on API enter
BreakFlags=0x00000000
;; --------------------------------------------------------------------
[SerialUI]
; DumpFlags:
; 00000001 DCB
DumpFlags=0x00000000
; TraceFlags:
; 00000001 Warnings
; 00000002 Errors
; 00000004 General
; 00000008 Function trace
TraceFlags=0x00000000
; BreakFlags:
; 00000001 Break on validate
; 00000040 Break on process attach
; 00000100 Break on API enter
BreakFlags=0x00000000
;; --------------------------------------------------------------------
[Unimdm]
; DumpFlags:
DumpFlags=0x0000000f
; TraceFlags:
; 00000001 Warnings
; 00000002 Errors
; 00000004 General
; 00000008 Function trace
; 00010000 dwDeviceID related
; 00020000 hdLine related
; 00040000 hdCall related
; 00080000 pLineDev related
; 00100000 pModemInfo related
TraceFlags=0x001f000f
; BreakFlags:
; 00000001 Break on validate
; 00000040 Break on process attach
; 00000080 Break on process detach
; 00000100 Break on API enter
BreakFlags=0x00000000
|
| 3. |
Unimdm.tsp のデバッグを行うために、次のレジストリ キーを追加します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}\device instance\Logging |
先頭へ戻る
デバイス インストールのデバッグ
Windows XP 以降のバージョンで、カーネル モードとユーザー モードの PNP マネージャから詳細なトレースを取得するには、チェック ビルドを用意し、次のコードを実行します。
ed NT!Kd_NTOSPNP_Mask 0xFFFFFFFF ed NT!Kd_PNPMGR_Mask 0xFFFFFFFF
Windows 2000 では、カーネル デバッガで、次のようにグローバル変数 PnpEnumDebugLevel を 1 または 2 に設定できます。
ed nt!PnpEnumDebugLevel 2
先頭へ戻る
注意事項
Windows XP ベースのシステムのドライバとサブシステムの中には、次の新しい DbgPrintEx 関数を使用しているものがあります。
ULONG DbgPrintEx(IN ULONG ComponentID,
IN ULONG Level, IN PCHAR Format, . . . .
[arguments]);
マイクロソフトでは、約 95 個の異なるコンポーネント ID を定義しています (詳細については、Ntddk.h ファイルの DPFLTR_TYPE を参照してください)。コンポーネント フィルタ ID ごとに、次のようなグローバル マスク変数があります。
NT! Kd_IHVVIDEO_Mask、NT!Kd_IHVAUDIO_Mask
マスクの値は、レジストリから次のように設定できます。
HKEY_LOCAL_MACHINE\SYSTEM\CCS\Control\Session?Manager\Debug?Print?Filter
"IHV_AUDIO"=REG_DWORD:0xFFFFFFFF
または、デバッガから次のように設定できます。
ed NT!Kd_IHVAUDIO_Mask 0xffffffff
デバッグ出力は、グローバル マスク (Kd_Win2000_Mask) とコンポーネント レベルのマスクに基づいてフィルタ処理されます。出力のフィルタ処理でマスクおよびレベル値がどのように使用されるかについては、Windbg のヘルプ ファイルに記載されています。
デバッグ トレースを有効にするには、次のコードを使用して、Ntddk.h ファイルまたはデバッガからコンポーネント ID を調べます。
x NT!Kd_*_Mask
次に、そのコンポーネント ID について、値を詳細出力の最大値 (0xffffffff) に設定します。現在、この新しい関数を使用できるドライバ (この資料の「詳細」に記載されているドライバ) はごくわずかです。
先頭へ戻る
なお、この資料は英語版の翻訳であり、日本語環境での確認は行っておりません。
先頭へ戻る