如何使用 Lua 中的 Win API 获取硬盘序列号

local ffi = require("ffi")
ffi.cdef[[
  int __stdcall GetVolumeInformationA(
  const char* lpRootPathName,
  char* lpVolumeNameBuffer,
  uint32_t nVolumeNameSize,
  uint32_t* lpVolumeSerialNumber,
  uint32_t* lpMaximumComponentLength,
  uint32_t* lpFileSystemFlags,
  char* lpFileSystemNameBuffer,
  uint32_t nFileSystemNameSize
);
]]
local serial = ffi.new("unsigned long[1]", 0)
ffi.C.GetVolumeInformationA(nil, nil, 0, serial, nil, nil, nil, 0)
serial1 = serial[0]

这将返回逻辑驱动器的序列号,我需要获取硬盘的序列号。怎么办?

点赞
用户6834680
用户6834680

wmic 不是 WinAPI 的一部分,但它提供了更简单的解决方案:

function get_HDD0_serial()
   local pipe = io.popen"wmic diskdrive where(index=0) get serialnumber /value"
   local serial = (pipe:read"*a":match"SerialNumber=([^\r\n]*)" or ""):match"^(.-)%s*$"
   pipe:close()
   return serial
end

print(get_HDD0_serial())

如果您只想要 WinAPI 的解决方案,您可以使用 getWmiQueryResult 进行重写。

2019-03-22 08:11:43