スマート カード ドライバーのデバッグ
Note
チェック ビルドは、Windows 10 バージョン 1803 以前の古いバージョンの Windows で使用することができました。 ドライバー検証ツールや GFlags などのツールを使用して、新しいバージョンの Windows のドライバー コードをチェックします。
スマート カード ドライバー ライブラリは、いくつかのデバッグ機能をサポートします。 各デバッグ機能は、Smclib.h ヘッダー ファイルで定義されている次の定数のいずれかで表されます。
DEBUG_IOCTL
DEBUG_ATR
DEBUG_PROTOCOL
DEBUG_DRIVER
DEBUG_TRACE
DEBUG_ERROR
DEBUG_BREAK
DEBUG_ALL
有効なデバッグ機能の一連の組み合わせは、デバッグ レベルと呼ばれる値で表されます。 この値は、有効にする機能に対応する定数のビット単位の論理和を取って計算できます。
デバッグ レベルを設定するには、2 つの方法があります。 まず、Windows Driver Kit (WDK) に付属するスマート カード ドライバー テスト プログラム Scdrvtst を使用できます。 2 つ目は、SmartcardSetDebugLevel スマート カード ドライバー ライブラリ ルーチンを使用する方法です。
どちらの場合も、デバッグ レベルを設定するプログラムまたはルーチンに、必要なデバッグ レベルの値を渡す必要があります。 たとえば、スマート カード ライブラリ ルーチンを使用してドライバーからデバッグ レベルを設定するには、次の呼び出しを行います。
SmartcardSetDebugLevel(DebugLevel);
リーダー ドライバーからデバッグ メッセージを書き込むには、ドライバーは、次のルーチンを呼び出す必要があります。
SmartcardDebug(
ULONG DebugLevel,
PCHAR Message
);
重要
デバッグ メッセージを取得するには、チェック バージョンのオペレーティング システムとチェック バージョンのドライバーをインストールする必要があります。
このルーチンは、次の方法でリモート デバッガーにメッセージを書き込む際にも使用できます。
エラー メッセージを書き込むには、DebugLevel の DEBUG_ERROR 定数を使用します。
標準のドライバー メッセージを書き込むには、DEBUG_DRIVER 定数を使用します。
リーダー ドライバーがいつルーチンに入ったりルーチンから出たりしたかを示すトレース メッセージを書き込むには、DEBUG_TRACE を DebugLevel として使用します。
ドライバーの開発中は、スマート カード ドライバー ライブラリのチェックバージョンを使用してください。DriverEntry ルーチンで SmartcardSetDebugLevel(DEBUG_ALL) を使用し、デバッグ レベルを最大に設定します。
リモート デバッグ セッションの設定については、「Windows デバッグ」を参照してください。