86339218 发表于 2024-7-2 11:10:41

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[];
};

uuyyhhjj 发表于 2024-7-2 12:19:13

直接嵌入式就能用

<火山程序 类型 = "通常" 版本 = 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))

86339218 发表于 2024-7-3 16:02:29

uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用




我去试试

86339218 发表于 2024-7-12 13:41:30

uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用




感谢确实可以去捣鼓下怎么解析数据:噜阿噜
页: [1]
查看完整版本: GetSystemFirmwareTable 这段代码 怎么转成火山使用