xdcysten 发表于 2010-11-3 19:23:23

[已解决]如何用API调用GetSystemFirmwareTable返回ACPI table

本帖最后由 xdcysten 于 2010-11-3 20:47 编辑

如何使用用API调用GetSystemFirmwareTable返回ACPI table

使用DLLCALL调用Kernel32.dll里面的GetSystemFirmwareTable函数
返回Value 为'ACPI' 的二进制数据

好像如下:DllCall("Kernel32.dll", "int", "GetSystemFirmwareTable", "hwnd", 0, "str", "若干文字", "str", "若干标题", "int", 0)
Kernel32.dll,系统可能需要VISTA以上才可以正常动作

微软官方帮助文件
http://msdn.microsoft.com/en-us/library/ms724379(VS.85).aspx

pusofalse 发表于 2010-11-3 20:07:12



$iTableId = Number(Binary("FCAP"))
$iProvSigner = Number("0x" & Hex((Binary("ACPI"))))

$tBuffer = DllStructCreate("ubyte Data")
$pBuffer = DllStructGetPtr($tBuffer)

$iLength = DllCall("Kernel32.dll", "int", "GetSystemFirmwareTable", "dword", $iProvSigner, _
                "dword", $iTableId, "ptr", $pBuffer, "dword", 4096)

$tBinary = DllStructCreate("ubyte Data[" & $iLength & "]", $pBuffer)
MsgBox(0, "", DllStructGetData($tBinary, "Data"))

$tBinary = 0
$tBuffer = 0

xdcysten 发表于 2010-11-3 20:15:55

回复 2# pusofalse

麻烦了版主
但 版主这个好像只返回 0 而不是数据不知为什么

pusofalse 发表于 2010-11-3 20:23:29

$iTableId = Number(Binary("FCAP"))
$iProvSigner = Number("0x" & Hex((Binary("ACPI"))))

$tBuffer = DllStructCreate("ubyte Data")
$pBuffer = DllStructGetPtr($tBuffer)

$iLength = DllCall("Kernel32.dll", "int", "GetSystemFirmwareTable", "dword", $iProvSigner, _
                "dword", $iTableId, "ptr", $pBuffer, "dword", 4096)
If ($iLength = 0) Then
   $iError = DllCall("Kernel32.dll", "dword", "GetLastError")
   MsgBox(48, "Error code:", $iError)
   Exit
EndIf

$tBinary = DllStructCreate("ubyte Data[" & $iLength & "]", $pBuffer)
MsgBox(0, "", DllStructGetData($tBinary, "Data"))

$tBinary = 0
$tBuffer = 0

再测试一下,看下是什么错误。

xdcysten 发表于 2010-11-3 20:30:51

回复 4# pusofalse


错误代码 1168

pusofalse 发表于 2010-11-3 20:37:37

回复 5# xdcysten

FCAP是Frimware Table ID (硬件表ID?),把"FCAP"改成你自己的值,再次测试,再看下error code是多少。

xdcysten 发表于 2010-11-3 20:45:46

回复 6# pusofalse

版主真不知对你说什么好,你实在太NB了。。。。

版主的API的学问到达了人类的极限,挥一挥手不知有多少电脑死在你面前呢

谢谢了,没错误
页: [1]
查看完整版本: [已解决]如何用API调用GetSystemFirmwareTable返回ACPI table