GetSystemFirmwareTable 这段代码 怎么转成火山使用
本帖最后由 86339218 于 2024-7-2 11:13 编辑#include <windows.h>
int main() {
DWORD smBiosDataSize = 0;
RawSMBIOSData* smBiosData = NULL;
DWORD bytesWritten = 0;
// cha询SMBIOS数据的大小
smBiosDataSize = GetSystemFirmwareTable('RSMB', 0, NULL, 0);
// 为SMBIOS数据分配内存
smBiosData = (RawSMBIOSData*)HeapAlloc(GetProcessHeap(), 0, smBiosDataSize);
if (!smBiosData) {
// 处理内存分配失败的情况
return -1;
}
// 检索SMBIOS表
bytesWritten = GetSystemFirmwareTable('RSMB', 0, smBiosData, smBiosDataSize);
if (bytesWritten != smBiosDataSize) {
// 处理数据检索失败的情况
HeapFree(GetProcessHeap(), 0, smBiosData);
return -1;
}
// 处理SMBIOS数据...
// 释放内存
HeapFree(GetProcessHeap(), 0, smBiosData);
return 0;
}
// 假设RawSMBIOSData结构定义如下
struct RawSMBIOSData {
BYTE Used20CallingMethod;
BYTE SMBIOSMajorVersion;
BYTE SMBIOSMinorVersion;
BYTE DmiRevision;
DWORD Length;
BYTE SMBIOSTableData[];
};
直接嵌入式就能用
<火山程序 类型 = "通常" 版本 = 1 />
@ struct RawSMBIOSData
@ {
@ BYTE Used20CallingMethod;
@ BYTE SMBIOSMajorVersion;
@ BYTE SMBIOSMinorVersion;
@ BYTE DmiRevision;
@ DWORD Length;
@ BYTE SMBIOSTableData[];
@ };
@ DWORD error = ERROR_SUCCESS;
@ DWORD smBiosDataSize = 0;
@ RawSMBIOSData* smBiosData = NULL; // Defined in this link
@ DWORD bytesWritten = 0;
@
@ // Query size of SMBIOS data.
@ smBiosDataSize = GetSystemFirmwareTable('RSMB', 0, NULL, 0);
@
@ // Allocate memory for SMBIOS data
@ smBiosData = (RawSMBIOSData*) HeapAlloc(GetProcessHeap(), 0, smBiosDataSize);
@ if (!smBiosData) {
@ error = ERROR_OUTOFMEMORY;
调试输出 ("error")
@ }
@
@ // Retrieve the SMBIOS table
@ bytesWritten = GetSystemFirmwareTable('RSMB', 0, smBiosData, smBiosDataSize);
@
@ if (bytesWritten != smBiosDataSize) {
@ error = ERROR_INVALID_DATA;
调试输出 ("error")
@ }
@
@ // Process the SMBIOS data and free the memory under an exit label
变量 指针 <类型 = 变整数>
变量 size <类型 = 整数>
变量 SMBIOSMajorVersion <类型 = 字节>
变量 SMBIOSMinorVersion <类型 = 字节>
变量 DmiRevision <类型 = 字节>
变量 Length <类型 = 整数>
变量 SMBIOSTableData <类型 = 变整数>
@ @<指针> = (INT_P)smBiosData;
@ @<size> = sizeof(RawSMBIOSData);
@ @<SMBIOSMajorVersion> = smBiosData->SMBIOSMajorVersion;
@ @<SMBIOSMinorVersion> = smBiosData->SMBIOSMinorVersion;
@ @<DmiRevision> = smBiosData->DmiRevision;
@ @<Length> = smBiosData->Length;
@ @<SMBIOSTableData> = (INT_P)smBiosData->SMBIOSTableData;
调试输出 (指针到字节集 (指针, size + 8))
调试输出 (SMBIOSMajorVersion, SMBIOSMinorVersion, DmiRevision, Length)
调试输出 (指针到字节集 (SMBIOSTableData, Length))
uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用
我去试试 uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用
感谢确实可以去捣鼓下怎么解析数据:噜阿噜
页:
[1]