获取一个路径所在存储设备的属性

来源:互联网 发布:软件测试资格认证 编辑:程序博客网 时间:2024/06/06 15:02
BOOLGetPropertyOfDeviceOrAdapter(IN LPTSTR lpFileName){STORAGE_BUS_TYPERet= BusTypeUnknown; TCHARFileSymName[MAX_PATH * 2]= {0}; TCHARVolumeSymName[10]= {0}; HANDLEhVolume= INVALID_HANDLE_VALUE;STORAGE_PROPERTY_QUERYQuery; STORAGE_DEVICE_DESCRIPTORdevDescriptor= {0}; BOOLbResult= FALSE; DWORDdwBytesReturned= 0;__try{ZeroMemory(&Query, sizeof(STORAGE_PROPERTY_QUERY));if (!lpFileName){printf("[GetPropertyOfDeviceOrAdapter] : input parameter error \n");__leave;}_tcscat_s(FileSymName, MAX_PATH * 2, _T("\\\\.\\"));_tcscat_s(FileSymName, MAX_PATH * 2, lpFileName);CopyMemory(VolumeSymName, FileSymName, 5 * sizeof(TCHAR));_tcscat_s(VolumeSymName, 10, _T(":"));hVolume = CreateFile(VolumeSymName,SYNCHRONIZE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hVolume == INVALID_HANDLE_VALUE){printf("[GetPropertyOfDeviceOrAdapter] : CreateFile failed. (%d) \n", GetLastError());__leave;}Query.PropertyId = StorageDeviceProperty;Query.QueryType = PropertyStandardQuery;devDescriptor.Size = sizeof(STORAGE_DEVICE_DESCRIPTOR);bResult = DeviceIoControl(hVolume,IOCTL_STORAGE_QUERY_PROPERTY,&Query,sizeof(STORAGE_PROPERTY_QUERY),&devDescriptor,devDescriptor.Size,&dwBytesReturned,NULL);if (!bResult){printf("[GetPropertyOfDeviceOrAdapter] : DeviceIoControl failed. (%d) \n", GetLastError());__leave;}Ret = devDescriptor.BusType;}__finally{if (hVolume != INVALID_HANDLE_VALUE)CloseHandle(hVolume);}return Ret;}

0 0
原创粉丝点击