2012-01-30 7 views
0

私は何が欠けているのかは分かりませんが、私はより知識のある人から質問する時間です。私はhereというHDC GUIDを使用しています。私はこれをC++コードで開こうとしています。セットアップapiからSATA HBAのリストを取得

// note: devGuid is pointer of type struct GUID in the class this ctor belongs to 
DeviceHelper::DeviceManager::DeviceManager(GUID devClassGuid) : devGuid(new GUID(devClassGuid)) { 
    hDevices = SetupDiGetClassDevs(&devClassGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); 
    if(INVALID_HANDLE_VALUE == hDevices) { 
     throw std::exception("Failure to get a handle to a list of device classes"); 
    } 
} 

この呼び出しは成功し、hDevicesは有効な参照を保持しています。

// hDevices is assigned in the c-tor as is devGuid which is a pointer 
DWORD index(0); 
SP_DEVICE_INTERFACE_DATA devInterfaceData = {sizeof(SP_DEVICE_INTERFACE_DATA)}; 
while(SetupDiEnumDeviceInterfaces(hDevices, NULL, devGuid, index, &devInterfaceData)) { 
    // look for the HBA I want from parameters passed to the class function 
    // FindHba() 
} 

SetupDiEnumDeviceInterfaces()「これ以上の項目」ではありませんが、何も反復されていない249のシステムエラーコードを設定します:私はSetupDiEnumDeviceInterfacesを呼び出すときただし、()それは何を反復処理しません。どうやら、ハンドルは空のリストを指しています。私はSetupDiGetClassDevs()の呼び出しで間違っていますか? GUIDが「インターフェイス」GUID(つまり、「インターフェイス」という名前が名前に含まれていない)ではない可能性があります。だから、私はbitwise-or DIGCF_DEVICEINTERFACEで取り除こうとしましたが、これは役に立ちませんでした。

このAPIを使用する方法に関する私の知識は非常に限られています。私は今は何もしていませんが、私の車輪を回転させています。

ありがとうございました。

答えて

0

私は明らかにこの文脈でインターフェイスが意味するものを知らない。その答えは、SetupDiEnumDeviceInterfaces()を使用する代わりにSetupDiEnumDeviceInfo()を呼び出すことにあったようです。どうやら、私は質問をしたときに正しい道を歩いていたようだ。確かに、問題は、私が持っていなかったインターフェースを反復しようとすることと関係していたようです。

いずれにしても、このコードでATAデバイスを有効/無効にできるようになりました。参考までに、私はこの過去の記事からStack Overflowへと進みました:Win32 API function to programatically enable/disable device

そのコードはC++に適合しました。

SetupApiについてよく知っている人には、これらのことについて何か教えていただければ幸いです。

関連する問題