環境 WINDOWS2000 VisualStudio6.0
始めまして。
一つのデバイスのハンドルを、違う方法で2つ取得し、
その2つが同じデバイスのハンドルである事を、デバイスにアクセスせず
ハンドル同士だけで証明する方法はないでしょうか?
デバイスから情報が得られない為、ハンドルの比較によって同一であることを
証明したいのです。
お願い致します。
> 一つのデバイスのハンドルを、違う方法で2つ取得し、
まずこのデバイスというのが何なのかを示すことと
ハンドルを取得する2つの方法を示すことが必要です
さらに何をしたいのかを書いたほうが良いと思います
ハンドルの例
たとえば僕がファイルにアクセスするライブラリを提供したとします
そのライブラリの外部領域に僕がファイルを管理する変数を宣言ていたとします
static char aszFile[10][MAX_PATH];
static int nFileCnt = 0;
僕が提供するライブラリの戻り値はaszFileに対するインデックスをハンドルとして返します
実際に有効なハンドルとして返すのは0~9です
こういったハンドルからそれが何を意味するのか、同じ何かを示しているのかいないのか
判断するのは大変難しいはずです
また場合によっては1つの何かにたいし、ハンドルを複数個返せないものもあるかもしれません
どうもです。
USBのデバイスになります。
例えば、CreateFileから2箇所のレジストリを直接指定してハンドルを取得します。
そして、取得した2つのHANDLEが一致するかを判別できないか?
という事になります。
> USBのデバイス
これが何を示しているのか分かりませんので
具体的にHDDやフラッシュメモリ等と書くか
複数の違ったデバイスである可能性があるならそれを列挙した方が良いと思います
プリンタとかの可能性もあるしね
> 例えば、CreateFileから2箇所のレジストリを直接指定してハンドルを取得します。
もうちょっと具体的に書いた方がよいよ
簡単なソースを示すという方法もあります
というのは、
「CreateFileからレジストリを直接指定してハンドルを取得する」
というのが理解できないからです
それからCreateFile()のようなものを使う場合なら
CreateFile()に渡す引数を保存しておいて比較した方が遙かに楽だと思います
複数の違ったデバイスになります。
詳しくすると、
レジストリ内の
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\
から
CreateFileを使用して、その中のレジストリの値を指定して探していきます。
オープンする名前の引数に、
##?#IDE#DiskIBM-DTLA-307030_________________________TX4OA60A#4&13b4afd&0&0.0.0#
{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
などのレジストリキーを指定してハンドルを取得します。
そのハンドルと、同じくCreateFileを使用し、
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
内などのレジストリキーを、上記と同じような方法指定し、ハンドルを取得。
そのハンドル同士が同じデバイスを示す物であるかどうかを比較します。
同じデバイスであれば、ハンドルの指し示す先のアドレス内容は同じ筈なので
比較できるのではないかと考えています。
1.この2つのレジストリの値を比較することが目的でしょうか?
2.何かをするために、この比較を行っているのでしょうか?
2の方でしたら、その目的を書くと良いかもしれません
この掲示板ではここまでデバイスよりの話ですと
得意な人が少ないかなと思います(知っていらっしゃる方がいるかもしれませんが)
もしくはこういった情報が必要になった人が少ないとか...
下記のページはDDKに関する掲示板があります(職人フォーラムという項目です)
マルチポストは嫌われますので、こちらでの経緯と質問を書いて投稿してはいかがでしょうか?
http://www.ouk.co.jp/ogawa/