DoStorageEnum.h
上传用户:posgewe
上传日期:2022-07-05
资源大小:164k
文件大小:2k
源码类别:

系统编程

开发平台:

Visual C++

  1. #if !defined(DO_STORAGE_ENUM_H__)
  2. #define DO_STORAGE_ENUM_H__
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. #include <winioctl.h>
  7. #include <objbase.h>
  8. #include <initguid.h>
  9. #include <setupapi.h>
  10. // IOCTL控制码
  11. #define IOCTL_STORAGE_QUERY_PROPERTY   CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)
  12. // 存储设备的总线类型
  13. typedef enum _STORAGE_BUS_TYPE {
  14.     BusTypeUnknown = 0x00,
  15.     BusTypeScsi,
  16.     BusTypeAtapi,
  17.     BusTypeAta,
  18.     BusType1394,
  19.     BusTypeSsa,
  20.     BusTypeFibre,
  21.     BusTypeUsb,
  22.     BusTypeRAID,
  23.     BusTypeMaxReserved = 0x7F
  24. } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;
  25. // 查询存储设备属性的类型
  26. typedef enum _STORAGE_QUERY_TYPE {
  27.     PropertyStandardQuery = 0,          // 读取描述
  28.     PropertyExistsQuery,                // 测试是否支持
  29.     PropertyMaskQuery,                  // 读取指定的描述
  30.     PropertyQueryMaxDefined         // 验证数据
  31. } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;
  32. // 查询存储设备还是适配器属性
  33. typedef enum _STORAGE_PROPERTY_ID {
  34.     StorageDeviceProperty = 0, // 查询设备属性
  35.     StorageAdapterProperty // 查询适配器属性
  36. } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;
  37. // 查询属性输入的数据结构
  38. typedef struct _STORAGE_PROPERTY_QUERY {
  39. STORAGE_PROPERTY_ID PropertyId; // 设备/适配器
  40. STORAGE_QUERY_TYPE QueryType; // 查询类型 
  41.     UCHAR AdditionalParameters[1]; // 额外的数据(仅定义了象征性的1个字节)
  42. } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;
  43. // 查询属性输出的数据结构
  44. typedef struct _STORAGE_DEVICE_DESCRIPTOR {
  45.     ULONG Version; // 版本
  46.     ULONG Size; // 结构大小
  47.     UCHAR DeviceType; // 设备类型
  48.     UCHAR DeviceTypeModifier; // SCSI-2额外的设备类型
  49.     BOOLEAN RemovableMedia; // 是否可移动
  50.     BOOLEAN CommandQueueing; // 是否支持命令队列
  51.     ULONG VendorIdOffset; // 厂家设定值的偏移
  52.     ULONG ProductIdOffset; // 产品ID的偏移
  53.     ULONG ProductRevisionOffset; // 产品版本的偏移
  54.     ULONG SerialNumberOffset; // 序列号的偏移
  55.     STORAGE_BUS_TYPE BusType; // 总线类型
  56.     ULONG RawPropertiesLength; // 额外的属性数据长度
  57.     UCHAR RawDeviceProperties[1]; // 额外的属性数据(仅定义了象征性的1个字节)
  58. } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;
  59. // 函数
  60. int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath);
  61. HANDLE OpenDevice(LPCTSTR pszDevicePath);
  62. BOOL GetDriveGeometry(HANDLE hDevice, PDISK_GEOMETRY pGeometry);
  63. BOOL GetDriveProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc);
  64. #endif // !defined(DO_STORAGE_ENUM_H__)