そうだ!ドライバーを作ろう(4) DriverEntry | Tamamyの釣り堀
2008-04-10 21:40:29

そうだ!ドライバーを作ろう(4) DriverEntry

テーマ:ブログ
これといったアイデアも浮かばないのでとりあえず標準ドライバーと同等の機能を持ったドライバーを作成して後から機能を付け足して行くことに

まずはドライバーの中で唯一名前の決まってるDriverEntryから

NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
HID_MINIDRIVER_REGISTRATION HidMinidriverRegistration;

DriverObject->DriverExtension->AddDevice=AddDevice;
DriverObject->DriverUnload=Unload;

DriverObject->MajorFunction[IRP_MJ_PNP]=PnP;
DriverObject->MajorFunction[IRP_MJ_POWER]=Power;
DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL]=
InternalDeviceControl;

RtlZeroMemory(&HidMinidriverRegistration,
sizeof(HID_MINIDRIVER_REGISTRATION));
HidMinidriverRegistration.Revision=HID_REVISION;
HidMinidriverRegistration.DriverObject=DriverObject;
HidMinidriverRegistration.RegistryPath=RegistryPath;
HidMinidriverRegistration.DeviceExtensionSize=
sizeof(DEVICE_EXTENSION);
HidMinidriverRegistration.DevicesArePolled=FALSE;
status=HidRegisterMinidriver(&HidMinidriverRegistration);
return status;
}

DriverEntryではドライバーオブジェクトに各種ルーチンへの
ポインタを登録します
登録するルーチンは扱うデバイスや実装する機能によって違い
今回作るドライバーはHID MiniDriverなので
AddDevice、Unload、PnP、Power、InternalDeviceControl
の5つだけ利用します
機能追加するときに増やすかも知れません

ソースの下側はHIDクラスドライバーにHID MiniDriverを
登録する部分です
DEVICE_EXTENSIONはドライバーで使う変数などを
記録しておく構造体です
内容は自分で好きなように定義出来ます

DeviceArePolledがあまりよく分かってません…
WDK付属のサンプルソースに説明が載っているんですが
どうやら古いデバイスとの互換性の為に有るようで
USB HIDデバイスはFALSEで良いらしいです

Tamamyさんをフォロー

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントする]

Ameba人気のブログ

Amebaトピックス