因为要做个读取硬盘参数信息的控件,所以在网上找了不少代码,但是自己作为一个初学者在使用别人代码时,总会发现有各种各样的问题:
1. 需要的头文件未写明
2. 有些定义未给出
3. 代码的开发环境未明,导致编译时出现“XXXX“未定义
3. 添加的代码写在哪里不明确
以上这些情况对于初学者是很容易遇到的,所以这里整理了下。
以下是“读取硬盘序列号、型号、修订版本号”的完整代码(win32 C++控制台程序),开发环境:win XP SP2 + VC6.0
头文件:Struct_Def.h
// 其实以下的定义多数是来自高版本VC(我机器上是VS2010)的头文件:C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinIoCtl.h
typedef struct _DRIVERSTATUS {
BYTE bDriverError; // Error code from driver,
// or 0 if no error.
BYTE bIDEError; // Contents of IDE Error register.
// Only valid when bDriverError
// is SMART_IDE_ERROR.
BYTE bReserved[2]; // Reserved for future expansion.
DWORD dwReserved[2]; // Reserved for future expansion.
} DRIVERSTATUS, *PDRIVERSTATUS, *LPDRIVERSTATUS;
typedef struct _IDEREGS {
BYTE bFeaturesReg; // Used for specifying SMART "commands".
BYTE bSectorCountReg; // IDE sector count register
BYTE bSectorNumberReg; // IDE sector number register
BYTE bCylLowReg; // IDE low order cylinder value
BYTE bCylHighReg; // IDE high order cylinder value
BYTE bDriveHeadReg; // IDE drive/head register
BYTE bCommandReg; // Actual IDE command.
BYTE bReserved; // reserved for future use. Must be zero.
} IDEREGS, *PIDEREGS, *LPIDEREGS;
typedef struct _SENDCMDOUTPARAMS {
DWORD