最近访客
李落尘Ustinian的头像-  侠者非攻社区
李落尘Ustinian

AntiMonitor wtsapi32 EnumProcess 进程遍历

机器人
摘要
Mxchild
生成中...

基础知识

🎯 核心功能

WTSEnumerateProcessesW 是一个 Windows API 函数,它主要用于枚举指定终端服务器上的活动进程。通过调用此函数,你可以获取一个包含进程ID、进程名等信息的列表,这对于系统监控、任务管理或诊断工具的开发非常有用。

BOOL WTSEnumerateProcessesW(
  [in]  HANDLE             hServer,
  [in]  DWORD              Reserved,
  [in]  DWORD              Version,
  [out] PWTS_PROCESS_INFOW *ppProcessInfo,
  [out] DWORD              *pCount
);

📝 关键参数与使用要点

该函数的核心参数包括:

  • hServer:指定终端服务器句柄。使用 WTS_CURRENT_SERVER_HANDLE 通常表示本地服务器。
  • ppProcessInfo:这是一个输出参数,函数成功后会返回一个指向 PWTS_PROCESS_INFO 结构数组的指针。这个结构里存有进程的信息,包括进程名和进程ID。
typedef struct _WTS_PROCESS_INFOA {
  DWORD SessionId;               // 与进程关联的会话的远程桌面服务会话标识符
  DWORD ProcessId;
  LPSTR pProcessName;
  PSID  pUserSid;                // 指向进程的主要访问令牌中的用户 安全标识符 的指针
} WTS_PROCESS_INFOA, *PWTS_PROCESS_INFOA;
  • pCount:返回枚举到的进程数量。

在使用时,有两点需要特别注意:

  1. 内存管理:函数内部会分配内存来存储进程信息。因此,在不再需要返回的 ppProcessInfo 数据时,务必调用 WTSFreeMemory 来释放内存,避免内存泄漏。
  2. 库依赖:需要使用 Wtsapi32.lib 库,并包含 WtsApi32.h 头文件。

💡 主要特点与应用场景

WTSEnumerateProcessesW 的一个便利之处在于,在某些情况下(例如在本地服务器上枚举进程),它可能不需要过高的权限就能获取进程列表,相比之下,一些其他枚举方法(如使用PSAPI中的EnumProcesses)对权限要求特别高,即使以管理员权限运行,仍然有许多进程信息得不到。

因此,它特别适合用于:

  • 开发类任务管理器的系统工具。
  • 监控终端服务器(如Remote Desktop Services)上的用户进程。
  • 需要跨会话枚举进程的应用程序。

⚠️ 注意事项

此函数是 WTSEnumerateProcesses 的宽字符(Unicode)版本。在编程时,确保你的字符串处理与之一致。

示例代码

#include <iostream>
#include <windows.h>
#include <wtsapi32.h>

#pragma comment(lib, "Wtsapi32.lib")


void EnumProcess_wtsapi32()
{
    PWTS_PROCESS_INFOW pProcessInfo = NULL;
    DWORD pCount = 0;

    if (!WTSEnumerateProcessesW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pProcessInfo, &pCount))
    {
        printf("WTSEnumerateProcessesW Failed -> 0x%08x\r\n", GetLastError());
    }

    for (size_t i = 0; i < pCount; i++)
    {
        WCHAR*  processName = pProcessInfo[i].pProcessName ? pProcessInfo[i].pProcessName : (WCHAR*)"UnKnow";

        wprintf(L"%-8d %-8d %-100s\r\n",
            pProcessInfo[i].ProcessId,
            pProcessInfo[i].SessionId,
            processName);
    }
}

int main()
{
    EnumProcess_wtsapi32();
}
图片[1]-  AntiMonitor wtsapi32 EnumProcess 进程遍历-  侠者非攻社区
本站一切资源仅供学习交流使用请勿商业运营,严禁从事违法侵权等任何非法活动,否则后果自负!
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 共2条

请登录后发表评论