2010-07-01 3 views

ответ

0

Вы можете использовать GetDriveType, чтобы получить базовый тип интерфейса (например, съемное устройство, CDROM, RAMDisk) для буквы диска. Также см. Окончательный комментарий внизу этой страницы для получения дополнительной информации об съемных устройствах. Также проверьте SetupDiGetDeviceRegistryProperty и DeviceIoControl

Ее лучший пример, который я могу придумать (непроверенных, как я не имею WDK/DDK)

bool IsUSBDevice(const char* szDrivePath, bool& bRemovable) 
{ 
    if(GetDriveType(szDrivePath) != DRIVE_REMOVABLE) 
     return false; 

    HANDLE hDevice = CreateFile(szDrivePath,0,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); 
    if(hDevice == INVALID_HANDLE_VALUE) 
     return false; 

    STORAGE_PROPERTY_QUERY pQuery = {0}; 
    pQuery.PropertyId = StorageDeviceProperty; 
    pQuery.QueryType = PropertyStandardQuery; 

    STORAGE_DEVICE_DESCRIPTOR pDeviceDesc = {0}; 
    pDeviceDesc.Size = sizeof(pDeviceDesc); 
    DWORD dwWritten = 0; 
    if(DeviceIoControl(hDevice,IOCTL_STORAGE_QUERY_PROPERTY,&pQuery,sizeof(STORAGE_PROPERTY_QUERY),pDeviceDesc,sizeof(pDeviceDesc),&dwWritten,NULL)) 
    { 
     CloseHandle(hDevice); 
     return ((bRemovable = pDeviceDesc.RemovableMedia) && pDeviceDesc.BusType == BusTypeUsb); 
    } 
    else 
     CloseHandle(hDevice); 

    return false; 
} 
+0

привет ... Мне нужно фильтровать устройства USB тип интерфейса – user198725878

+0

см. комментарии внизу и/или SetupDiGetDeviceRegistryProperty для дисков usb, DeviceIoControl также предоставит некоторую информацию о политике удаления и т. д. – Necrolis

+0

вы можете показать мне пример с буквой диска – user198725878

Смежные вопросы