2009-06-26 7 views
1

返されたデバイス情報セットの何が問題なのかを知るにはどうすればよいですか?私は自分のコードを書き直していますが、私はまだ同じ障害を抱えています。C#でSetupDiGetClassDevインターフェイスの問題点を知るにはどうすればよいですか?

deviceInfoSet = SetupDiGetClassDevs(ref tGuid, 0, IntPtr.Zero, (uint)SetupDiFlags.DIGCF_PRESENT); 
if (deviceInfoSet.ToInt32() == INVALID_DEVICE_HANDLE) 
{ 
    int errCode = Marshal.GetLastWin32Error(); 
    errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message; 
    statusLabel.Text += "Invalid deviceinfoset returned: " + errCode + " => " + errorMessage + "."; 
} 

上記のコードは、すべてのエラーが発生することはありませんが、私は以下のコードを使用する場合:

result = true; 
while (result) 
{ 
    result = SetupDiEnumDeviceInterfaces(deviceInfoSet, IntPtr.Zero, ref tGuid, Index, ref anInterface); 
    if (!result) 
    { 
     int errCode = Marshal.GetLastWin32Error(); 
     errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message; 
     statusLabel.Text += "\nSetDiEnumDeviceInterface Error: " + errCode + " => " + errorMessage + "."; 
     break; 
    } 
    Index++; 
} 

は259(これ以上のデータがあるしようとすると、デバイス情報セットリスト、エラーコードにアクセスするには利用可能な)が返されます。私は間違って何をしているのか分からない。

+3

-1参考にして、あなたの文章を続けてください。 –

+1

私は本当にあなたの質問のタイトルを更新します。それは非常に曖昧です。おそらく、 "USBデバイスプログラミング:無効なデバイス情報セット"のようなものです。 –

+0

PパパとSheepsimulatorは申し訳ありませんが、私は何が間違っているのか把握しようとしている2日間同じサークルの周りに行ってきましたので、私は強調しています。私は次回より説明的になるようにします。 –

答えて

1

正しいGUIDを使用していますか?

チェックアウトhttp://blogs.msdn.com/doronh/archive/2006/02/15/532679.aspx

編集:他のすべてが見えることで、書籍や正しいです。

Edit2:SetupDiGetClassDevsの呼び出しでDIGCF_DEVICEINTERFACEを含めて試してみてください。つまり、DIGCF_PRESENTとDIGCF_DEVICEINTERFACEの両方です。

EDIT3:64号(@Thies)のために、私は原因64ビット版のWindows上で実行されているものであったまねた問題を抱えていたhttp://social.msdn.microsoft.com/Forums/en-US/windowssdk/thread/ea816aea-f718-4a0e-b013-0aa273de037f

+0

私は、** HidD_GetHidGuid(ref tGuid); **関数によって返されたGuidを使用しています。 SetDiGetClassDevsは、パラメータに指定されているものを示すデバイスインセットを返しています。残念なことに、返されるものが有効かどうかを知る唯一の方法は、SetupDiEnum *関数を呼び出すことです。 –

+0

チップのおかげで@hythodayr。私はC#を実行していますので、C#コードで必要とされている違いを投稿では分かりませんが、もっと時間がかかるとコードを再生する必要があります。 – Thies

+0

おっとありがとう。それはリストから何かを選別したようだ。私はこれを追うのをやめ終えた後、私は応答するでしょう。 –

0

私はこの特定のインターフェイスに精通していませんが、何か間違っているとは思われません。現在のところ、提供するデータがないデバイスからデータを読み取ろうとしているようです。

その場合ですか?デバイスが現在あなたにデータを返そうとしていることを確認していますか?

+0

の後に編集できることを知らなかった申し訳ありません。msdnの仕様によると、SetupDiGetClassDevs(これらの関数名を短縮する方法を見つける必要があります)では、デバイスのリストまたはエラーが返されます。この時点では、まだデバイスにアクセスしようとしていません。私は実際にリストにアクセスしようとしています。私は必要なデバイスのパスを抽出できるように返されました。 –

0

をチェックしてください。私は決してそれを理解したことはなく、コード内でデバイスパスをハードコーディングすることになりました。これはお勧めできません。

私は、64ビットの設定が正しくないAPI構造と関係していると思います。あなたは64ビットを実行している場合、これは答えに他の誰かを導く手助け(そしておそらく同様に私の問題を助ける)

希望は明記してください - あなたは、32ビットで同じコードを試してみましたOS?

+0

私の仕事環境はまだ32ビット(Win7 RC1)です。私はsetupDiGetClassDev + SetupDiEnumDeviceInfoを使用すると、実際にいくつかの事柄についてSetupDiGetDeviceRegistryPropertyを使って問い合わせることができる有効なdeviceinfolistを返すと言うことができます。しかし、SetupDiGetDeviceInterfaceDetailを使用したり、試してみると、私の邪魔をしてくれて、もう一度やり直すことができました。 –

0

問題は、SetupDiGetClassDevsが呼び出される方法から始まります。

あなたは、デバイスのパスを取得するために探している場合は、SetupDiGetClassDevsがMSヘルプへのポインタであると言うClassGuidで間違ったGUIDを与えられている場合は、エラー259で失敗しSetupDiGetClassDevs(& GUID_DEVINTERFACE_USB_DEVICE ,,,)

SetupDiEnumDeviceInterfacesを使用しますデバイスセットアップクラスまたはデバイスインターフェイスクラスのGUID。

インクルードファイルdevguid.hには、GUID_DEVCLASS値のセットが含まれています。これらは、必要なGUID_DEVINTERFACE_ *値と同じではありません。

#includeには、GUID_DEVINTERFACE_ *値があるksuuids.hが含まれています。

私のウェブサイトには、USBデバイスを正しく列挙するのに役立ついくつかのソースコードの詳細な説明があります。

http://pixcl.com/SetupDiEnumInterfaces_Fail.htm

関連する問題