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

📄 readdiskinfo.h

📁 windows下识别usb逻辑盘的程序
💻 H
字号:
#define MAX_LEN 512

#define  DFP_SEND_DRIVE_COMMAND   0x0007c084
//#define  DFP_SEND_DRIVE_COMMAND   CTL_CODE(IOCTL_DISK_BASE, 0x0021, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define  DFP_RECEIVE_DRIVE_DATA   0x0007c088
//#define  DFP_RECEIVE_DRIVE_DATA   CTL_CODE(IOCTL_DISK_BASE, 0x0022, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define  FILE_DEVICE_SCSI           0x0000001B
#define  IOCTL_SCSI_MINIPORT_IDENTIFY      ((FILE_DEVICE_SCSI << 16) + 0x0501)
#define  IOCTL_SCSI_MINIPORT        0x0004D008          //  see NTDDSCSI.H for definition
  
// ATA/ATAPI指令
#define  IDE_ATA_IDENTIFY           0xEC     // ATA的ID指令(IDENTIFY DEVICE)
   
// IDE命令寄存器
typedef struct _IDEREGS
{
    BYTE bFeaturesReg;       // 特征寄存器(用于SMART命令)
    BYTE bSectorCountReg;    // 扇区数目寄存器
    BYTE bSectorNumberReg;   // 开始扇区寄存器
    BYTE bCylLowReg;         // 开始柱面低字节寄存器
    BYTE bCylHighReg;        // 开始柱面高字节寄存器
    BYTE bDriveHeadReg;      // 驱动器/磁头寄存器
    BYTE bCommandReg;        // 指令寄存器
    BYTE bReserved;          // 保留
} IDEREGS, *PIDEREGS, *LPIDEREGS;
  
// 从驱动程序返回的状态
typedef struct _DRIVERSTATUS
{
    BYTE bDriverError;      // 错误码
    BYTE bIDEStatus;        // IDE状态寄存器
    BYTE bReserved[2];      // 保留
    DWORD dwReserved[2];    // 保留
} DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;
  
  
// IDE设备IOCTL输入数据结构
typedef struct _SENDCMDINPARAMS
{
    DWORD cBufferSize;      // 缓冲区字节数
    IDEREGS irDriveRegs;    // IDE寄存器组
    BYTE bDriveNumber;      // 驱动器号
    BYTE bReserved[3];      // 保留
    DWORD dwReserved[4];    // 保留
    BYTE bBuffer[1];        // 输入缓冲区(此处象征性地包含1字节)
} SENDCMDINPARAMS, *PSENDCMDINPARAMS, *LPSENDCMDINPARAMS;
  
// IDE设备IOCTL输出数据结构
typedef struct _SENDCMDOUTPARAMS
{
    DWORD cBufferSize;          // 缓冲区字节数
    DRIVERSTATUS DriverStatus;  // 驱动程序返回状态
    BYTE bBuffer[1];            // 输入缓冲区(此处象征性地包含1字节)
} SENDCMDOUTPARAMS, *PSENDCMDOUTPARAMS, *LPSENDCMDOUTPARAMS;
  
// IDE的ID命令返回的数据
// 共512字节(256个WORD),这里仅定义了一些感兴趣的项(基本上依据ATA/ATAPI-4)
typedef struct _IDINFO
{
    USHORT  wGenConfig;                 // WORD 0: 基本信息字
    USHORT  wNumCyls;                   // WORD 1: 柱面数
    USHORT  wReserved2;                 // WORD 2: 保留
    USHORT  wNumHeads;                  // WORD 3: 磁头数
    USHORT  wReserved4;                 // WORD 4: 保留
    USHORT  wReserved5;                 // WORD 5: 保留
    USHORT  wNumSectorsPerTrack;        // WORD 6: 每磁道扇区数
    USHORT  wVendorUnique[3];           // WORD 7-9: 厂家设定值
    CHAR    sSerialNumber[20];          // WORD 10-19:序列号
    USHORT  wBufferType;                // WORD 20: 缓冲类型
    USHORT  wBufferSize;                // WORD 21: 缓冲大小
    USHORT  wECCSize;                   // WORD 22: ECC校验大小
    CHAR    sFirmwareRev[8];            // WORD 23-26: 固件版本
    CHAR    sModelNumber[40];           // WORD 27-46: 内部型号
    USHORT  wMoreVendorUnique;          // WORD 47: 厂家设定值
    USHORT  wReserved48;                // WORD 48: 保留
    struct {
        USHORT  reserved1:8;
        USHORT  DMA:1;                  // 1=支持DMA
        USHORT  LBA:1;                  // 1=支持LBA
        USHORT  DisIORDY:1;             // 1=可不使用IORDY
        USHORT  IORDY:1;                // 1=支持IORDY
        USHORT  SoftReset:1;            // 1=需要ATA软启动
        USHORT  Overlap:1;              // 1=支持重叠操作
        USHORT  Queue:1;                // 1=支持命令队列
        USHORT  InlDMA:1;               // 1=支持交叉存取DMA
    } wCapabilities;                    // WORD 49: 一般能力
    USHORT  wReserved1;                 // WORD 50: 保留
    USHORT  wPIOTiming;                 // WORD 51: PIO时序
    USHORT  wDMATiming;                 // WORD 52: DMA时序
    struct {
        USHORT  CHSNumber:1;            // 1=WORD 54-58有效
        USHORT  CycleNumber:1;          // 1=WORD 64-70有效
        USHORT  UnltraDMA:1;            // 1=WORD 88有效
        USHORT  reserved:13;
    } wFieldValidity;                   // WORD 53: 后续字段有效性标志
    USHORT  wNumCurCyls;                // WORD 54: CHS可寻址的柱面数
    USHORT  wNumCurHeads;               // WORD 55: CHS可寻址的磁头数
    USHORT  wNumCurSectorsPerTrack;     // WORD 56: CHS可寻址每磁道扇区数
    USHORT  wCurSectorsLow;             // WORD 57: CHS可寻址的扇区数低位字
    USHORT  wCurSectorsHigh;            // WORD 58: CHS可寻址的扇区数高位字
    struct {
        USHORT  CurNumber:8;            // 当前一次性可读写扇区数
        USHORT  Multi:1;                // 1=已选择多扇区读写
        USHORT  reserved1:7;
    } wMultSectorStuff;                 // WORD 59: 多扇区读写设定
    ULONG  dwTotalSectors;              // WORD 60-61: LBA可寻址的扇区数
    USHORT  wSingleWordDMA;             // WORD 62: 单字节DMA支持能力
    struct {
        USHORT  Mode0:1;                // 1=支持模式0 (4.17Mb/s)
        USHORT  Mode1:1;                // 1=支持模式1 (13.3Mb/s)
        USHORT  Mode2:1;                // 1=支持模式2 (16.7Mb/s)
        USHORT  Reserved1:5;
        USHORT  Mode0Sel:1;             // 1=已选择模式0
        USHORT  Mode1Sel:1;             // 1=已选择模式1
        USHORT  Mode2Sel:1;             // 1=已选择模式2
        USHORT  Reserved2:5;
    } wMultiWordDMA;                    // WORD 63: 多字节DMA支持能力
    struct {
        USHORT  AdvPOIModes:8;          // 支持高级POI模式数
        USHORT  reserved:8;
    } wPIOCapacity;                     // WORD 64: 高级PIO支持能力
    USHORT  wMinMultiWordDMACycle;      // WORD 65: 多字节DMA传输周期的最小值
    USHORT  wRecMultiWordDMACycle;      // WORD 66: 多字节DMA传输周期的建议值
    USHORT  wMinPIONoFlowCycle;         // WORD 67: 无流控制时PIO传输周期的最小值
    USHORT  wMinPOIFlowCycle;           // WORD 68: 有流控制时PIO传输周期的最小值
    USHORT  wReserved69[11];            // WORD 69-79: 保留
    struct {
        USHORT  Reserved1:1;
        USHORT  ATA1:1;                 // 1=支持ATA-1
        USHORT  ATA2:1;                 // 1=支持ATA-2
        USHORT  ATA3:1;                 // 1=支持ATA-3
        USHORT  ATA4:1;                 // 1=支持ATA/ATAPI-4
        USHORT  ATA5:1;                 // 1=支持ATA/ATAPI-5
        USHORT  ATA6:1;                 // 1=支持ATA/ATAPI-6
        USHORT  ATA7:1;                 // 1=支持ATA/ATAPI-7
        USHORT  ATA8:1;                 // 1=支持ATA/ATAPI-8
        USHORT  ATA9:1;                 // 1=支持ATA/ATAPI-9
        USHORT  ATA10:1;                // 1=支持ATA/ATAPI-10
        USHORT  ATA11:1;                // 1=支持ATA/ATAPI-11
        USHORT  ATA12:1;                // 1=支持ATA/ATAPI-12
        USHORT  ATA13:1;                // 1=支持ATA/ATAPI-13
        USHORT  ATA14:1;                // 1=支持ATA/ATAPI-14
        USHORT  Reserved2:1;
    } wMajorVersion;                    // WORD 80: 主版本
    USHORT  wMinorVersion;              // WORD 81: 副版本
    USHORT  wReserved82[6];             // WORD 82-87: 保留
    struct {
        USHORT  Mode0:1;                // 1=支持模式0 (16.7Mb/s)
        USHORT  Mode1:1;                // 1=支持模式1 (25Mb/s)
        USHORT  Mode2:1;                // 1=支持模式2 (33Mb/s)
        USHORT  Mode3:1;                // 1=支持模式3 (44Mb/s)
        USHORT  Mode4:1;                // 1=支持模式4 (66Mb/s)
        USHORT  Mode5:1;                // 1=支持模式5 (100Mb/s)
        USHORT  Mode6:1;                // 1=支持模式6 (133Mb/s)
        USHORT  Mode7:1;                // 1=支持模式7 (166Mb/s) ???
        USHORT  Mode0Sel:1;             // 1=已选择模式0
        USHORT  Mode1Sel:1;             // 1=已选择模式1
        USHORT  Mode2Sel:1;             // 1=已选择模式2
        USHORT  Mode3Sel:1;             // 1=已选择模式3
        USHORT  Mode4Sel:1;             // 1=已选择模式4
        USHORT  Mode5Sel:1;             // 1=已选择模式5
        USHORT  Mode6Sel:1;             // 1=已选择模式6
        USHORT  Mode7Sel:1;             // 1=已选择模式7
    } wUltraDMA;                        // WORD 88:  Ultra DMA支持能力
    USHORT    wReserved89[167];         // WORD 89-255
} IDINFO, *PIDINFO;
  
typedef struct 
{
	char Drv_Name[20];
	BYTE Drv_Info[64];
	int  Drv_attach;//0--Master/master 1-master/slave  2-slave/master 3-slave/slave
	UINT Drv_Kind;
}DRIVERINFO;

int IDE_Num;
int Drv_Num;
DRIVERINFO Driver[26];

HANDLE hDevice;
BYTE Section[64];
BYTE Par_Section[64];
BYTE luoji_Section[64];

HANDLE OpenDevice(LPCTSTR filename);
void CloseDevice();
void Output_Data(BYTE *Buf,int ii);
void GetDriverInfomation();
void RecogDiskInfo(BYTE *src,int HardDiskNO);
void ReconDiskKind();
BOOL IdentifyDevice(HANDLE hDevice, PIDINFO pIdInfo);
void GetIDENum();

⌨️ 快捷键说明

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