任务管理器扩展 2.0






4.92/5 (147投票s)
任务管理器扩展。这是一个Windows任务管理器(NT/2000/XP/2003)的插件。它为标准的任务管理器增加了许多有用的功能。它可以显示进程模块、内存映射、使用的句柄、打开的文件、文件属性以及许多其他信息!
目录
引言
任务管理器扩展(TaskManagerEx)是Windows内置任务管理器的插件。它扩展了基本功能,并提供了对运行进程的强大控制。任务管理器扩展可以显示进程模块、进程内存映射、使用的内核句柄、打开的文件、文件属性以及许多其他信息!它在 许多情况下都非常有用。
在这里可以看到加载了任务管理器扩展插件的任务管理器窗口
![]() |
![]() |
任务管理器扩展显示更多进程,为进程上下文菜单添加了许多有用的项目,为主窗口菜单添加了新的“扩展”子菜单,等等...
变更
2.1 版本变更
- 增加了对 Visual Studio 2005 编译的兼容性
- 修复了多个任务管理器窗口的 bug
- 将启动画面显示时间从3秒缩短到1秒
- 在“进程信息”对话框中添加了“服务列表”
- 在“进程信息”对话框中添加了“命令行”和“环境变量”信息
- 修复了“进程信息”对话框的缩放 bug
- 修复了“总在最前”选项的 bug
- “每日提示”现在默认隐藏
- 移除了多字节字符 bug(针对文件和内核对象名称)
- 添加了卸载功能(通过 TaskManagerEx.exe 命令行参数)。
- 警告!未能移除绘制时的 bug(有时带列表视图的对话框会显示乱码)...(自 1.0 版本以来就存在)
2.0 版本变更
- 查看进程线程。
- 查看内存映射。
- 编辑进程安全。
- 查看进程基本信息。
- 查看进程可执行文件依赖项(在此之前至少需要运行一次 MS VC++ 6 的 depends.exe)。
- 进程可执行文件属性。
- 查看模块文件属性。
- 查看已加载的驱动程序。
- 编辑对象安全。
- 按名称的一部分查找对象。
- 选项:随 Windows 启动任务管理器扩展。
- 俄语本地化。
- 修复了大量 bug。
- 增加了大量新的小功能。
功能(来自原始版本)
- 在进程列表中显示应用程序图标(如果可用)。
- 为服务使用不同的颜色。
- 查找任何进程使用的文件。(使用 * 作为文件名以显示所有使用的文件。)(搜索是全文本搜索,因此您可以使用扩展名。)
- 查找任何进程使用的模块。(搜索是全文本搜索,因此您可以使用“kernel”进行搜索。)
- 在“应用程序”选项卡中显示进程 ID。
- 当 CPU 使用率达到给定限制(25%、50%、75%)时,使用不同的颜色表示进程。
- 查询给定进程使用的所有文件、句柄、模块、窗口的列表。
- 关闭使用的文件(您可以解锁独占打开的文件,以便删除它)。
- 卸载使用的模块(以便您可以删除它)。
- 您也可以结束服务。
- 快速结束进程:只需按 DEL 键!
兼容性
任务管理器扩展(TaskManagerEx)可在 Windows 2000、Windows XP、Windows 2003 上正常运行。
它不能在任何 Windows 9x、Windows NT 或任何 Windows x64 上运行。我还测试了任务管理器扩展在 Windows Vista 上的运行,但它不起作用。我没有找到简单的方法来改进任务管理器扩展使其与 Vista 的任务管理器兼容... :-(
目前支持两种语言——英语和俄语。但它也可以用于任何其他本地化的 Windows。在俄语版 Windows 中,任务管理器扩展会以俄语显示所有菜单项等。当所有用户界面都使用通用语言时,看起来非常原生。
在使用任务管理器扩展时,需要用户拥有管理员权限。没有这些权限,某些功能可能无法正常工作或工作缓慢。
使用任务管理器扩展
警告
警告! 任务管理器扩展可能对您的系统非常危险!您必须清楚自己在对系统内部进行操作!如果您终止了某个系统线程、卸载了一个库或关闭了一个重要的句柄,您可能会导致系统崩溃。请自行承担使用任务管理器扩展的风险!
编译
在 Visual Studio 6.0 (VC++ 6.0) 上编译任务管理器扩展时,需要安装现代的 Platform SDK。您可以从 这里 下载 2003 年 2 月的 Windows Server 2003 PSDK Full Download with Local Install。
Visual Studio .NET 不需要额外的 SDK,并且从这个版本的任务管理器扩展开始完全支持。系统会提示您转换 6.0 格式的工作区和项目文件。
编译任务管理器扩展只需要两个项目
- TaskManagerEx
- TaskManagerExDll
您可以编译 ANSI 或 Unicode 版本的任务管理器扩展。两者都应该可以正常工作。
安装
任务管理器扩展不需要特殊安装
- 将 TaskManagerEx.exe 和 TaskManagerExDll.Dll 复制到您计算机上的任何文件夹。
- 运行 TaskManagerEx.exe。
- 按 Ctrl+Shift+Esc 或按 Ctrl+Alt+Del 并选择“任务管理器”来运行任务管理器(在 Windows XP 上,Ctrl+Alt+Del 会立即加载任务管理器)。
现在任务管理器应该具有扩展功能了!
您可以使 TaskManagerEx.exe 在登录时启动:选择菜单“扩展\选项”,在出现的对话框中勾选“在 Windows 登录时运行”,然后按“确定”。
卸载
您可以运行 TaskManagerEx.exe /clean 命令。它将完全卸载并注销任务管理器扩展!TaskManagerEx.exe 和 TaskManagerExDll.Dll 文件将保留在磁盘上。此操作等同于以下操作:
- 注销 TaskManagerEx.exe 在 Windows 登录时运行的设置。
- 卸载 TaskManagerEx.exe。
- 重启现有的任务管理器以卸载 TaskManagerExDll.Dll。
提示!尝试运行 TaskManagerEx.exe /? 查看所有支持的命令行参数!
使用场景
任务管理器扩展在许多情况下都非常有用。其中一些描述如下。
首先,我想说的是,任务管理器扩展为任务管理器提供了一些额外的安全权限,因此它可以停止以前会生成“拒绝访问”的进程!您可以查看甚至终止运行服务的进程。
检测进程服务列表、命令行和环境变量
使用任务管理器扩展,您可以获取系统中任何进程的命令行。您只需要使用进程上下文菜单项“信息...”即可。
您还可以检测选定进程中正在运行的服务。当其中一个 SVCHOST.EXE(或其他服务可执行文件)占用了您 100% 的 CPU,而您又不知道是哪个服务出了问题时,这非常有用。
删除被阻止的文件:查找使用的文件或模块
有时删除文件是不可能的。您可能想要删除一个被某个应用程序打开的文件。也许您正在开发一个钩子 DLL(或 COM 组件),但由于您的 DLL 已加载到某些进程中而无法删除它。在这种情况下,您可以选择任务管理器主菜单项“扩展/查找使用的文件...”或“扩展/查找使用的模块...”
此对话框将帮助您找到使用指定文件或可执行模块的所有进程。您只需输入文件、文件夹或模块的一部分,然后按 Enter 键。“*”特殊值匹配所有文件(或模块)。请注意,已加载的模块可能不会像文件一样被打开,反之亦然!因此,“查找使用的文件...”对话框将找不到已加载的模块。用户输入的字符串将在文件的整个路径中进行搜索。
防病毒和反木马保护
有时,防火墙可能会发出警告,询问关于某个进程的网络活动。有时您会在任务管理器中看到一个您不认识的奇怪进程,或者一个占用 90-100% CPU 的进程。使用任务管理器扩展,您可以轻松检查有关可疑进程的大量信息。
首先,您可以检查文件信息(通常通过文件上下文菜单的“属性”项显示)。任务管理器扩展提供了相应的进程上下文菜单项。所有 Windows 内置模块在其资源中都具有正确的 VS_VERSION_INFO
结构。
如果可执行模块位于 Windows 文件夹中,并且根本没有“版本”选项卡,或者供应商不是 Microsoft,那么所选模块是病毒的可能性非常大。病毒通常不包含正确的 Windows 版本信息,因为其作者不知道您将使用哪个版本的 Windows。
获取进程重要信息的第二种方法是上下文菜单的“模块...”项。这对于 RUNDLL32.EXE 或 RUNDLL.EXE 进程尤其重要。这些进程是 Microsoft 编写的用于运行其他 DLL 的可执行文件(具有正确的版本信息)。
在此对话框中,您可以使用上下文菜单直接查看任何模块的文件属性。如果进程似乎是 Windows 内部进程,那么它的所有模块通常都位于 Windows 文件夹中,并且具有与您的 Windows 版本相匹配的版本信息。有少数例外:Windows Hook DLLs 可能加载在任何地方(可能是来自鼠标驱动程序、多媒体键盘驱动程序、Lingvo 加载器等的 DLL)。某些 DLL 也可能位于正确的 Microsoft 文件夹中,例如“C:\Program Files\Common Files\Microsoft Shared”。
这些是您计算机上反病毒战争的基础。我的经验表明,最终用户总会找到一种新的、意想不到的使用我程序的方式。:-)
调试:库的使用
您可以通过进程上下文菜单的“模块...”项查看进程模块列表。
您应该注意“使用次数”列。它包含库的使用计数器。在调用 LoadLibrary()
时递增,在 FreeLibrary()
时递减。“固定”模块是主可执行模块以及与之静态链接的所有库。这些库不会递增它们的计数器,也不会被卸载。您可以通过模块上下文菜单来递增或递减使用计数器。当计数器变为零时,库会自动卸载。请小心!
调试:内核对象的使用
您可以使用进程上下文菜单的“句柄...”项查看您的所有句柄。
在这里,您可以看到进程对各种内核对象的所有句柄。其中一些有名称,您可以查看它们。您可以查看和编辑对象安全信息。大多数对象在其上下文菜单中支持特殊操作。但是,每个句柄都支持关闭。
如果您只想查看打开的文件,那么最好选择“文件...”进程上下文菜单项。它与“句柄...”相同,但会过滤以仅显示文件对象。
其他任务管理器扩展截图
结论
历史
四年前,我找到了 TaskManagerEx。我没有源代码,并且使用它很长时间了。它已经够好了,但我总是希望这个实用程序能有更多功能。我希望任务管理器扩展有一些额外的功能,当时我偶然发现了 Zoltan 在 CodeGuru 上的文章(CodeGuru: Task Manager Extension)。我和 Zoltan 进行了交谈,并编写了任务管理器扩展的新版本。它基于其公开的源代码。在开发和重构旧代码的过程中,一直有一个大问题:Zoltan 在 5 年前是怎么写出来的?关于许多未公开的功能,没有任何信息。我现在掌握了其中一些信息,但他是在很久很久以前编写和调试他的代码的!这真是伟大的工作,Zoltan!
当我编写 2.1 版本时,我突然发现了 Windows 2000 的源代码。我查看了它们,并找到了任务管理器的源代码。看到我们用 IDA、Spy++ 等反编译的所有常量和逻辑,真是太令人兴奋了……很高兴验证任务管理器扩展使用了最正确的方式之一来破解 Windows 任务管理器。
类似软件
在编写完任务管理器扩展 2.0 后,我发现了 Sysinternals 的 ProcessExplorer。ProcessExplorer 比任务管理器扩展做得更多,但它是独立运行的,而任务管理器扩展是内置于系统中的(美观且紧密集成)。ProcessExplorer 还有一个缺点:它没有公开源代码。一段时间前,Microsoft 收购了 Sysinternals,所以您可以在 这里 找到 ProcessExplorer 安装程序。
鸣谢
感谢 Zoltan Csizmadia 编写了 TaskManagerEx 的原始版本。TaskManagerEx 在我的工作中帮助了我很多次,并鼓励我写了一个改进的版本。
感谢所有对 CodeGuru 和 The Code Project 做出贡献的人。
感谢 Yura Semashko、Konstantin Karatov、Alexey Grakov、Ivan Kirkorov 验证我的文章。
感谢 nova_、Simon.W、wumpus1 以及 CodeProject 的其他测试 TaskManagerEx 2.0 的用户。
感谢 Mike Russell。他进行了一次捐赠,并告诉我任务管理器扩展如何帮助了他。这一经历激励了我删除旧 bug,编写新版本,并为它写一篇文章。