zoukankan      html  css  js  c++  java
  • Window API 第五篇 WTSEnumerateProcesses

    这个函数可用来枚举系统进程,先来看定义:

    BOOL WTSEnumerateProcesses(
      _In_  HANDLE            hServer,
      _In_  DWORD             Reserved,
      _In_  DWORD             Version,
      _Out_ PWTS_PROCESS_INFO *ppProcessInfo,
      _Out_ DWORD             *pCount
    );
    参数说明:
    hServer: 终端服务器的句柄,可以是调用WTSOpenServer()的返回值,或者用宏WTS_CURRENT_SERVER_HANDLE 来指定你的程序正在运行的终端服务器。到时候此参数可以为NULL,或者WTS_CURRENT_SERVER_HANDLE或者在控制台下输入nbtstat -n命令查看本地NetBIOS名称,
    进一步调用WTSOpenServer(LPTSTR pServerName)函数,即可得到hServer的句柄。
    这里有几个宏需要注意:
    #define WTS_CURRENT_SERVER ((HANDLE)NULL)
    #define WTS_CURRENT_SERVER_HANDLE ((HANDLE)NULL)
    #define WTS_CURRENT_SERVER_NAME (NULL)
    Reserved:保留参数,必须为0
    Version:指定枚举请求的版本,必须为1
    ppProcessInfo:输出参数,指向PWTS_PROCESS_INFO结构的指针, WTS_PROCESS_INFO 结构里存有进程的信息,包括name和ID
    pCount:输出参数,返回枚举到的个数,即PWTS_PROCESS_INFO的数量。

    返回值:成功返回非零,失败返回0。
    说明:需要引入头文件:#include <WtsApi32.h> 还要导入静态库 #pragma comment (lib, "Wtsapi32.lib")
    需要注意,如果调用了WTSOpenServer()函数,最后要调用WTSCloseServer()函数释放资源。但不论何时都别忘了调用WTSFreeMemory()函数释放PWTS_PROCESS_INFO指针资源。
    下面举一个简单的例子


    void main()
    {
         PWTS_PROCESS_INFO ppi;
         DWORD dwCounts; 
         BOOL bRet = WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0, 1, &ppi, &dwCounts);
         if (!bRet)
             return ;
    //这里先把ppi存起来,方便以后释放,当然如果用数组下标的形式访问的话就不用这样繁琐了
    PWTS_PROCESS_INFO ppiTemp = ppi;
         for (int i = 0; i< dwCounts; i ++)
         {
            printf("%s 	 %d 
    ", ppi->pProcessName, ppi->ProcessId);//ppi[i].pProcessName
            ppi ++;
          }
       //内存泄漏就是从这里来的,好多人要忘记这里
       WTSFreeMemory(ppiTemp);
      getchar();
    }
    
  • 相关阅读:
    vue Ant Design 树形控件拖动限制
    defineProperty介绍及使用
    webpack 配置入门
    vscode 插件
    解决输入框自动填充账号密码的问题
    css 动画
    vue按钮权限控制
    git操作
    TCP和UDP的区别
    通信协议 HTTP TCP UDP
  • 原文地址:https://www.cnblogs.com/priarieNew/p/9754113.html
Copyright © 2011-2022 走看看