网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > VC++ > 正文
枚举本地-远程NT系统进程
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
ame;


  ULONG BasePriority;


  ULONG ProcessId;


};





typedef NTSTATUS (__stdcall *NtQuerySystemInformation1)(


    IN ULONG SysInfoClass,


         IN OUT PVOID SystemInformation,


         IN ULONG SystemInformationLength,


         OUT PULONG RetLen


         );


int main()


{


  HINSTANCE hNtDll;


  NtQuerySystemInformation1 NtQuerySystemInformation;


  NTSTATUS rc;


  ULONG ulNeed = 0;


  void *buf = NULL;


  size_t len = 0;


  struct process_info *p ;


  int done;





  hNtDll = LoadLibrary ("NTDLL");


  if (!hNtDll)


    return 0;


  NtQuerySystemInformation = (NtQuerySystemInformation1)GetProcAddress (hNtDll,


                           "NtQuerySystemInformation");


    if (!NtQuerySystemInformation)


       return 0;





  do {


    len += 0x1000;


    buf = realloc (buf, len);


    if (!buf)


       return 0;


    rc = NtQuerySystemInformation (5, buf, len, &ulNeed);


  } while (rc == 0xc0000004); // STATUS_INFO_LEN_MISMATCH





  if (rc <0) {


    free (buf);


    return 0;


  }





   printf("\nProcessName     ProcessID");





  p = (struct process_info *)buf;


  done = 0;





  while (!done) {


    if ((p->ProcessName.Buffer != 0))


    {


       printf("\n%-20S%d",p->ProcessName.Buffer,p->ProcessId);


    }


    done = p->NextEntryDelta == 0;


    p = (struct process_info *)(((char *)p) + p->NextEntryDelta);


  }


  free (buf);


  FreeLibrary (hNtDll);


  return 0;


}





<<第四部分:从PDH中取得本地/远程系统进程信息>>


   前面说的三种方法都只能枚举本地的系统进程,如何枚举远程系统的进程呢?目前我只知道从PDH中取得进程信息。


   OK!我先简单的说说PDH是什么东西,hoho~难的偶也不会。PDH是英文Performance Data Helper的缩写,Windows NT一直在更新这个称为Performance Data的数据库,这个数据库包含了大量的信息,例如CPU使用率,内存使用率,系统进程信息等等一大堆有用的信息,可以通过注册表函数来访问。注意哦,Windows 9x中并没有配置这个数据库。但是,这个数据库中的信息布局很复杂,很多人并不愿意使用它,包括我。而且刚开始的时候,它也没有自己特定的函数,只能通过现有的注册表函数来操作。后来,为了使该数据库的使用变得容易,MS开发了一组Performance Data Helper函数,包含在PDH.DLL文件中。


    Windows 2000默认是允许远程注册表操作的,所以我们就可以通过连接远程系统的注册表,从它的PDH中取得我们所需要的系统进程信息了,当然这需要远程系统的Admin权限。


    OK!我们下面所举的例子是直接利用注册表函数来从本地/远程系统的PDH数据库中取得我们所需要的数据的,我们并没有利用PDH API。


    程序代码如下:


/**************************************************************************


Module:ps.c


Author:mikeblas@nwlink.com


Modify:ey4s<ey4s@21cn.com>


Http://www.ey4s.org


Date:2001/6/23


**************************************************************************/


#include <stdio.h>


#include <windows.h>


#include <Winnetwk.h>





#define INITIAL_SIZE   
  • 上一篇资讯: 获得OnOK退出控制
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号