[已解决]如何用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
$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
回复 2# pusofalse
麻烦了版主
但 版主这个好像只返回 0 而不是数据不知为什么 $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
再测试一下,看下是什么错误。 回复 4# pusofalse
错误代码 1168 回复 5# xdcysten
FCAP是Frimware Table ID (硬件表ID?),把"FCAP"改成你自己的值,再次测试,再看下error code是多少。 回复 6# pusofalse
版主真不知对你说什么好,你实在太NB了。。。。
版主的API的学问到达了人类的极限,挥一挥手不知有多少电脑死在你面前呢
谢谢了,没错误
页:
[1]