読者です 読者をやめる 読者になる 読者になる

Natural Software

KinectなどのDepthセンサーを中心に活動しています

Borland C++ Builderでのデバイス情報の取得

プログラム Win32

http://d.hatena.ne.jp/kaorun55/20080210/1202580779で書いたデバイス情報の取得をBorland C++ Builder(BCB)で実行しようとするとエラーになるとの指摘を受けた。


なんとか環境を作って調べてみたら、プロパティを要求するための STORAGE_PROPERTY_QUERY 構造体のサイズがなぜか3となっていた(sizeofで取得)。
正常に動作する環境では12となる。


このため正常な要求が発行されないのでエラーとなったようだ。


とりあえずの処置としてDeviceIoControl周辺を下記のようにしたところ正常に動作した。

unsigned char inbuffer[24] = { 0 };
STORAGE_PROPERTY_QUERY *sPQ = (STORAGE_PROPERTY_QUERY *)inbuffer;
sPQ->PropertyId = StorageDeviceProperty;
sPQ->QueryType = PropertyStandardQuery;

ret = ::DeviceIoControl( hDevice, IOCTL_STORAGE_QUERY_PROPERTY, sPQ, 12, sdd, sizeof(buffer), &dwRet, 0 );


メンバそれぞれのサイズはきちんと取得できるのに、なぜか構造体全体で取ろうとするとおかしくなる。
ちなみにBorland C Compiler(BCC)だと、このような問題もなく正常に動作した。


原因は分からず終い。。。