WinUSBを使用した場合のGUIDとインターフェースIDについて

今日は!
WinUSBに限定した質問ではありませんが、GUIDGen.exeについて、解説頂けますと大変
ありがたいです。

この「様な、初歩的質問は、資料を読み解決するのが、本筋と思いますが、残念ながら
十分理解できないのが、実情です。

独自のdeviceドライバーを製作する場合は、世の中に存在しない唯一の
GUIDとインターフェースIDを記述する必要であることは理解できますが、
下記の質問点があります。

Q1)デバイスドライバーの種類によってGUIDとインターフェースIDの値が
 グループ分けされますか?
 そうではなくて、所謂乱数発生の理論に基づいて、ランダムな値を生成すると
 考えて宜しいでしょうか?

以上、宜しくお願いします。

申し訳ありませんが

申し訳ありませんがご質問の趣旨と目的がわかりませんので、仮定してお答えします。

「デバイスドライバーの種類」や「グループ分け」が「Device Interface Class」(または単にクラス)という意味でしたらば、クラスはそれぞれクラス専用のGUID(Class GUID)を持つか、新規にClass GUIDを作成することで新しいクラスを作成することができます。
ここでのクラスとは、デバイスマネージャでの表示のノードに相当するものです。各デバイスの表示名(GUIDではありません!)は、そのデバイスが所属する独自GUIDを持つ各クラスと関連付けられます。デバイスは後述の「Hardware ID」により、ユニークに識別されます。Class GUIDは(表示名が同じ場合でも)各Classをユニークに識別する目的で使用され、GUIDGEN等を使用して乱数で生成されます。

次にご質問の「インターフェースID」というのがわからないのですが、「Interface GUID」の事だとすれば、これの使用は推奨されますが、必須とは言えません。使用する場合には、一般的にGUIDGEN等を使用して乱数で生成されます。これはアプリケーションとデバイスドライバを接続するための方法の一つです。接続場所なので1つのドライバで複数持つ事も可能です。portioサンプルドライバが使用している様に「DEVICE_NAME」や「DOS_DEVICE_NAME」を使用して接続することも可能です。前述のClass GUIDとは全く関係がありません。

「インターフェースID」がINFファイル中に記述する「Hardware ID」の事だとすれば、非PnP(またはレガシィ)ドライバ等のバスに接続しないドライバの場合、これの作成方法についてはGUIDを使用しているサンプルもありますが、WDKのサンプルやHelpを見る限りでは適当な文字列に決めても良い様です。その場合でも上記2つのGUIDとは直接関係はありありません。一般的にはGUIDGEN等を使用して乱数で生成されます。

これまでの説明で「一般的にはGUIDGEN等を使用して」と書いたのは、連番で振られているGUIDが使用されているのを何回か見た事があるからです。GUIDGENでは連番のGUIDは生成しません。一方ではGUIDが衝突したトラブルがあったという話を聞いたこともあります。GUIDの使用は確率論に基づいて安全ではあるとの事になっていますが、100%問題が無い事が保証されている訳ではありません。