Remote API(RAPI)之 系统信息
RAPI提供了一些取系统信息的函数
CeGetSystemInfo:返回当前系统信息
CeGetSystemMetrics:获取Windows元素的尺寸和系统设置
CeGetVersionEx:获取当前运行的操作系统版本的扩展信息
CeGetSystemPowerStatusEx:获取电池状态
CeGlobalMemoryStatus:获取系统物理内存和虚拟内存信息
CeGetStoreInfomation:获取存储器信息并填入STORE_INFORMATION结构
SYSTEM_INFO si; //系统信息
OSVERSIONINFO versionInfo; //版本信息
SYSTEM_POWER_STATUS_EX PowerStatus; //电源信息
MEMORYSYATUS ms; //内存信息
String info; private const int TimeOut = ;//异步连接设备超时时间2秒
private void btnGetSystemInfo_Click(object sender, EventArgs e)
{
Rapiinit ri = new Rapiinit();
ri.cbsize = Marshal.SizeOf(ri);
uint hRes = CeRapiInitEx(ref ri);
ManualResetEvent me = new ManualResetEvent(false);
me.SafeWaitHandle = new Microsoft.Win32.SafeHandles.SafeWaitHandle(ri.heRapiInit, false);
if (!me.WaitOne(TimeOut, true))
{
CeRapiUninit();
} //1、检索系统信息
try
{
CeGetSystemInfo(out si);
}
catch (Exception)
{
throw new Exception("Error retrieving system info.");
} //2、检索设备操作系统版本号
bool b;
versionInfo.dwOSVersionInfoSize = Marshal.SizeOf(typeof(OSVERSIONINFO));//设置为结构大小
b = CeGetVersionEx(out versionInfo);
if (!b)
{
throw new Exception("Error retrieving version information.");
} //3、检索设备电源状态
try
{
CeGetSystemPowerStatusEx(out PowerStatus, true);// true 表示读取最新的电源信息,否则将从缓存中获得
}
catch (Exception)
{
throw new Exception("Error retriving System power status.");
} // 4、检索设备内存状态
CeGlobalMemoryStatus(out ms); //设置检索信息的格式
info = "The connected device has an";
switch (si.wProcessorArchitecture)
{
case ProcessorArchitecture.Intel:
info += "Intel processor.\n";
break;
case ProcessorArchitecture.ARM:
info += "ARM processor.\n";
break;
default:
info += "unknown processor type.\n";
break;
} info += "OS vesion:" + versionInfo.dwMajorVersion + "." + versionInfo.dwMinorVersion + "." + versionInfo.dwBuildNumber + "\n";
if (PowerStatus.ACLineStatus == )
{
info += "On AC power:Yes\n";
}
else
{
info += "On AC power:NO\n";
}
info += "Battery level:"+PowerStatus.BackupBatteryLifePercent+"%\n";
info += "Total memory:" + string.Format("{0:###,###,###}", ms.dwTotalPhys + "\n"); richTextBox1.AppendText(info); CeRapiUninit();
} #region 声明API [DllImport("rapi.dll")]
private static extern uint CeRapiInitEx(ref Rapiinit pRapiInt); [DllImport("rapi.dll", CharSet = CharSet.Unicode)]
internal static extern int CeRapiUninit(); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern int CeGetSystemInfo(out SYSTEM_INFO pSI); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern bool CeGetVersionEx(out OSVERSIONINFO lpVersionInformation); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern bool CeGetSystemPowerStatusEx(out SYSTEM_POWER_STATUS_EX pStauts, bool fUpdate); [DllImport("rapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern void CeGlobalMemoryStatus(out MEMORYSYATUS msce); #endregion #region 声明结构 [StructLayout(LayoutKind.Explicit)]
private struct Rapiinit
{
[FieldOffset()]
public int cbsize;
[FieldOffset()]
public readonly IntPtr heRapiInit;
[FieldOffset()]
private readonly IntPtr hrRapiInit;
} //处理器架构CeGetSystemInfo
public enum ProcessorArchitecture : short
{
Intel=,
MIPS=,
Alpha=,
PPC=,
SHX=,
ARM=,
IA64=,
Alpha64=,
Unknown=-
} //移动设备内存信息
[StructLayout(LayoutKind.Sequential)]
public struct MEMORYSYATUS
{
internal uint dwLength;
public int dwMemoryLoad;//当前内存占用(%)
public int dwTotalPhys;//物理内存总量
public int dwAvailPhys;//可用物理内存
public int dwTotalPageFile;//分页数
public int dwAvailPageFile;//未分页
public int dwTotalVirtual;//虚拟内存总量
public int dwAvailVirtual;//可用虚拟内存
} //移动设备电源信息
public struct SYSTEM_POWER_STATUS_EX
{
public byte ACLineStatus;//交流电状态
public byte BatteryFlag;//电池充电状态 1 High,2 Low,4 Critical,8 Charging,128 No system battery,255 Unknown status
public byte BatteryLifePercent;//电池电量剩余百分比
internal byte Reserved1;//保留字段,设置为0
public int BatteryLifeTime;//电池电量剩余时间(秒)
public int BatteryFullLifeTime;//电池充满电的总可用时间(秒)
internal byte Reserved2;//保留字段,设置为0
public byte BackupBatteryFlag;//后备电池状态
public byte BackupBatteryLifePercent;//后备电池剩余电量百分比
internal byte Reserved3;//保留字段,设置为0
public int BackupBatteryLifeTime;//后备电池电量剩余时间(秒)
public int BackupBatteryFullLifeTime;//后备电池充满电的总可用时间(秒)
} //OSVERSIONINFO platform type
public enum PlatformType : int
{
//win32 on windows ce
VER_PLATFORM_WIN32_CE=
} public struct OSVERSIONINFO
{
internal int dwOSVersionInfoSize;
public int dwMajorVersion;//主板本信息
public int dwMinorVersion;//副版本信息
public int dwBuildNumber;//编译信息
public PlatformType dwPlatfromId;//操作系统类型
} //处理器类型CeGetSystemInfo
public enum ProcessorType : int
{
PROCESSOR_INTEL_386 = , //
PROCESSOR_INTEL_486 = , //
PROCESSOR_INTEL_PENTIUM = , //Pentium
PROCESSOR_INTEL_PENTIUMII = , //P2
PROCESSOR_INTEL_IA64 = , //IA 64
PROCESSOR_MIPS_R4000 = , //MIS 4000 series
PROCESSOR_ALPHA_21064 = , //Alpha 21064
PROCESSOR_PPC_403 = , //PowerPC 403
PROCESSOR_PPC_601 = , //PowerPC 601
PROCESSOR_PPC_603 = , //PowerPC 603
PROCESSOR_PPC_604 = , //PowerPC 604
PROCESSOR_PPC_620 = , //PowerPC 620
PROCESSOR_HITACHI_SH3 = , // Hitachi SH3
PROCESSOR_HITACHI_SH3E = , // Hitachi SH3E
PROCESSOR_HITACHI_SH4 = , //Hitachi SH4
PROCESSOR_MOTOROLA_821 = , //Motorola 821
PROCESSOR_SHx_SH3 = , //Hitachi SH3
PROCESSOR_SHx_SH4 = , //Hitachi SH4
PROCESSOR_STRONGARM = , //Intel StrongARM
PROCESSOR_ARM720 = , //ARM720
PROCESSOR_ARM820 = , //ARM820
PROCESSOR_ARM920 = , //ARM920
PROCESSOR_ARM_7TDMI = //ARM7
} //CeGetSystemInfo的数据结构
public struct SYSTEM_INFO
{
//处理器架构
public ProcessorArchitecture wProcessorArchitecture;
//保留
internal ushort wReserved;
//Specifies the page size and the granularity of page protection and commitment.
public int dwPageSize;
//应用程序可访问内存地址的最小值
//(Pointer to the lowest memory address accessible to applications and dynamic-link libraries (DLLs). )
public int lpMinimumApplicationAddress;
//应用程序可访问内存地址的最大值
public int lpMaximumApplicationAddress;
//Specifies a mask representing the set of processors configured into the system. Bit 0 is processor 0; bit 31 is processor 31.
public int dwActiveProcessorMask;
//处理器数量(Specifies the number of processors in the system.)
public int dwNumberOfProcessors;
//处理器类型(Specifies the type of processor in the system.)
public ProcessorType dwProcessorType;
//Specifies the granularity with which virtual memory is allocated.
public int dwAllocationGranularity;
//Specifies the system architecture-dependent processor level.
public short wProcessorLevel;
//Specifies an architecture-dependent processor revision.
public short wProcessorRevision;
} #endregion
Remote API(RAPI)之 系统信息的更多相关文章
- Docker入门教程(八)Docker Remote API
Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...
- 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用
0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...
- Docker remote API简单配置使用
1.启动docker remote API的方式如下: docker -d -H uninx:///var/run/docker.sock -H tcp://0.0.0.0:5678 2.但是为了伴随 ...
- V-REP Remote API(C++)实现简单的关节转动
基础内容参考:https://www.cnblogs.com/eternalmoonbeam/p/10753149.html V-REP客户端设置: 在V-REP场景文件中需要添加三个实体,包括两个形 ...
- docker remote api enable in ubuntu
现在使用docker作为开发环境,操作系统是ubuntu16.10,pycharm中使用remote interpreter,需要用到remote api,结果发现自己的原答案是针对ubuntu 14 ...
- Docker Remote API v1.24
1. Brief introduction The Remote API has replaced rcli. The daemon listens on unix:///var/run/docker ...
- 关于docker remote api未授权访问漏洞的学习与研究
漏洞介绍: 该未授权访问漏洞是因为docker remote api可以执行docker命令,从官方文档可以看出,该接口是目的是取代docker 命令界面,通过url操作docker. docker ...
- docker 开启remote api
docker官方文档上有相关说明(Configure and run Docker on various distributions),ubuntu上是可行的 sudo vi /etc/default ...
- Docker开启Remote API 访问 2375端口
Docker常见端口 我看到的常见docker端口包括: 2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为h ...
- Docker remote API
Docker remote API 该教程基于Ubuntu或Debian环境,如果不是,请略过本文 Docker API 在Docker生态系统中一共有三种API Registry API:提供了与来 ...
随机推荐
- Java利用模板生成pdf并导出
1.准备工作 (1)Adobe Acrobat pro软件:用来制作导出模板 (2)itext的jar包 2.开始制作pdf模板 (1)先用word做出模板界面 (2)文件另存为pdf格式文件 (3) ...
- Redis 键空间事件通知
出处: 使用Redis完成定时任务 场景 使用Java做过项目的人大概都用过定时器.一般来说,项目里订单模块和评论模块,都会涉及到定时任务执行.比如说: 用户下订单后,需要在5分钟内完成支付,否则 ...
- .Net面试题二
谈谈创建线程的方式 1.列举.Net页面之间传值的方式 2..Net中aspx页面从客户端浏览器开始请求到服务器返回响应所经历的过程 CLR主要运行过程 ASP.NET运行管道所有事件 3.如何理解委 ...
- OAuth授权看这篇就够了
OAuth授权看这篇就够了
- prefixOverrides使用注意是事项
不可以prefixOverrides=',' 否则执行的sql格式可能为 id ,time ,name... 导致sql报错,或者执行结果出错
- 【原创】大叔经验分享(58)kudu写入压力大时报错
kudu写入压力大时报错 19/05/18 16:53:12 INFO AsyncKuduClient: Invalidating location fd52e4f930bc45458a8f29ed1 ...
- Centos7:nginx的安装,配置及使用
安装依赖 yum install gcc-c++//gcc环境 yum install -y pcre pcre-devel//PCRE:nginx的http模块使用pcre来解析正则表达式 yum ...
- 简单的todolist的demo
放上代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...
- JSR-303
JSR-303是java标准的验证框架,已有的实现由 Hibernate validator 定义的注解验证bean属性: 空检查 @Null 验证对象是否为空 @NotNull 验证对象不为空 @N ...
- element table 表格 修改背景为透明并去除边框
.el-table{ /* 表格字体颜色 */ color:white; /* 表格边框颜色 */ /* border: 0.5px solid #758a99; */ height: 500px; ...