2010-07-01 70 views

回答

0

您可以使用GetDriveType获得基本的接口类型(如:可移动设备,CDROM,RAMDisk中)驱动器号,也看到了最后的评论在该页面的底部可移动设备上多一点信息。还检查了SetupDiGetDeviceRegistryPropertyDeviceIoControl

她是我能拿出最好的例子(未经测试,因为我没有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 2010-07-01 12:52:31

+0

请查看底部的注释和/或SetupDiGetDeviceRegistryProperty中的USB驱动器,DeviceIoControl也会给出一些关于删除策略的信息等。 – Necrolis 2010-07-01 12:54:25

+0

你能告诉我一个驱动器号的示例 – user198725878 2010-07-01 13:07:38