`
ldb19890624
  • 浏览: 243534 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

修正TaskManagerEx2.0的一个BUG

 
阅读更多

摘要:简要介绍一个Windows 任务管理器(Task Manager)功能扩展工具TaskManagerEx,同时指出了TaskManagerEx 2.0的一个与中文文件名有关的BUG并修正了这个BUG。

关键字:任务管理器 Task Manager 扩展

从Windows NT开始,Microsoft给Windows提供了一个功能强大的任务管理器(Task Manager),任务管理器功能强大,不仅能够查看程序运行过程中的资源、句柄、内存以及CPU占有率等计量信息,还能够中止正在运行的程序,任务管理器成为Windows最受欢迎的组件之一。虽然任务管理器功能多多,但还是有人觉得应该再多一些功能,Zoltan Csizmadia就是这些人中的一个。此君于2001年愚人节那天在CodeGuru网站上发表了一篇名为“Task Manager Extension”的文章,发布了一个他为任务管理器定制的扩展插件:TaskManagerEx。说TaskManagerEx是一个任务管理器插件其实有些牵强,因为Windows的任务管理器并没有提供扩展插件的接口,这个TaskManagerEx是用钩子强行“塞”任务管理器的,用黑客们的话说就是任务管理器被“Hacking”了。这个所谓的插件给Windows任务管理器添加了一个“Extension”菜单,添加了进程模块查看、句柄信息查看、窗口信息查看以及文件信息查看等功能,在2005年5月,Sergey Kolomenkin(可能是个俄国人?)在TaskManagerEx的基础上发布了2.0版本,添加了包括“memory map”在内的很多功能,大家可以通过以下链接查看Sergey Kolomenkin在CodeProject上发表的原文:http://www.codeproject.com/system/Task_Manager_Extension.asp。这片文章和Zoltan Csizmadia发表在CodeGuru上的那篇文章一样短小精悍,言简意赅,毕竟说得再多也没有,看代码才是硬道理,看看下面图片你就知道为什么TaskManagerEx如此受欢迎了:



不过Sergey Kolomenkin发布的这个2.0版本存在一个严重的BUG,使得TaskManagerEx在处理含有中文、韩文以及日文这样的Unicode字符串时丢失数据,最终的结果就是无法正常显示包含中文、韩文以及日文的文件名。出现这个错误的原因是Sergey Kolomenkin修改了SystemInfoUtils::LPCWSTR2CString()的实现代码(使用WideCharToMultiByte转换字符串),Sergey Kolomenkin的代码是这样的:

// From wide char string to CString
void SystemInfoUtils::LPCWSTR2CString( LPCWSTR strW, CString& str )
{
#ifdef UNICODE
// if it is already UNICODE, no problem
str = strW;
#else

ULONG len = wcslen(strW) + 1;
TCHAR* pBuffer = new TCHAR[ len ];
if( pBuffer == NULL )
{
ASSERT( FALSE );
str.Empty();
return;
}

int res = WideCharToMultiByte( CP_ACP, 0, strW, len, pBuffer, len, NULL, NULL );
if( res == 0 )
{
pBuffer[0] = _T('/0');
}

str = pBuffer;

delete [] pBuffer;
#endif
}

当程序采用非Unicode方式编译时,Sergey Kolomenkin采用wcslen(strW) + 1计算出转换后的字符串长度,并根据此值动态分配了存储控件,然后使用WideCharToMultiByte进行转换。代码处理英文字符串时可以正常工作,但是当字符串中含有中、日、韩这样的双字符文字时就会出错,主要原因是wcslen(strW) + 1计算出的长度不足以存放转换后的字符串,于是WideCharToMultiByte函数返回0,导致pBuffer[0] = _T('/0');被执行,于是pBuffer就成了空字符串。以下是出现BUG时的效果图:

图中加亮的一行是一个文件句柄(0x3D8),是Acrobat Reader打开了一个含有中文名的文件D:/100 个智力小游戏.pdf,由于上面提到的BUG导致文件名无法正常显示。现在将这个BUG fix,修改后的LPCWSTR2CString函数如下:

void SystemInfoUtils::LPCWSTR2CString( LPCWSTR strW, CString& str )
{
#ifdef UNICODE
// if it is already UNICODE, no problem
str = strW;
#else

ULONG len = wcslen(strW) * 2 + 1;
TCHAR* pBuffer = new TCHAR[ len ];
if( pBuffer == NULL )
{
ASSERT( FALSE );
str.Empty();
return;
}

int res = WideCharToMultiByte( CP_ACP, 0, strW, -1, pBuffer, len, NULL, NULL );
pBuffer[res] = _T('/0');

str = pBuffer;

delete [] pBuffer;
#endif
}

修改后再加载TaskManagerEx,就可以看到这个文件名了:


我已经在CodeProject上报告了这个BUG,呵呵,应该快有新版本出来了。

分享到:
评论

相关推荐

    bugfree2.0软件测试bug管理工具

    总的来说,BugFree 2.0 是一个实用的缺陷管理工具,尤其适合中小型企业或开源项目使用。通过有效的缺陷跟踪和团队协作,它能够帮助提升软件质量,优化开发流程。对于初次接触BugFree的用户,推荐先了解其基本概念和...

    东方授权系统2.0[无BUG+无后门+盗版检测功能+增加工单系统].txt

    东方授权系统2.0[无BUG+无后门+盗版检测功能+增加工单系统].txt

    .NET formwork 2.0 全角BUG 补丁 VS2005

    总之,.NET Framework 2.0的全角BUG是VS2005开发过程中一个值得注意的问题,通过安装官方发布的KB925488补丁,开发者可以有效地解决这一问题,保证代码质量和程序的正常运行。在日常开发工作中,及时关注并安装相关...

    Bugfree 2.0

    Bugfree 2.0 是一款深受开发者喜爱的开源项目,它借鉴了微软公司的软件研发理念,旨在为用户提供一个高效、免费的Bug管理工具。作为一款基于Web的应用,Bugfree能够支持跨平台的使用,无论你是在Windows、Linux还是...

    bugfree2.0下载、Xampp下载以及安装配置过程

    BugFree是一款开源的缺陷跟踪...总之,BugFree与XAMPP的结合为开发者提供了一个便捷的本地缺陷跟踪环境。通过遵循上述步骤,你可以在自己的计算机上快速搭建并开始使用这个强大的工具,从而提升软件开发的效率和质量。

    BugFree 2.0使用帮助

    ### BugFree 2.0 使用帮助详尽解析 #### BugFree 2.0 简介 ...综上所述,BugFree 2.0 不仅是一款强大的缺陷管理系统,还具备完善的 Bug 管理流程和支持功能,能够有效协助团队进行缺陷跟踪与管理,提高软件开发效率。

    btnet_3_6_4.zip_asp.net 2.0_btnet_bug tracker_tracker

    该工具的核心功能在于提供一个直观的界面,使得团队成员可以方便地报告、分配、优先级排序以及解决各种bug,从而提高软件开发的效率和质量。 在ASP.NET 2.0平台上,BTNET Bug Tracker充分利用了.NET Framework的...

    JingpinkeSystemApp 2.0 beta修正版

    《JingpinkeSystemApp 2.0 beta修正版详解》 JingpinkeSystemApp 2.0 beta修正版是一款专为用户打造的高效、便捷的系统应用软件,其核心在于提供...用户在下载并安装这个修正版后,可以期待一个全面提升的使用体验。

    bugfree2.0安装与配置

    XAMPP是一个流行的集成开发环境,包含了这些必要的组件。你可以从Apache Friends的官方网站(http://www.apachefriends.org/zh_cn/xampp.html)下载适合你操作系统的最新XAMPP版本。 1. 安装XAMPP后,你需要下载Bug...

    Marlin-bugfix-2.0.x

    Marlin-bugfix-2.0.x 是Marlin固件的一个特定版本,专注于修复已知问题和改进功能。Marlin是一款广泛使用的开源3D打印机固件,由C++编写,适用于多种基于ARM架构的微控制器,包括STM32F7在内的多款芯片。这个版本的...

    bugfree2.0 软件测试工具

    ### 一、Bugfree 2.0 主要特性 1. **需求管理**:Bugfree支持需求管理,用户可以创建、编辑和跟踪项目的需求,确保测试工作与项目目标保持一致。 2. **缺陷跟踪**:该工具的核心功能是缺陷跟踪,允许测试人员记录...

    驱动版键盘记录 XKeylogger 2.0 修复大部分bug 增加窗口记录

    XKeylogger 2.0在前一版本的基础上进行了大量的bug修复工作。这些bug可能会影响到记录的准确性、软件的稳定性以及后台运行时的资源消耗。修复这些问题后,2.0版本的XKeylogger在运行过程中更加稳定,减少了程序崩溃...

    lwip.rar_LwIP_lwip tcp bug_lwip2.0_lwip2.0 pu_lwip_2.0

    LwIP 2.0是一个重要的更新,它在1.x版本的基础上增加了许多新特性并优化了原有功能。 LwIP的主要目标是为资源有限的嵌入式设备提供网络连接能力,如微控制器或物联网设备。它的轻量级特性使其能够在极小的内存占用...

    Bugfree2.0入门教程

    开源的缺陷管理软件Bugfree2.0版本的非官方版入门教程。(pdf格式)

    [信息办公]BugFree v2.0 RC1 Build 20071031 (开源Bug管理系统)_bugfree.zip

    总结,BugFree v2.0 RC1 Build 20071031是一个强大而灵活的开源Bug管理系统,它为软件开发团队提供了一个全面的解决方案,帮助他们更好地管理和优化软件开发过程。无论是小型团队还是大型企业,都能从其丰富的功能和...

    计算器V2.0修正版(版本号V2.0.3.6)

    综上所述,【计算器V2.0修正版】是一个使用VB.NET语言开发的桌面计算器应用,具有修复已知bug、优化用户体验的特点。其开发过程遵循了用户反馈驱动的迭代模式,并且提供了源代码交流的可能性,展现了开源软件开发的...

    VE修改器2.0

    总的来说,【VE修改器2.0】是游戏爱好者提高游戏体验的一个实用工具,但使用时需谨慎,以免违反游戏的公平性原则,甚至触犯相关法律法规。同时,及时更新至最新版本可以确保最佳的使用效果和安全性。在享受修改带来...

    Avalondock集合涵盖了1.2 1.3 2.0 三个版本

    进入Avalondock 2.0,这是一个重要的升级,通常会带来重大改进和新功能。可能包括对现代操作系统和更高版本.NET Framework的支持,更新的UI设计趋势,以及对触摸设备的优化。这个版本也可能引入了更灵活的插件架构,...

Global site tag (gtag.js) - Google Analytics