2009-06-26 2 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 (더 이상 데이터가 시도하고 장치 정보 설정 목록, 에러 코드에 액세스 할 수 available)가 반환됩니다. 나는 내가 뭘 잘못하고 있는지를 놓치고있다.

+3

-1 http://pixcl.com/SetupDiEnumInterfaces_Fail.htm를 참조 몸에 문장을 계속. –

+1

나는 정말로 당신의 질문 제목을 업데이트 할 것입니다; 그것은 매우 모호합니다. 아마도 "USB device programming : Invalid deviceinfo set."과 같은 말을 할 수 있습니다. –

+0

P 아빠와 양 시뮬레이터는 유감 스럽지만 2 일 동안 동일한 서클에서 돌아가고있어 무엇이 잘못되었는지 알아 내려고 스트레스를받습니다. 나는 다음에 더 설명하기 쉽도록 할 것입니다. –

답변

1

올바른 GUID를 사용하고 있습니까?

체크 아웃 http://blogs.msdn.com/doronh/archive/2006/02/15/532679.aspx

편집 : 다른 모든 보인다별로 - 책과 올바른.

Edit2 : SetupDiGetClassDevs에 대한 호출에서 DIGCF_DEVICEINTERFACE를 포함하여 시도하고 해당 작업이 가능한지 확인하십시오. 즉, DIGCF_PRESENT 및 DIGCF_DEVICEINTERFACE입니다.

EDIT3 : 내가 인해 64 비트 윈도우에서 실행중인했다 시뮬 문제가 있었다 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

Oohh thanks .. 그게 목록에서 뭔가 빠져 나간 것 같아. 나중에 이걸 쫓아 냈을 때 나는 대답 할 것이다. –

0

저는이 특정 인터페이스에 익숙하지 않지만 당신이 잘못한 것처럼 보이지 않습니다. 현재 제공 할 데이터가없는 기기에서 데이터를 읽는 중일뿐입니다.

그런 경우입니까? 장치가 현재 데이터를 반환하려고하는지 확실히 알고 있습니까?

+0

이후에 편집 될 수 있다는 것을 몰랐습니다. msdn 사양에 따르면 SetupDiGetClassDevs (이 함수 이름을 줄이는 방법을 찾아야 함)는 장치 목록이나 오류를 반환합니다. 이 시점에서 나는 아직 장치에 액세스하지 않으려 고합니다. 실제로 목록에 액세스하려고합니다. 필요한 장치의 경로를 추출 할 수 있도록 반환되었습니다. –

0

64 비트 문제 (@Thies)의 경우, 체크 아웃. 나는 결코 그것을 알아 내지 못했으며, 코드에서 디바이스 경로를 하드 코딩하는 것을 끝내었다.

64 비트에 맞지 않는 API 구조와 관련이 있다고 생각합니다. 그리고 32 비트에 동일한 코드를 시도해야 -이 64 비트를 실행하는 경우

하시오 대답에 다른 사람을 이끌 (어쩌면뿐만 아니라 내 문제에 도움) 도움이 될 수 있습니다

희망 OS?

+0

제 작업 환경은 여전히 ​​32 비트입니다 (Win7 RC1). 그러나 setupDiGetClassDev + SetupDiEnumDeviceInfo를 사용하면 유효한 Deviceinfolist를 반환하지만 실제로 여러 가지 작업을 위해 SetupDiGetDeviceRegistryProperty를 사용하여 쿼리 할 수 ​​있다고 말할 수 있습니다. 그러나 SetupDiGetDeviceInterfaceDetail을 사용하거나 사용하려고 시도하면 나를 벗어나 다시 시작하게됩니다. –

0

문제는 SetupDiGetClassDevs가 호출되는 방법부터 시작됩니다.

당신이 장치 경로를 얻기 위해 찾는 경우는, SetupDiGetClassDevs는 MS 도움말이 포인터 말한다 ClassGuid에서 잘못된 GUID를 지정하면 오류 259와 함께 실패 SetupDiGetClassDevs (& GUID_DEVINTERFACE_USB_DEVICE ,,,)

SetupDiEnumDeviceInterfaces를 사용 장치 설치 클래스 또는 장치 인터페이스 클래스의 GUID

포함 파일 devguid.h에는 GUID_DEVCLASS 값 집합이 들어 있습니다. 이것은 필요한 GUID_DEVINTERFACE_ * 값과 동일하지 않습니다.

GUID_DEVINTERFACE_ * 값을 찾을 수있는 ksuuids.h가 포함 된 #include를 사용하십시오.

내 웹 사이트에서 USB 장치를 올바르게 열거하는 데 도움이되는 몇 가지 소스 코드에 대한 자세한 설명이 있습니다.

은 쓸모없는 주제를

관련 문제