windows c语言 sata 序列号,【Delphi】获取IDE/SATA硬盘序列号
网上有这种代码了,只是因为写的较早,有些地方写的不那么言简意赅,而且在XE后的版本中有问题(因为Unicode字符的关系)
下面是精简修改过的代码,只取第一块硬盘的序列号,Win7 + XE 测试通过。需要先安装JwApi函数库,因为有些结构体在库中有声明了
unit uGetHDSN;
interface
uses
Windows, JwaWinIoctl;
function GetIdeSerialNumber: AnsiString;
implementation
type
TIdSector = packed record
wGenConfig: USHORT;
wNumCyls: USHORT;
wReserved: USHORT;
wNumHeads: USHORT;
wBytesPerTrack: USHORT;
wBytesPerSector: USHORT;
wSectorsPerTrack: USHORT;
wVendorUnique: array [0 .. 2] of USHORT;
sSerialNumber: array [0 .. 19] of AnsiChar;
wBufferType: USHORT;
wBufferSize: USHORT;
wECCSize: USHORT;
sFirmwareRev: array [0 .. 7] of AnsiChar;
sModelNumber: array [0 .. 39] of AnsiChar;
wMoreVendorUnique: USHORT;
wDoubleWordIO: USHORT;
wCapabilities: USHORT;
wReserved1: USHORT;
wPIOTiming: USHORT;
wDMATiming: USHORT;
wBS: USHORT;
wNumCurrentCyls: USHORT;
wNumCurrentHeads: USHORT;
wNumCurrentSectorsPerTrack: USHORT;
ulCurrentSectorCapacity: ULONG;
wMultSectorStuff: USHORT;
ulTotalAddressableSectors: ULONG;
wSingleWordDMA: USHORT;
wMultiWordDMA: USHORT;
bReserved: array [0 .. 127] of Byte;
end;
PIdSector = ^TIdSector;
const
IDE_ATA_IDENTIFY = $EC;
function LittleToBig(Data: Word): Word;
asm
xchg ah, al
end;
function GetIdeSerialNumber: AnsiString;
var
hDevice: THandle;
Size, cbBytesReturned: DWORD;
SCIP: TSendCmdInParams;
SCOP: PSendCmdOutParams;
P: PWORD;
I: Integer;
begin
Result := '';
hDevice := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or
FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hDevice = INVALID_HANDLE_VALUE then
Exit;
Size := SizeOf(TSendCmdOutParams) + IDENTIFY_BUFFER_SIZE - 1;
SCOP := AllocMem(Size);
SCIP.irDriveRegs.bCommandReg := IDE_ATA_IDENTIFY;
if DeviceIoControl(hDevice, SMART_RCV_DRIVE_DATA, @SCIP, SizeOf(TSendCmdInParams) - 1, SCOP, Size,
cbBytesReturned, nil) = False then
begin
FreeMem(SCOP);
CloseHandle(hDevice);
Exit;
end;
// 处理一下序列号在内存中的顺序
with PIdSector(@SCOP^.bBuffer[0])^ do
begin
SetLength(Result, Length(sSerialNumber));
P := @Result[1];
CopyMemory(P, @sSerialNumber[0], Length(sSerialNumber));
for I := 1 to Length(sSerialNumber) div 2 do
begin
P^ := LittleToBig(P^);
Inc(P);
end;
end;
FreeMem(SCOP);
end;
end.
windows c语言 sata 序列号,【Delphi】获取IDE/SATA硬盘序列号相关推荐
- Linux下获取CPUID、硬盘序列号与MAC地址
ioctl系统调用,具体的调用方法,请查看手册页 获取CPUID 按照网上提供的说明,CPUID并不是所有的Intel CPU都支持的.如果支持,汇编调用为:eax置0000_0003,调用cpuid ...
- linux获取机器cpuid地址函数,Linux下获取CPUID、硬盘序列号与MAC地址
在很多系统软件的开发中,需要使用一些系统的唯一性信息.所以,得到主机的CPUID.硬盘序列号及网卡的MAC地址,就成个一件很重要的应用. 本人经过一番google即自己的钻研,基本上实现了这几个功能. ...
- Python获取硬件信息(硬盘序列号,CPU序列号)
原文衔接 https://www.cnblogs.com/blog-rui/p/12108072.html pip install wmi pip install pywin32 import wmi ...
- Windows查询计算机设备序列号、MAC地址和硬盘序列号
1 进入命令提示符 搜索cmd,以管理员身份打开命令提示符 2 查询设备序列号 输入命令 wmic bios get serialnumber 返回的字符串即为设备序列号(SerialNumber) ...
- java获取唯一序列号,Android 获取本机唯一序列号 和可变UUID方法
UUID+设备号序列号 唯一识别码(不可变) private String getMyUUID(){ final TelephonyManager tm = (TelephonyManager) ge ...
- cpuid linux,Linux下获取CPUID、硬盘序列号与MAC地址(2)
思路明确了,以下为实现代码: static int getdiskid (char *id, size_t max) { int fd; struct hd_driveid hid; FILE *fp ...
- xp计算机硬盘序列号,发表一个最简单的XP以上系统中获取CPUID、硬盘序列号、BIOS序列号等等的函数!(100分)...
//uses ActiveX, ComObj; //这个函数使用了WMI,而且只获取第一个硬件/软件设置的信息. //用户可以根据需要自行修改. function GetWMIProperty(WMI ...
- linux c 获取 多个硬盘序列号_veket系统中使用GParted进行硬盘分区
Veket Linux操作系统具备小巧,占用资源少,便携方便.安装方便,我们可以将其安装到电脑的硬盘,或者虚拟机中体验一把.如果家里有老式的闲置的电脑,将该系统安装到老式电脑,看看电影,上上网,使用下 ...
- 转另一个获取硬盘序列号的方法
原谅转自:http://blog.sina.com.cn/s/blog_57dff12f0100d5so.html #define DFP_GET_VERSION ...
- python获取本机 ip地址、mac地址(物理地址)、计算机名、硬盘序列号、CPU序列号、主板序列号、bios序列号、bios uuid号
文章目录 python获取本机IP地址.mac地址(物理地址).计算机名 物理地址 计算机名.ip地址 硬盘序列号 CPU序列号 主板序列号 bios序列号 bios uuid号 python获取本机 ...
最新文章
- 梦断代码阅读笔记之一
- lwip 开发 sntp 与 tcp 不能同时工作的奇怪问题
- Python: max和min函数的高级使用
- 不容错过的8个持续集成工具
- 经典网页设计:10个响应式设计的国外购物网站
- 进入前端开发这个领域 ,请问如何进行系统的学习?
- JS使用XMLHttpRequest对象POST收发JSON格式数据
- 10-礼帽与黑帽操作
- 计算机组成原理随笔(一)
- PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)
- 【CCCC】L3-021 神坛 (30分)计算几何+求三角形面积(极角排序)
- 游戏服务器信息未初始化,游戏服务器初始化
- 《编程之美》---求二叉树中节点的最大距离
- You need to use a Theme.AppCompat theme
- linux(ubantu)系统如何安装vim编辑器以及如何使用vim
- 好笑的GIF动态表情包怎么制作
- Microsoft edge视频(广告)加速播放
- Zuul网关拦截器配置
- edu邮箱怎么申请一个1T的onedrive
- 两化融合给企业带来的实际意义