指导意见:我想在流程信息层面工作

时间:2009-11-03 00:04:58

标签: windows winapi

我找不到合适的头衔。我将用例子来表达我的疑问。

考虑以下软件:

    来自sysinternals(高级任务管理器)的
  1. Process explorer
  2. 资源管理器:resmon.exe(列出有关每个进程的资源使用情况的每个细节)。
  3. 对我来说,这些软件似乎是奇迹。我想知道这些甚至是如何制作的。来吧,用户进程如何知道其他进程的详细信息?谁告诉这个软件,正在运行什么进程以及利用了哪些资源?使用哪些dll?等。

    Windows操作系统是否向这些软件提供了这些信息?我的意思是(显然是最低级别的api)WIN32API。是否有一些函数,在调用时返回这些值

    抽象地说:

    • GetAllRunningProcesses()
    • GetMemoryUsedByProcess(Process * proc)

    等。

    其他类似的应用程序

    • 网络数据包捕获软件。它如何获取有关所有这些数据包的信息?它显然位于NIC卡的前面。怎么可能?
    • 防病毒:它扫描内存中的病毒。拦截其他进程。像用户应用程序空间的沙箱一样。怎么样?如何??

    如果是WIN32API。我发誓,我要掌握它。

    我不想创建多线程应用程序。我想获得有关其他多线程应用程序的信息。 我不想创建一个使用套接字进行通信的程序。我想学习如何学习如何捕获所有通信包。

    我实际上想要在 较低级别 工作。但我不知道,我应该学什么。请指导我正确的方向。

2 个答案:

答案 0 :(得分:1)

这真是一个非常开放的问题。对于像运行进程列表这样的内容,请查找“PSAPI”或“Toolhelp32”。有关特定进程的内存信息,可以使用VirtualQuery。

通常通过安装设备驱动程序来捕获网络数据包。如果你看,你应该能够找到关于如何编写设备驱动程序的相当数量,但不要期望在一夜之间创建奇迹,并且确实会在此过程中使机器崩溃几次(设备驱动程序在内核模式下运行) ,所以很难让错误的机器很难崩溃。

我对抗病毒的确定性并不是很清楚,因为我从来没有尝试过编写反病毒。我的直接猜测是他们的主要技术是API挂钩。可能还有更多,但是从来没有花足够的时间看着他们知道什么。

答案 1 :(得分:1)

马克·鲁西诺维奇的经典作品Windows Internals,如果你想深入了解这类东西,那就是最好的书。我注意到刚刚发布的第5版包括Vista。这是一个sample chapter来偷看。

如果您喜欢Process Explorer,那就是编写它的人,并且书中有很多使用它的例子。

另外,在1232个精装页面上,你可以用它来按你的衣服。