2010-05-18 2 views

답변

0

GetDriveType

스택 오버플로는 GetDriveType을 거부합니다. 그러나 스택 오버플로는 GetDriveType과 함께 스택 오버플로에 대한 불만을 수용합니다.

+0

감사합니다. GetDriveType에 의해 반환 된 DRIVE_REMOVABLE은 (는) 외부 포트에 연결된 장치와 다른 이동식 미디어를 의미합니다. SetupDiGetDeviceRegistryProperty()가 내 드라이브에 대해 CM_DEVCAP_REMOVABLE을 반환하는지 확인하려고합니다. 그러나 드라이브 문자와 SetupDiGetDeviceRegistryProperty()가 예상하는 입력 사이를 연결할 수 없습니다. – user15071

+0

또한 GetDriveType을 사용하지만 일부 USB 스틱/드라이브가 드라이브를 고정 드라이브로보고 할 수 있음을주의하십시오. Freecom HDD USB 전원을 사용하는 하드 드라이브 (IPod와 비슷한 크기)는 고정 드라이브로보고됩니다. (아마 모든 USB 드라이버에 따라 다릅니다). – Patrick

+0

Win32는 드라이버에 따라 다릅니다. 드라이버는 장치 하드웨어 및 장치 펌웨어에 따라 다를 수 있습니다 (일부 장치는 드라이버를 제공하고 나중에 실제 인터페이스 만 제공하기 위해 CD 드라이브로 가장합니다). 드라이버는 BIOS에 의존 할 수 있으며, BIOS는 진실을 말하고 있거나 그렇지 않을 수도 있습니다. 어쨌든, SetupDiGetDeviceRegistryProperty()가 반환 할 것으로 예상 할 필요가 있다면 아마도 SetupDiGetDeviceRegistryProperty()를 호출하여 찾아야 할 것입니다. –

2

볼륨을 열고 IOCTL_STORAGE_QUERY_PROPERTY를 실행할 수 있습니다. 이것은 RemovableMedia 속성을 가진 STORAGE_DEVICE_DESCRIPTOR를 반환합니다. CM_DEVCAP_REMOVABLE (100 % 확신 할 수 없음)과 동일하다고 생각합니다. 적어도 "고정"USB 플래시 드라이브를 이동식 드라이브로보고합니다.

HANDLE hFile = CreateFile("\\\\.\\Z:", FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); 
if(hFile != INVALID_HANDLE_VALUE) 
{ 
    STORAGE_PROPERTY_QUERY StoragePropertyQuery; 
    StoragePropertyQuery.PropertyId = StorageDeviceProperty; 
    StoragePropertyQuery.QueryType = PropertyStandardQuery; 
    BYTE Buffer[1024]; 
    if(DeviceIoControl(hFile, IOCTL_STORAGE_QUERY_PROPERTY, &SotragePropertyQuery, sizeof(STORAGE_PROPERTY_QUERY), Buffer, 1024, &BytesReturned, NULL)) 
    { 
     PSTORAGE_DEVICE_DESCRIPTOR StorageDeviceDescriptor = (PSTORAGE_DEVICE_DESCRIPTOR)Buffer; 
     if(StorageDeviceDescriptor->RemovableMedia) 
     { 
      printf("Z: IS removable\n"); 
     } 
     else 
     { 
      printf("Z: is NOT removable\n"); 
     } 
    } 
    CloseHandle(hFile); 
    hFile = INVALID_HANDLE_VALUE; 
} 
+0

흥미 롭습니다. MSDN은 RemovableMedia는 이동식 미디어가 아닌 이동식 미디어를 의미하므로 GetDriveType처럼 질문자가 필요로하는 것을 제공하지 못합니다. 좋습니다, 그게 내가 너무 많이 읽는 것입니다. –

+0

이 컨텍스트에서는 볼륨이 미디어라고 생각합니다. 볼륨이 상주하는 물리 디스크 또는 드라이브가 장치입니다. 나는 볼륨이 이동식이면 그 장치가 제거 가능해야합니다 같아요. 나는이 모든 것이 어떻게 작동 할 지 모르겠다. 그러나 이것은 나의 관찰이었다. – Luke

+0

플로피 디스크는 플로피 드라이브가 없어도 분리 가능합니다. 이전에는 Jazz와 같은 무언가라는 superfloppies가있었습니다. 크기는 몇 기가 바이트의 이동식 미디어가있는 고정식 드라이브였습니다. 어쩌면이 맥락에서 RemovableMedia는 이동식 장치를 의미하며, 장치가 이동식이면 해당 장치도 이동식이어야합니다. 이를 위해서는 MSDN을 자주 읽어야합니다. –

관련 문제