2012-05-10 4 views
0

내 응용 프로그램은 vendor-id, device-id 등과 같은 특정 정보가있는 USB 키에서 실행됩니다.실행 파일이있는 드라이브에 대한 정보를 얻는 방법 C++

libusb를 사용해 보았지만 제대로 작동시키지 못했지만 정보를 얻기 위해 올바른 USB 드라이브를 찾을 수 있습니까?

코드가 크로스 플랫폼으로되어 있기를 바랍니다. 그래서 내가 먼저 libusb를 선택합니다.

편집 : 프로그램 (usbviewer)을 발견

가 연결된 경우 모든 USB 포트와 드라이브의 특정 정보를 열거합니다.

나는 리눅스의 소스를 읽었으며, 정보는/proc/bus/usb/devices에서 직접 추출되었다. 아주 간단하다.

windows에서 usb 노드 연결 정보를 얻으려면 데이터 구조 (허브 컨트롤러, 루트 허브, 포트 등을 열거 ...)에서 실제 정보를 얻기 전에 약 1000 줄이 필요합니다.

반대편에있는 libusb가 정보에 도달하기 전에 INF 파일을 생성하고 각 장치에 inf-wizard.exe를 통해 드라이버를 설치하도록 강요합니다 (Linux에서는 시도하지 않았 음).

편집 2 :

나는 윈도우, 리눅스 및 Mac OS X와 ​​장치 일련 번호를 얻을 수있는 방법 발견 (MAC OS X를 시도하지 않았다을하지만 리눅스처럼 작동합니다). Windows의 경우, GetVolumeInformation() 함수를 사용하여 Linux에서 FAT 파일 시스템의 드라이브 일련 번호를 읽습니다. FAT 버전에 따라 0x27 또는 0x43부터 시작하는 해당/dev/* 파일에서 4 바이트를 읽습니다.

그러나이 독서는 프로그램에없는 루트 액세스를 필요로하며 나에게 조금 신뢰할 수없는 것처럼 보입니다.

아이디어가 있으십니까?

+2

크로스 플랫폼은 플랫폼을 의미합니까? 아마 당신은 MVS에 신경 쓰지 않을 것입니다, 그래서 아마 일부 Windows 버전, Linux, OS X가 포함되어 있을까요? 기계적 인조 인간? IOS? –

+1

argc와 argv의 main() 인수를 취하면 첫 번째 인수는 항상 실행 파일의 명령을 가리키며 전체 경로 정보를 가리 킵니다. 거기에서 libusb –

+0

과 같은 것을 사용할 수 있습니다. Windows, Linux 및 OS X는 모바일 장치에서 사용되지 않습니다. 경로를 사용하여 libusb 데이터 구조 장치에 연결할 수 있습니까? – perelo

답변

0

나는 관심이있는 사람들에게 나를 맞는 해결책을 발견했다. Windows의 경우

:

나는 드라이브 문자를 알고 레지스트리에서 장치의 일련 번호 추출 : HKEY_LOCAL_MACHINE을 \ 시스템 \ mounteddevices를 \ DosDevices \ X :

UNIX 용

:

내가 얻을 /dev 파일에 df 명령을 입력 한 다음 /dev 파일에 해당하는 /sys/block의 링크를 읽습니다 (예 : 드라이브가/dev/sdb 인 경우 /sys/block/sdb의 링크를 읽음) serial은 l 6x 디렉토리를 거꾸로하여 링크가 가리키는 디렉토리에서 ocated.

희망이 있습니다.