Как получить серийный номер жесткого диска с помощью Win API на Lua - PullRequest
0 голосов
/ 21 марта 2019
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]

Это даст серийный номер логического диска, мне нужно получить серийный номер жесткого диска.Как я могу получить это?

1 Ответ

0 голосов
/ 22 марта 2019

wmic не является частью WinAPI, но дает более простое решение:

local 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

...