常用系统信息API

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.窗口信息    MS为我们提供了打开特定桌面和枚举桌面窗口的函数。    hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);    //打开我们默认的Default桌面;    EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);    //枚举打开桌面上的所有窗口,由回调函数实现。
1.窗口信息
    MS为我们提供了打开特定桌面和枚举桌面窗口的函数。
    hDesk=OpenDesktop(lpszDesktop,0,FALSE,DESKTOP_ENUMERATE);
    //打开我们默认的Default桌面;
    EnumDesktopWindows(hDesk,(WNDENUMPROC)EnumWindowProc,0);
    //枚举打开桌面上的所有窗口,由回调函数实现。
    BOOL __stdcall EnumWindowProc(HWND, LPARAM);
    //在回调函数中,我们可以获得窗口的标题和相关进程,线程信息;
    GetWindowText(hWnd,szWindowText,dwMaxCount);
    GetWindowThreadProcessId(hWnd,&dwPID);
    2.设备驱动器信息(服务和设备驱动器差不多,在此不做重复)
    设备驱动信息有服务控制管理器(SCM)来管理的,我要打开服务控制管理器,并枚举所有的设备驱动器。
    OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
    //以所有权限打开服务控制管理器;
    EnumServicesStatus(schManager,dwDeviceType,dwDeviceState,
    EnumStatus,dwBufSize,&dwBytesNeeded,
   &dwDevicesReturned,&dwResumeHandle))
    //枚举所有设备的当前状态;
    CloseServiceHandle(schManager);
    //记住,在结束访问后要关闭服务句柄;
    OpenService(schManager,szDeviceName,SERVICE_ALL_ACCESS);
    //打开特定的设备驱动器;
    QueryServiceConfig(schDevice,lpDeviceConfig,
     1024*8,&dwBytesNeeded);
    //查询驱动器的服务配置信息;
    QueryServiceStatus(schDevice,&DeviceStatus);
    //查询设备驱动器的当前状态;
    QueryServiceConfig2(schDevice,SERVICE_CONFIG_DESCRIPTION,
    (LPBYTE)lpDeviceDescription,8*1024,&dwBytesNeeded)
    //查询设备的描述信息;
    StartService(schDevice,0,NULL);
    //启动设备;
    ControlService(schDevice,SERVICE_CONTROL_STOP,&DeviceStatus);
    //停止设备;
    DeleteService(schDevice);
    //删除设备;
    3.磁盘信息
    我们希望获得系统所有磁盘的信息,包括软盘,硬盘,光盘等等;
    GetLogicalDriveStrings(dwBufferLength,lpBuffer);
    //获得逻辑设备的信息;
    GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,
     dwVolumeNameSize,&dwVolumeSerialNumber,
     &dwMaximumComponentLength,&dwFileSystemFlags,
     lpFileSystemNameBuffer,dwFileSystemNameSize);
    //获得磁盘卷信息,包括卷名称和格式类型;
    GetDiskFreeSpaceEx(lpRootPathName,&FreeBytesAvailable,
     &TotalNumberOfBytes,&TotalNumberOfFreeBytes);
    //探测磁盘的空间使用情况;
    4.环境变量
    我们可以从注册表中获得环境块的信息:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,当然要使用注册表的函数。
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,RegKey,0,KEY_QUERY_VALUE,&hKey);
    //打开注册表的键;
    RegEnumValue(hKey,dwIndex,EnvironVariable,
    &dwVariableLength,NULL,NULL,NULL,NULL);
    //查询我们需要的信息值;
    GetEnvironmentVariable(EnvironVariable,EnvironString,1024);
    //获得环境变量的字符串信息;
    
    5.事件记录信息
    OpenEventLog(NULL,szLog);
    //打开时间日志记录;
    GetOldestEventLogRecord(hEvent,&dwThisRecord);
    //获得最新的日志信息,以便继续查找;
    ReadEventLog(hEvent,EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,
   0,pEventLogRecord,1024*32,&dwRead,&dwNeeded)
    //读去日志信息;
    LookupAccountSid(NULL,pSid,szName,&dwName,szDomain,&dwDomain,&SNU);
    //获取账户的SID,以便获得账户的用户名称;
    GetNumberOfEventLogRecords(hEvent,&dwTotal);
    //获得事件日志的总数;
    CloseEventLog(hEvent);
    //不要忘记关闭事件句柄;
    
    6.网络共享
    我们使用第二等级的网络共享搜索;
    NetShareEnum(NULL,dwLevel,(PBYTE *)&pBuf,MAX_PREFERRED_LENGTH,&entriesread,&totalentries,&resume);
    //列举所有的共享目录及相关信息;
    NetApiBufferFree(pBuf);
    //释放缓冲区;
    NetShareDel(NULL,(char *)lpShareNameW,0);
    //删除网络共享目录;
    
    7.网络适配器信息
    我们要探测NIC的信息和网络流量;
    GetAdaptersInfo(&AdapterInfo,&OutBufLen);
    //获取适配器信息;
    
    8.系统性能
    获取系统的存储器使用情况;
    GetPerformanceInfo(&PerfInfo,sizeof(PERFORMACE_INFORMATION))
    //获取系统性能信息;
    9.进程/线程/模块信息
    在此我们使用工具帮助函数(ToolHelp32)和系统
    OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES,&hToken);
    //打开进程的令牌,提升权限;
    AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
    //将进程的权限提升到支持调试(Debug);
    CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    //创建进程的快照;
    Process32First(hProcessSnap,&ProcessEntry32);
    Process32First(hProcessSnap,&ProcessEntry32);
    //枚举所有进程;
    OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,ProcessEntry32.th32ProcessID);
    //打开特定进程,以查询进程相关信息;
    GetProcessTimes(hProcess,&CreateTime,&ExitTime,&KernelTime,&UserTime);
    //获取进程的时间信息; 
    GetProcessMemoryInfo(hProcess,&PMCounter,sizeof(PMCounter));
    //获取进程的存储区信息;
    GetPriorityClass(hProcess);
    //获取进程的优先权;
    GetProcessIoCounters(hProcess,&IoCounters);
    //获取进程的IO使用情况;
    CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
    //创建模块快照;
    Module32First(hModuleSnap, &ModuleEntry32);
    Module32Next(hModuleSnap, &ModuleEntry32);
    //枚举进程模块信息;
    CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    //创建线程快照;
    Thread32First(hThreadSnap, &ThreadEntry32);
    Thread32Next(hThreadSnap, &ThreadEntry32);
    //枚举线程信息;
    OpenThread(THREAD_ALL_ACCESS,FALSE,ThreadEntry32.th32ThreadID);
    //打开线程,须自己获得此函数地址;
    TerminateProcess(hProcess,0);
    //终止进程;
    SuspendThread(hThread);
    //悬挂线程;
    ResumeThread(hThread);
    //激活线程;
    10.关机
    AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL);
    //调整进程令牌,使其支持关机;
    ExitWindowsEx(EWX_LOGOFF,0);
    //注销系统;
    LockWorkStation();
    //锁定系统;
    InitiateSystemShutdown(NULL,szMessage,dwTimeout,FALSE,bSig);
    //支持到记时和消息显示的关机/重启;
    SetSystemPowerState(bSig,FALSE);
    //系统休眠/冬眠;
    11.用户信息
    NetUserEnum(NULL,dwLevel,FILTER_NORMAL_ACCOUNT,(LPBYTE*)&pBuf,
                dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);
    //枚举系统用户信息;
    NetUserDel(NULL,lpUserNameW); 
    //删除指定用户;
  
    12.系统版本信息
    GetVersionEx((LPOSVERSIONINFO)&osviex);
    //获取操作系统的版本信息;
    我们也可以通过注册表(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion)获取相关信息:
    GetTickCount();
    //获取开机时间;
    GetComputerName(szInfo,&dwInfo);
    //获取计算机名称;
    GetUserName(szInfo,&dwInfo);
    //获取计算机用户名;
    GetWindowsDirectory(szInfo,MAX_PATH+1);
    //获取Windows目录;
    GetSystemDirectory(szInfo,MAX_PATH+1);
    //获取系统目录;
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
机器学习/深度学习 算法 计算机视觉
基于深度学习网络的USB摄像头实时视频采集与人脸检测matlab仿真
**摘要 (Markdown格式):** ```markdown - 📹 使用USB摄像头(Tttttttttttttt666)实时视频检测,展示基于YOLOv2在MATLAB2022a的实施效果: ``` Tttttttttttttt1111111111------------5555555555 ``` - 📺 程序核心利用MATLAB视频采集配置及工具箱(Dddddddddddddd),实现图像采集与人脸定位。 - 🧠 YOLOv2算法概览:通过S×S网格预测边界框(B个/网格),含坐标、类别概率和置信度,高效检测人脸。
|
Linux 应用服务中间件 nginx
Linux 快速搭建 Overleaf 5.0 附中文字体及完整 TexLive 安装教程(2024最新版)
2024最新版 Linux 极速安装 Overleaf 5.0 手把手教学!附 XeLatex 修复,新增中文字体以及安装完整版 TexLive 教程!
|
编解码 JavaScript 编译器
[字符编码] 实战篇:QT中文乱码的解决办法
[字符编码] 实战篇:QT中文乱码的解决办法
3063 0
|
JavaScript 前端开发
js怎样判断status
js怎样判断status
解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题
解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题
1055 0
|
Linux API 开发工具
推荐一个刚开源很火的Github项目:system-design-101(系统设计图库)
推荐一个刚开源很火的Github项目:system-design-101(系统设计图库)
924 0
|
XML JSON 前端开发
一文读懂Java Web是什么?
Java Web应用开发是基于Jakarta EE技术平台的。Jakarta EE是企业级应用的解决方案。Jakarta EE框架提供的Web开发技术主要支持两类软件的开发:一类是Web应用服务器(Web Application Server);另一类是在Web应用服务器上运行的Web应用程序(Web Application)。本系列推文介绍的Java Web应用开发就是第二类,即在Web应用服务器上运行的Web应用程序的开发。 Java Web是使用Java技术解决Web相关领域开发问题的技术栈。开发一个完整的Java Web项目涉及静态Web资源、动态Web资源以及项目的部署。
665 0
一文读懂Java Web是什么?
|
存储 API Android开发
Skia深入分析
原文出处:http://blog.csdn.net/hgl868/article/details/45583667 一、渲染层级从渲染流程上分,Skia可分为如下三个层级:1、指令层:SkPicture、SkDeferredCanvas->SkCanvas这一层决定需要执行哪些绘图操作,绘图操作的预变换矩阵,当前裁剪区域,绘图操作产生在哪些layer上,Layer的生成与合并。
4894 0
|
芯片 SoC
OpenHarmony 标准系统HDF框架之I2C驱动开发
OpenHarmony 标准系统HDF框架之I2C驱动开发
508 0
OpenHarmony 标准系统HDF框架之I2C驱动开发
|
消息中间件 Java Kafka
Apache Kafka-AckMode最佳实践
Apache Kafka-AckMode最佳实践
528 0