2009-11-25 2 views
7

Windows (XP-7)에서 C++의 USB 플로피 드라이브와 USB 플래시 드라이브를 프로그램 방식으로 구별하는 안정적인 방법이 있습니까?Windows에서 USB 플로피 드라이브와 USB 플래시 드라이브를 프로그램 방식으로 구별

현재 Win32_LogicalDisk 인스턴스가 발견되면 WMI를 사용하여 업데이트를 얻은 다음 LogicalDisk 개체의 DriveType 특성을 사용하여 기본 형식을 파악합니다. 플로피 드라이브와 USB 플래시 드라이브가 모두 DriveType DRIVE_REMOVABLE 인 것을 제외하고는 (플로피와 플래시를 구분하기 위해) 장치를 핫 플러그 ​​할 수 있는지 알아 내기 위해 IOCTL_STORAGE_GET_HOTPLUG_INFO 인터페이스를 사용하고 있습니다. 그것이 플로피 드라이브가 아니라 플로피 디스크라는 것을 의미하는 교장 선생님. 다시 말하지만 내부 플로피 드라이브의 경우이 방법이 상당히 효과적이라고 생각합니다 (정보를 얻으려면 WDK API와 WMI를 모두 사용하는 것이 좋습니다).하지만 불행히도 USB 플로피 드라이브는 많은 시간 동안 핫 플러그가 가능하므로 플래시와 USB 플로피 드라이브를 구분할 명확한 방법이 없습니다. 나는 일 수 있다는 것을 알고 있습니다. 예약 된 드라이브 A : 또는 B (편집 : 플로피 드라이브가 확실히있는 경우에만 - 관련 항목 : MS-KB: How to change drive letter assignments in Windows XP 참조)에 매핑되어 있는지 또는 설명을보고 있는지 확인하고 싶습니다. 정말 조금 더 안정적인 걸 좋아해.

오랜 설명에 대해 미안하지만 분명히하고 싶었습니다! 감사합니다.

+1

A : 및 B :는 floppies_에 대해 _reserved입니까? 출처? – MSalters

+1

Windows XP에서 [MS-KB : Windows XP에서 드라이브 문자 할당을 변경하는 방법] (http://support.microsoft.com/kb/307844)에서이 부분을 구할 수 있지만 그 내용도 나와 있습니다. , 컴퓨터에 플로피 드라이브가 없으면 다른 드라이브에도 사용할 수 있습니다. 틀림없이 잘못된 이름이며 플로피 드라이브인지 여부를 나타내는 것은 아닙니다. 질문을 조금 더 명확하게하기 위해 다시 말하겠습니다. – user82116

+0

아, 그건 운전자를 수동으로 변경할 때의 사용자 관점에서입니다. 그렇다면 OS 관점에서 생각하고있었습니다. – MSalters

답변

5

Win32_LogicalDisk.MediaType을 사용해 보셨습니까? 플로피 디스크에 대한 특정 열거 형을 가지고 있습니다. 드라이브에 디스크가없는 경우 시도하십시오.

+0

다른 누군가가 이것을 필요로하는 경우, 내 테스트에서 미디어가 없을 때 대략적인 미디어 유형 (USB 플로피 대 플래시 드라이브에 대해 충분히 좋은)을 올바르게 반환하지만, [docs] (http://msdn.microsoft.com/en-us/library/aa394173%28VS.85%29.aspx) : "Win32_LogicalDisk.Media Type : 현재 논리 드라이브에있는 미디어 유형입니다.이 값은 다음 중 하나입니다. Winioctl.h에 정의 된 MEDIA_TYPE 열거 형 값입니다. 현재 드라이브에 미디어가 없으면 이동식 드라이브의 값이 정확하지 않을 수 있습니다. " – user82116

+0

물론 "드라이브에 미디어 없음"이라는 상황은 미디어로드 드라이브이므로 USB 플래시 드라이브가 아니라는 것을 의미합니다. – MSalters

+0

아래 내 답장을 참조하십시오. 또한 많은 USB 플래시 디스크는 스스로를 "이동식 미디어"로 선언하고 "드라이브가없는 미디어"로 시작합니다 (그리고 명령을 수락 할 준비가되면 미디어에 신호를 보냅니다) – Boris

4

크기 속성 (USB> 1.4MB)을 사용할 수 있습니다. 언제든지 1.4MB 플래시 드라이브를 만날 가능성이별로 없습니다.

+0

플로피 포맷이 일본 밖에서 흔하지 않다고 생각 하긴하지만, 2.88 MB로하면 좋을 것 같습니다. – MSalters

+0

최대 750MB를 지원하는 모든 Zip 드라이브가 플로피 디스크로 간주되지 않습니다. –

5

USB 레벨에서는 기존의 디스크 온 디스크와 USB 플로피를 구별 할 수있는 방법이 없습니다. 즉, 창 자체는 무엇인지 확실하게 말할 수 없습니다.

수집 할 수있는 몇 가지 힌트가 있습니다. 플로피는 다음과 같아야합니다. a. 대량 저장 프로토콜 CBI/CB b. SCSI UFI

그러나 USB 장치의 세계에서 모든 사람이 원하는대로 수행합니다. 유일한 테스트는 "창에서 작동합니까?"입니다. 그리고 Windows는 이동식 미디어가 설정된 USB 장치와 기존의 플로피 크기가 있으면 플로피로 간주하므로 크기를 확인합니다.

"실제"플로피에 대해서는 말할 수 없지만 USB가 연결된 상태에서는 확실한 방법이 없습니다.

3

확인할 수있는 확실한 속성은 IOCTL_DISK_GET_DRIVE_GEOMETRY입니다. 이것은 (다른 것들 사이에서) MEDIA_TYPE을 얻습니다. RemovableMediaFixedMedia을 제외한 모든 항목은 플로피입니다.