Wdm.hとNtddk.hの関係
投稿者: ksudoh 投稿日時: 金, 2010/06/18 - 17:30
WDK 7600.16385.1を使ってWDMデバイスドライバの開発をしております。
Wdm.hとNtddk.hの関係について、以下の2点をご存知の方がいれば教えていただきたく書き込みをしました。
1、wdm.hの代わりにNtddk.hをインクルードしても特に問題はないのか?
2、問題ないのであれば、Wdm.hは何のために存在するのか?
詳細を以下に説明します。
wdm.hをインクルードして開発を進めていたのですが、
OSのバージョンを取得する必要がありRtlGetVersionというAPIを使おうと考えました。
しかしこのAPIの定義はNtddk.hに含まれており、wdm.hには含まれていないようです。
そこでこの2つのヘッダファイルの関係を調べたところ、MSDNに以下のような記述がありました。
Organization of Wdm.h, Ntddk.h, and Ntifs.h
http://msdn.microsoft.com/en-us/library/ff554739(VS.85).aspx
ここから見るにWdm.hをNtddk.hに変更しても問題ないように見えます。
しかし、それならばNtddk.hだけを使えばいい話でWdm.hの存在意義が分かりません。
例えば「Wdm.hに定義されているものだけを使用すると、WDMの仕様に正式に準拠したことになる」等
何らかの存在意義があるのでしょうか?
質問は以上です。よろしくお願いします。

>
> Wdm.hとNtddk.hの関係について、以下の2点をご存知の方がいれば教えていただきたく
良く知らないので、書いていいのかどうか少し迷いました。
> 1、wdm.hの代わりにNtddk.hをインクルードしても特に問題はないのか?
新規にWDK 7600.16385.1でドライバを書くのであれば、多分問題無いと思います。
> 2、問題ないのであれば、Wdm.hは何のために存在するのか?
たぶん互換性のためではないでしょうか。古いWDM.Hをインクルードしているソースでも、なるべく変更が少なくても済むようなという心遣いです。
事実、驚いた事に先日Windows2000DDK用に書かれたUSBドライバを、WDK 6001.18002でビルドする機会があったのですが、警告は出たものの1文字も変更しないでビルドすることができました。見てみると6001.18002までは、BulkUSB.c等NTDDK.Hを使わずにWDM.Hをインクルードしているサンプル・ソースはいくつかあります。
背景としては、Windowsのドライバ開発環境というのは今まで、急に変わるのではなく、緩やかに少しずつ互換性を持たせながら変わって来ている事が挙げられます。
Windows Vista WDK(6000)が出た時にIncludeヘッダが整理されて、WDM.Hの内容が大幅に変わりました。それまで(Windows Server 2003SP1 DDKまで)はNTDDK.Hはありませんでした。WDM.Hはビルド環境毎に違うサブディレクトリのものをインクルードしていました。ですからDDKがWDKに変わったWindows Vista WDK(6000)で、WDM.Hが急に消えるのではなく、古いWDMドライバもソースを変更せずに、条件が合えばそのままビルドできるようにしたのだと思います。
ご存知の通り、WDK 7600からWDMのサンプルはほとんど無くなりましたので、次のメジャーなWDKのバージョンではWDM.Hが消えて、古いWDMのソースがそのままビルドできなくなるのかも知れません。
返信が遅くなり、失
返信が遅くなり、失礼しました。
>たぶん互換性のためではないでしょうか。古いWDM.Hをインクルードしているソースでも、なるべく変更が少なくても済むようなという心遣いです。
wdm.hの方が新しい仕様を表していると思っていたのですが、
むしろ旧来のソースとの互換性のために保持されていたのですね。
今後新規作成する場合はntddk.hを使うことにします。ご回答ありがとうございました。