递归火山软件开发平台

标题: GetSystemFirmwareTable 这段代码 怎么转成火山使用 [打印本页]

作者: 86339218    时间: 2024-7-2 11:10
标题: 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
直接嵌入式就能用

<火山程序 类型 = "通常" 版本 = 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
uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用

我去试试
作者: 86339218    时间: 2024-7-12 13:41
uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用

感谢  确实可以  去捣鼓下怎么解析数据:噜阿噜




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4