2010-02-01 2 views
4

Windows에서 플로피 디스크와 플래시 디스크를 구별하는 API가 있다면 궁금합니다. A : \에 플래시 디스크를 연결할 수 있습니까? 많은 감사!C++에서 드라이버가 플로피 또는 이동식 플래시 디스크인지 판단하는 방법은 무엇입니까?

+0

여기를 참조하십시오 : http://stackoverflow.com/questions/1797128/programmatically-differentiating-between-usb-floppy-drive-and-usb-flash-drive-in – stephan

답변

0

드라이브에 할당 된 문자를 시스템 제어 어딘가에서 변경할 수 있으므로 플래시 디스크는 A :가 될 수 있습니다.

예를 들어 OS API를 사용하여 쿼리합니다. 플로피 디스크와 플래쉬 디스크를 구별하기에 충분해야하는 디스크의 크기.

0

플래시 디스크를 A :에 연결할 수 있지만 플로피 드라이브가없는 경우에만 가능합니다.
프로그램에서이 작업을 수행하는 방법에 대한 내용은 Defining an MS-DOS Device Name을 참조하십시오.

드라이브 문자에 QueryDosDevice을 사용하여 드라이브 문자가 플로피 장치에 매핑되는지 여부를 확인할 수 있습니다. 플로피 드라이브는 "\ Device \ Floppy0"또는 "\ Device \ Floppy1"을 반환합니다.

+0

'\ Device \ Floppy ' 이름은 (항상) USB 플로피 드라이브에 사용되지는 않습니다. – MSalters

+0

@MSalters : 글쎄, 그건 불행한 일이다. 정보 주셔서 감사합니다. –

+0

stephan의 loink보기 - 대답이 있습니다. – MSalters

2

먼저 드라이브 유형 (GetDriveTypeA)을 가져와야합니다. 결과가 DRIVE_REMOVABLE과 같으면 문자 드라이브는 이동식 플래시 드라이브의 플로피 (또는 다른 유형의 이동식 디스크)를 가리 킵니다. 결과가 DRIVE_REMOVABLE이 아니면 이동식 플래시 드라이브 일 가능성은 없습니다. 그러나 윈도우의 관점에서 볼 때 외장형 USB 하드 드라이브와 이동식 플래시 디스크에는 약간의 차이점이 있습니다 (유일한 차이점은 이동식 플래시 디스크에는 파티션 테이블이 없으므로 하나만 포함된다는 것입니다). 파티션 - 비록 내가 잘 모르겠지만).

어쨌든 DRIVE_REMOVABLE 유형의 경우 장치의 고급 속성을 쿼리해야합니다. 이를 위해, 먼저는 다음과 같이 somethink와 물리적 장치를 열 필요가 :

 

STORAGE_PROPERTY_QUERY Query; 
Query.PropertyId = StorageDeviceProperty; 
Query.QueryType = PropertyStandardQuery; 

bResult = DeviceIoControl(
    hDevice, // device handle 
    IOCTL_STORAGE_QUERY_PROPERTY, // info of device property 
    &Query, sizeof(STORAGE_PROPERTY_QUERY), // input data buffer 
    pDevDesc, pDevDesc->Size, // output data buffer 
    &dwOutBytes, // out's length 
    (LPOVERLAPPED)NULL 
    ); 

 

경우 : 오픈 성공

 

hDevice = CreateFileA("\\\\?\\X:", GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL) 
 

경우이 장치에 DeviceIoControl을 명령을 실행해야 pDevDesc-> BusType == BusTypeUsb이면 X : 이동식 플래시 드라이브를 가리 킵니다. 코드는 작동하지만 pDevDesc 매개 변수를 설정하려면 DeviceIoControl에 대한 설명서를 읽어야합니다. 문제가있는 경우 전체 코드를 제공 할 수 있습니다.

+0

아마도 USB 플로피 드라이브'pDevDesc-> BusType == BusTypeUsb'도 있습니다. – MSalters

+0

예, 질문은 usb 플로피 드라이브를 언급하지 않았습니다 : D – botismarius

관련 문제