Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import windows
- proc GetSystemFirmwareTable(FirmwareTableProviderSignature: DWORD,
- FirmwareTableID: DWORD,
- pFirmwareTableBuffer: PVOID,
- BufferSize: DWORD): DWORD{.stdcall, dynlib: "kernel32", importc: "GetSystemFirmwareTable".}
- proc EnumSystemFirmwareTables(FirmwareTableProviderSignature: DWORD,
- pFirmwareTableBuffer: PVOID,
- BufferSize: DWORD): DWORD{.stdcall, dynlib: "kernel32", importc: "EnumSystemFirmwareTables".}
- proc GetWin8Key(verbose: bool = false): cstring =
- var
- FirmwareTableProviderSignature, BufferSize, FirmwareTableID: DWORD
- vpFirmwareTableBuffer: PVOID
- BytesWritten: DWORD
- pFirmwareTableID = ptr DWORD
- foundTable: bool = false
- FirmwareTableProviderSignature = cast[DWORD](cstring("ACPI")) # Possibly a problematic line of code??? (YES, FOUND SOLUTION THOUGH)
- # Original VC++ code: FirmwareTableProviderSignature = 'ACPI';
- # get buffer size, call with null values
- BufferSize = EnumSystemFirmwareTables(FirmwareTableProviderSignature, nil, 0)
- # alloc memory
- vpFirmwareTableBuffer = alloc0(BufferSize)
- # enum acpi tables
- BytesWritten = EnumSystemFirmwareTables(FirmwareTableProviderSignature, vpFirmwareTableBuffer, BufferSize)
- # enumerate ACPI tables, look for MSDM table
- pFirmwareTableID = cast[ptr DWORD](vpFirmwareTableBuffer) # Possibly a problematic line of code??? (DEFINITELY, NOT SURE OF A FIX YET)
- # Original VC++ code: pFirmwareTableID = (DWORD*)pFirmwareTableBuffer;
- var d = (BytesWritten div 4)-1
- for i in countup(0, d):
- FirmwareTableID = pFirmwareTableID[]
Advertisement
Add Comment
Please, Sign In to add comment