递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 1080|回复: 3
打印 上一主题 下一主题

[视窗] GetSystemFirmwareTable 这段代码 怎么转成火山使用

[复制链接]

16

主题

67

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
跳转到指定楼层
楼主
发表于 2024-7-2 11:10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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[];  
};
回复

使用道具 举报

6

主题

152

帖子

1414

积分

金牌会员

Rank: 6Rank: 6

积分
1414
沙发
发表于 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))
回复

使用道具 举报

16

主题

67

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
板凳
 楼主| 发表于 2024-7-3 16:02:29 | 只看该作者
uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用

我去试试
回复

使用道具 举报

16

主题

67

帖子

358

积分

中级会员

Rank: 3Rank: 3

积分
358
地板
 楼主| 发表于 2024-7-12 13:41:30 | 只看该作者
uuyyhhjj 发表于 2024-7-2 12:19
直接嵌入式就能用

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-9-30 23:44 , Processed in 0.088690 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表