2009-04-06 8 views
2

많은 USB 장치에는 고유 한 일련 번호 (실제로는 유니 코드 문자열)가 들어 있으며 호스트는 16 비트 공급 업체 및 제품 ID 번호와 함께 사용하여 고유 한 일련 번호 장치.Windows에서 USB 키보드의 일련 번호 검색

저는 시스템에 연결된 모든 USB 휴먼 인터페이스 장치의 목록을 표시 할 수있는 Windows 응용 프로그램을 작성하는 방법을 알아 내려고하고 있습니다. 목록에는 시스템 키보드를 포함하여 각 HID에 대해 하나의 행이 있습니다. 목록에 공급 업체 ID, 제품 ID 및 일련 번호 열이 있습니다.

GUID가 HidD_GetHidGuidSetupDiGetClassDevs을 호출하고 SetupDiEnumDeviceInterfaces을 반복적으로 호출하여 결과를 반복함으로써 USB HID 목록을 가져올 수 있습니다. 그런 다음 SetupDiGetDeviceInterfaceDetail으로 전화하여 CreateFile으로 열 수있는 각 장치의 경로를 가져올 수 있습니다. 시스템 키보드에 대해 읽거나 쓰기 권한을 요청하지 않도록주의해야합니다. 거기에서 HidD_GetAttributes을 호출하여 공급 업체 및 제품 ID 번호를 얻을 수 있습니다.

일련 번호 문자열을 검색하는 방법을 알아 내는데 어려움이 있습니다. 이 문제에 대한 솔루션을 검색 할 때 USB 대용량 저장 장치의 일련 번호를 얻는 방법에 대한 정보는 많이 있지만 다른 USB 장치 유형에는 적용되지 않을 수 있습니다. 일련 번호 문자열을 검색하는 일반적인 방법이나 HID 관련 방법을 발견하게되어 기쁩니다.

나는 libusb의 Win32에서 포트가 너무 많은 문제없이 관리 할 수있는 느낌이 있지만, 불행하게도 나는 그런 언급 된 기능이 포함 된 setupapihid DLL을 같은 Windows와 함께 라이브러리에만 의존하는 솔루션이 필요합니다 위.

모든 의견을 보내 주시면 대단히 감사하겠습니다.

답변

3

DDK와 함께 제공되는 USBVIew 소스 코드를 사용해 보셨습니까? USBView 도구는 USB 장치의 일련 번호를 표시하며 원본은 DDK와 함께 제공됩니다.

0

Hid 키보드의 입력 레코드, 출력 레코드 및 기능 레코드의 HID 정의에 대한 문서를 검색해 보았습니다. 이렇게하면 HID를 통해 키보드를 가져올 수있는 "물건"목록이 표시됩니다.

또한 HID 레코드 정의를 소프트웨어로 열거 할 수 있음을 알고 있습니다. 1 년 전과 비슷한 일을했지만, 머리 꼭대기에서 세부 사항을 기억할 수는 없습니다. 그렇게하면 키보드 USB 클래스가 표준 인터페이스로 게시하는 것을 볼 수 있습니다.

나는 당신에게 당신이 찾고있는 것을 발견 할 수있는 몇 가지 지침을 얻을 수 있기를 바랍니다. 미안 나는 더 정밀 할 수 없었다!

+0

불행히도 USB 문자열 설명자는 HID 입력 보고서 또는 출력 보고서 또는 기능 보고서가 아닙니다. 그래도 고마워! – zaphod

0

나는이 책을 추천한다 USB Complete. 4 장 열거 : 호스트에 대한 장치 학습 방법에는 필요한 정보가 있습니다.

This page에는 정보에 대한 많은 링크가 있으며 사용자가 사용할 수있는 라이브러리 및 유틸리티에 대한 링크가 있습니다.

+0

그것은 훌륭한 책입니다 - 제 3 판 사본을 소유하고 있습니다. 나는이 책을 읽지 않았다하더라도이 질문을하는 것조차 결코 얻지 못했을 것입니다. 문제의 챕터는 내가 검색하려고하는 정보를 실제로 언급하지만 Windows 응용 프로그램에서 정보를 얻는 방법을 설명하지는 않습니다. – zaphod

4

HID.dll은 위에서 설명한대로 CreateFile에서 얻은 핸들을 사용하여 정확히 원하는대로 수행하는 HidD_GetSerialNumberString이라는 함수를 정의합니다. 그냥 밖으로 시도하고 그것을 잘 작동합니다.또한 장치 설명자에서 참조 된 다른 문자열 설명자를 검색하는 HidD_GetManufacturerStringHidD_GetProductString 함수가 있으며 인덱스가 지정된 임의의 문자열 설명자를 얻기 위해 HidD_GetIndexedString조차 있습니다 (아마도 HID 설명자가 문자열 설명자 색인을 포함 할 수 있기 때문일 수 있습니다). 나는 지금 바보 같아 보인다. 대답은이 모든 시간 내 코 밑에 있었다.

시간을내어 읽고 질문에 답변 해 주셔서 감사합니다. 꽤 유망한 소리가 나기 때문에 Alphaneo의 대답을 받아 들일 것입니다. 실제로이 대답을 발견했을 때 DDK가 다운로드되기를 기다리고있었습니다.

0

GetVolumeInformation을 사용하면 연결된 하드웨어의 일련 번호를 가져올 수 있습니다.