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);
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=618&d=t223ro
// 列举所有的共享目录及相关信息;
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);
// 获取系统目录;
分享到:
相关推荐
Windows API通过GetLastError函数获取最近的错误代码,并使用FormatMessage函数将错误代码转换为可读的错误消息。正确处理错误和异常对于编写健壮的程序非常重要。 **8. 注册表操作** Windows注册表存储了系统和...
这个"Windows API大全"很可能是一个包含详尽信息的CHM( Compiled HTML Help)文件,这种格式的文件通常用于存放帮助文档或技术手册。 Windows API提供了大量的函数、结构、枚举类型和消息,使得开发者可以控制窗口...
在编程领域,尤其是在Windows应用程序开发中,经常需要与操作系统进行交互以获取或设置各种系统级信息,例如屏幕坐标。在C#中,我们可以通过调用Windows API(应用程序接口)来实现这样的功能。本教程将详细讲解如何...
《Microsoft.WindowsAPICodePack与Shell.DLL:深入探索Windows API接口》 在.NET框架的开发环境中,有时候我们需要调用Windows操作系统底层的功能,比如管理文件、控制桌面图标、操作任务栏等,这时就离不开对...
《深入理解Microsoft.WindowsAPICodePack与C# dll的整合应用》 在现代软件开发中,尤其是Windows平台上的应用程序,开发者经常会遇到需要调用操作系统API的情况。Microsoft.WindowsAPICodePack是一个强大的工具集,...
《VC++ API函数(Windows API大全)》是一本专注于探讨如何在VC++环境中利用Windows API进行程序开发的书籍。Windows API是微软操作系统提供的一系列函数接口,开发者可以通过这些接口实现与操作系统底层的交互,完成...
Windows API List_windows_WindowsAPI编程_windowsapilist_这个主题主要涵盖了Windows API的详细列表和其用法说明,对于进行Windows平台开发的程序员来说,是一份极其重要的参考资料。 Windows API包含了数千个函数...
此外,Windows API的使用往往伴随着错误处理,比如使用GetLastError检查错误码,以及使用SetLastError记录错误信息。理解错误处理机制是编写健壮程序的关键。 总的来说,《Windows API 实例详解》可能会涵盖以上...
利用 Windows API 32 中打印函数,对打印机进行发送打印任务、暂停、取消、获取打印任务、获取打印机列表、状态、纸张等信息。压缩包中包含4个平时收集的打印类,测试均可用。附含Windows API 函数 for Visual Basic...
《Windows API 大全》是IT领域中一份重要的参考资料,主要涵盖了Windows操作系统中广泛使用的API(应用程序编程接口)函数。Windows API是开发Windows应用程序的基础,它提供了与操作系统交互的各种功能,包括窗口...
开发环境window10+VS2012(也...功能就是不需要通过繁琐的命令查看被占用的端口,可通过调用windows API 代码实现,主要API :GetExtendedTcpTable、GetExtendedUdpTable、CreateToolhelp32Snapshot、Module32First等实现
8. **错误处理**:如何正确捕获和处理API调用失败,以及如何使用GetLastError和FormatMessage获取错误信息。 9. **对话框**:创建模态或非模态对话框,使用标准控件如按钮、编辑框和列表框,以及对话框的消息处理。...
此外,Windows API还涉及注册表操作,如RegCreateKeyEx、RegSetValueEx等,用于存储和检索配置信息。错误处理是编程中必不可少的部分,通过GetLastError获取错误代码,并用FormatMessage将其转换为易于理解的文本。 ...
1. **API搜索**:用户可以通过此工具快速查找特定的API函数,获取其详细信息,包括函数原型、参数说明、返回值及使用示例。 2. **函数分类**:API数据库通常按照功能进行分类,如窗口管理、图形设备接口(GDI)、...
9. **错误处理**:如何使用GetLastError和SetLastError获取和设置错误代码,以及如何使用FormatMessage转换错误代码为可读的错误信息。 10. **注册表操作**:介绍RegCreateKey、RegSetValueEx等函数,用于读写...
1. **函数列表**:Windows API 包含了大量的函数,如CreateProcess用于启动新进程,SendMessage用于在窗口间传递消息,GetWindowText用于获取窗口的文本等。每个函数都有其特定的参数和返回值,描述了它们的功能和...
1. **系统控制**:通过调用Windows API,LabVIEW程序可以执行如关机、重启、休眠等系统操作,或者获取系统信息,如CPU使用率、内存状态等。 2. **文件操作**:Windows API提供了丰富的文件操作函数,如打开、读取、...
《Windows API参考大全》是程序员学习Windows平台编程的重要参考资料,它包含了丰富的函数、结构体、枚举类型等信息,帮助开发者深入理解操作系统级别的交互。Windows API(Application Programming Interface)是...
《Windows API常用技巧汇编》是一本专注于Windows操作系统编程技术的资源集合,它可能包含了光盘形式的视频讲座,旨在帮助开发者深入理解和掌握Windows API的使用。Windows API是微软为开发者提供的一个接口,通过...