zoukankan      html  css  js  c++  java
  • 获取信息的有关Windows API(最有意思是OpenProcess和GetProcessMemoryInfo)

    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_MACHINESYSTEMCurrentControlSetControlSession ManagerEnvironment,当然要使用注册表的函数。
    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_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion)获取相关信息:
    GetTickCount();
    // 获取开机时间;
    GetComputerName(szInfo, &dwInfo);
    // 获取计算机名称;
    GetUserName(szInfo, &dwInfo);
    // 获取计算机用户名;
    GetWindowsDirectory(szInfo, MAX_PATH + 1);
    // 获取Windows目录;
    GetSystemDirectory(szInfo, MAX_PATH + 1);
    // 获取系统目录;

    http://www.ccrun.com/article.asp?i=618&d=t223ro

  • 相关阅读:
    自动刷新页面
    超链接<A>链接到某个文档
    JS脚本的对话框
    表最后更新的标识列
    c#对象私有属性在重载Equals中的使用
    一个关于在Fedora下安装jdk的问题
    表格的行转列
    UNION和UNION ALL的区别
    关于使用存储过程的一些好处以及注意事项[转]
    SQL 外链接操作小结
  • 原文地址:https://www.cnblogs.com/findumars/p/5277690.html
Copyright © 2011-2022 走看看