WDM リーダー ドライバー
必須ルーチン
次のルーチンは、WDM リーダー ドライバーで必須です。
DriverEntry
ドライバー オブジェクトとディスパッチ テーブルを初期化します。
AddDevice
スマート カード リーダーのデバイス オブジェクトを作成します。 さらに、AddDevice は、次のドライバー ライブラリ ルーチンのいずれかを呼び出すことができます。
- SmartcardInitialize (WDM) を使用してドライバーの初期化を完了します。 AddDevice でこのルーチンを呼び出すことは必須です。
- SmartcardLogError (WDM) でエラーのログ記録。 SmartcardInitialize (WDM) が失敗した場合、ドライバーは AddDevice でこのルーチンを呼び出す必要があります。
- SmartcardCreateLink (WDM) でレジストリ内のリーダー デバイスのシンボリック リンクを作成します。
Unload
システムからドライバーを削除します。
DispatchCreate
および
DispatchClose
IRP_MJ_CREATE と IRP_MJ_CLOSE< をそれぞれサポートします。 リーダーへの接続を確立するために、リソース マネージャーはリーダー ドライバーに IRP_MJ_CREATE を送信します。 接続を切断するために、リソース マネージャーは IRP_MJ_CLOSE を送信します。
DispatchCleanup
保留中の I/O 要求を取り消すためにリソース マネージャーがリーダー ドライバーに送信する IRP_MJ_CLEANUP をサポートします。
DispatchPnP
IRP_MJ_PNP をサポートする
DispatchPower
IRP_MJ_POWER をサポートします。
DispatchDeviceControl
IRP_MJ_DEVICE_CONTROL をサポートする、スマート カード要求のメインエントリ ポイントです。 IRP_MJ_DEVICE_CONTROL を受信すると、DispatchDeviceControl は、デバイス制御要求を処理するスマート カード ドライバー ライブラリ ルーチンである SmartcardDeviceControl (WDM) を直ちに呼び出す必要があります。 次のコード例は、WDM ドライバーからこのライブラリ ルーチンを呼び出す方法を示しています。
NTSTATUS
DriverDeviceControl(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
{
PDEVICE_EXTENSION deviceExtension = DeviceObject -> DeviceExtension;
return SmartcardDeviceControl(
&(deviceExtension->SmartcardExtension),
Irp
);
呼び出しで示されている特定の IOCTL を処理できない場合、SmartcardDeviceControl が不明な IOCTL 要求に対してドライバーのコールバックを呼び出します。