开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
2 Star 4 Fork 4

精易科技/eapi

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
eapi
/
cppCode
/
eapi_15_GetBiosInfo.cpp
eapi
/
cppCode
/
eapi_15_GetBiosInfo.cpp
eapi_15_GetBiosInfo.cpp 4.58 KB
一键复制 编辑 原始数据 按行查看 历史
AlongsCode 提交于 2023年02月04日 02:57 +08:00 . 重构
#include "..\include_eapi_header.h"
#include <comdef.h>
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
typedef struct BIOSINFO {
char* name;
char* manufacturer;
char* version;
char* data;
char* ID;
char* OEM;
BIOSINFO() {
memset(this, 0, sizeof(*this));
}
}*PEBIOSINFO;
namespace eapilib {
using namespace std;
namespace biosinfo {
typedef struct _dmi_header
{
BYTE type;
BYTE length;
WORD handle;
}dmi_header;
typedef struct _RawSMBIOSData
{
BYTE Used20CallingMethod;
BYTE SMBIOSMajorVersion;
BYTE SMBIOSMinorVersion;
BYTE DmiRevision;
DWORD Length;
#pragma warning(disable : 4200)
BYTE SMBIOSTableData[];
}RawSMBIOSData;
static char* dmi_string(const dmi_header* dm, BYTE s)
{
char* bp = (char*)dm;
size_t i, len;
if (s == 0)
return CloneTextData("Not Specified");
bp += dm->length;
while (s > 1 && *bp)
{
bp += strlen(bp);
bp++;
s--;
}
if (!*bp)
return CloneTextData("BAD_INDEX");
/* ASCII filtering */
len = strlen(bp);
for (i = 0; i < len; i++)
if (bp[i] < 32 || bp[i] == 127)
bp[i] = '.';
return CloneTextData(bp);
}
//我本身是比较不喜欢使用COM的,但是BIOS在启动之后转交给操作系统了有些信息只能通过微软的接口获得。
static BOOL GetBiosOther(wstring* ID, wstring* EMO, wstring* NAME) {
BOOL Ret = FALSE;
HRESULT hr = CoInitialize(0);
if (FAILED(hr))
{
return FALSE;
}
hr = CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL); // Reserved
if (FAILED(hr))
{
CoUninitialize();
return Ret;
}
IWbemLocator* pLoc = 0;
hr = CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);
if (FAILED(hr))
{
CoUninitialize();
return Ret;
}
IWbemServices* pSvc = 0;
hr = pLoc->ConnectServer(BSTR(L"root\\CIMV2"), NULL, NULL, 0, NULL, 0, 0, &pSvc);
if (FAILED(hr))
{
pLoc->Release();
CoUninitialize();
return Ret;
}
hr = CoSetProxyBlanket(pSvc, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL, RPC_C_AUTHN_LEVEL_CALL, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE);
if (FAILED(hr))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return Ret;
}
IEnumWbemClassObject* pEnumerator = NULL;
hr = pSvc->ExecQuery(bstr_t("WQL"), bstr_t("Select * FROM Win32_BIOS"), WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
if (FAILED(hr))
{
pSvc->Release();
pLoc->Release();
CoUninitialize();
return Ret;
}
IWbemClassObject* pclsObj = NULL;
while (pEnumerator)
{
ULONG uReturn = 0;
hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn);
if (0 == uReturn)
break;
VARIANT vtProp = { 0 };
hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0);
wchar_t* _NAME = vtProp.bstrVal;
*NAME = _NAME;
hr = pclsObj->Get(L"Version", 0, &vtProp, 0, 0);
wchar_t* _EMO = vtProp.bstrVal;
*EMO = _EMO;
hr = pclsObj->Get(L"SerialNumber", 0, &vtProp, 0, 0);
wchar_t* _ID = vtProp.bstrVal;
*ID = _ID;
VariantClear(&vtProp);
}
if (pclsObj != NULL) {
pclsObj->Release();
}
if (pEnumerator != NULL) {
pEnumerator->Release();
}
pSvc->Release();
pLoc->Release();
CoUninitialize();
return TRUE;
}
static void GetBiosInfo(BIOSINFO* pBIOSINFO)
{
int ret = 0;
RawSMBIOSData* Smbios;
dmi_header* h = NULL;
int flag = 1;
ret = GetSystemFirmwareTable('RSMB', 0, 0, 0);
if (!ret)
{
return;
}
DWORD bufsize = ret;
char* buf = new char[bufsize];
memset(buf, 0, bufsize);
ret = GetSystemFirmwareTable('RSMB', 0, buf, bufsize);
if (!ret)
{
return;
}
Smbios = (RawSMBIOSData*)buf;
BYTE* p = Smbios->SMBIOSTableData;
if (Smbios->Length != bufsize - 8)
{
delete[]buf;
return;
}
for (DWORD i = 0; i < Smbios->Length; i++) {
h = (dmi_header*)p;
}
for (DWORD i = 0; i < Smbios->Length; i++) {
if (h->type == 0 && flag) {
pBIOSINFO->manufacturer = dmi_string(h, p[0x4]);
pBIOSINFO->version = dmi_string(h, p[0x5]);
pBIOSINFO->data = dmi_string(h, p[0x8]);
}
}
wstring ID, OEM, NAME;
GetBiosOther(&ID, &OEM, &NAME);
pBIOSINFO->name = clone_text(NAME);
pBIOSINFO->ID = clone_text(ID);
pBIOSINFO->OEM = clone_text(OEM);
delete[]buf;
return;
}
}
}
EAPI_EXTERN_C void eapi_GetBiosInfo_15_eapi(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf)
{
PEBIOSINFO pHDInfo = *(PEBIOSINFO*)pArgInf[0].m_pCompoundData;
eapilib::biosinfo::GetBiosInfo(pHDInfo);
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

易语言支持库 - 应用接口支持库 欢迎易友fork提交代码完成支持库重构改造。
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/JYtechnology/eapi.git
git@gitee.com:JYtechnology/eapi.git
JYtechnology
eapi
eapi
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /