⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dostorageenum.h

📁 Device IO Control StorageEnum.zip
💻 H
字号:

#if !defined(DO_STORAGE_ENUM_H__)
#define DO_STORAGE_ENUM_H__

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <winioctl.h>
#include <initguid.h>
#include <setupapi.h>

// IOCTL控制码
#define IOCTL_STORAGE_QUERY_PROPERTY   CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS)

// 存储设备的总线类型
typedef enum _STORAGE_BUS_TYPE {
    BusTypeUnknown = 0x00,
    BusTypeScsi,
    BusTypeAtapi,
    BusTypeAta,
    BusType1394,
    BusTypeSsa,
    BusTypeFibre,
    BusTypeUsb,
    BusTypeRAID,
    BusTypeMaxReserved = 0x7F
} STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE;

// 查询存储设备属性的类型
typedef enum _STORAGE_QUERY_TYPE {
    PropertyStandardQuery = 0,          // 读取描述
    PropertyExistsQuery,                // 测试是否支持
    PropertyMaskQuery,                  // 读取指定的描述
    PropertyQueryMaxDefined		        // 验证数据
} STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE;

// 查询存储设备还是适配器属性
typedef enum _STORAGE_PROPERTY_ID {
    StorageDeviceProperty = 0,			// 查询设备属性
    StorageAdapterProperty				// 查询适配器属性
} STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID;

// 查询属性输入的数据结构
typedef struct _STORAGE_PROPERTY_QUERY {
	STORAGE_PROPERTY_ID PropertyId;		// 设备/适配器
	STORAGE_QUERY_TYPE QueryType;		// 查询类型 
    UCHAR AdditionalParameters[1];		// 额外的数据(仅定义了象征性的1个字节)
} STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY;


// 查询属性输出的数据结构
typedef struct _STORAGE_DEVICE_DESCRIPTOR {
    ULONG Version;		// 版本
    ULONG Size;			// 结构大小
    UCHAR DeviceType;	// 设备类型
    UCHAR DeviceTypeModifier;	// SCSI-2额外的设备类型
    BOOLEAN RemovableMedia;		// 是否可移动
    BOOLEAN CommandQueueing;	// 是否支持命令队列
    ULONG VendorIdOffset;		// 厂家设定值的偏移
    ULONG ProductIdOffset;		// 产品ID的偏移
    ULONG ProductRevisionOffset;	// 产品版本的偏移
    ULONG SerialNumberOffset;		// 序列号的偏移
    STORAGE_BUS_TYPE BusType;		// 总线类型
    ULONG RawPropertiesLength;		// 额外的属性数据长度
    UCHAR RawDeviceProperties[1];	// 额外的属性数据(仅定义了象征性的1个字节)
} STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR;


// 函数
int GetDevicePath(LPGUID lpGuid, LPTSTR* pszDevicePath);
HANDLE OpenDevice(LPCTSTR pszDevicePath);
BOOL GetDriveGeometry(HANDLE hDevice, PDISK_GEOMETRY pGeometry);
BOOL GetDriveProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc);

#endif // !defined(DO_STORAGE_ENUM_H__)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -