Electronic Joint Business

Solution for E-Business

atl

基于 UMDF 编写虚拟读卡器驱动

智能卡和 PKI 是有趣的领域。这里你可以看到最先进的计算机安全技术及其在现实环境中的运用。但是,调试测试与智能卡相关的应用有时候十分痛苦,尤其是在运行负面测试用例的时候,很多时候,你手上没有太多的智能卡以供测试。一旦 PIN 码被屏蔽或 CSP 发出错误命令都可能导致智能卡状态不一致。这类问题相当普遍,所以我意识到,从事智能卡开发第一要务就是:你需要个模拟器来进行各种试验而不会有任何损失。本文并不准备谈论该如何实现智能卡的操作系统仿真(也许以后吧),而是先从开发虚拟智能卡阅读器的驱动程序入手。1

在网上搜索“虚拟驱动程序”可以找到很多有用的资源,但大多不是我想要的“傻瓜式指导”。我不是驱动开发专家;所以本文主旨不是“如何编写驱动程序”。而只是展示我在这个新领域里的一些探索,并希望对其他人有所帮助。

还有一种编写智能卡驱动的方法是编写自己的 winscard.dll 版本,并将它保存在要调试的应用程序的目录下。这种方法更简单,但也有一些缺点:

  • 要完全模拟 Windows 智能卡资源管理器,需要自己实现一些缺失的函数。
  • 要实现诸如 SCardGetStatusChange 等函数十分痛苦,特别要同时考虑真实的读卡器和模拟读卡器
  • 由于系统文件保护机制,你无法覆盖掉系统的 winscard.dll,对有些应用来说,想跳过它得大费周章。

尝试了两种做法之后,我认为重新编写个驱动的做法更为妥帖,并从中学习了不少有益的经验。要实现它,通过 Google 可以得到很多有用的资料。为了简单期间,我选用 UMDF (User Mode Driver Framework) 作为开发驱动的基础。我个人认为,它有以下优势:

  • 驱动中的错误不会导致蓝屏死机,开发更容易
  • 可以用你熟悉的调试器,比如 VS2008 来调试代码,而无需内核调试器,调试更容易
  • 在此用例中性能不是关键需求,一点性能开销不会有任何问题。

这里的代码是从 WDK 7.1中的示例 UMDFSkeleton 修改而来的。我会对代码中的重点部分进行解释,然后说明安装流程。

>>> 阅读全文

 

, , , , , , ,

用Visual Studio 2008开发IE浏览器帮助对象 之一

这篇文章是应同学们的要求写的,以前都是用 VC++ 6.0 和 Platform SDK 完成的. 迁移到 VS2008之后,原来 Visual Studio 6.0里的 BHO 向导不复存在,因此特此不厌其烦,详细说明,本文也适用于 VS2005.

BHO 简介和开发工具
首先谈 BHO 的开发工具,我偏向使用 VC++(unmanaged C++) 作为开发工具,因为 Java JVM 或 .Net CLR 的虚拟机是个很笨重的东西,也是内存杀手, 并不具备写 plugin 的快捷轻巧的特点.个人并不喜欢将其作为 Plug-in 的开发平台,不过我会有另文说明用 C# 开发 BHO 的全过程, 作为那些偏重开发效率的同学的参考.
其次是类库的选择,我倾向利用“活动模板库”(ATL) 来开发使用 C++ 的 BHO。之所以使用 ATL,是因为它方便地实现了我们可以按需进行扩展的基本样板。尽管使用“Microsoft 基础类”(MFC) 或 Win32 API 和 COM)也可以创建BHO,但 ATL 是为我们提供了自动处理许多细节的轻型库,包括建立含有 BHO 类标识符 (CLSID) 的注册表。

ATL 的另一个优势在于它的 COM 智能感知指针类(例如,CComPtr 和 CComBSTR),这些类可管理 COM 对象的生命周期。例如,CComPtr 在赋值时会调用 AddRef,而在对象被销毁或超出范围时会调用 Release。智能指针简化了代码并且有助于避免内存泄漏。当在单个方法范围内使用时,它们的稳定性和可靠性尤为有用。

介绍完ATL, 我们也简单介绍一下 BHO. BHO 是将自定义功能添加到 Internet Explorer 的轻型 DLL 扩展,除了 IE, BHO 还可以将功能添加到 Windows 资源管理器外壳程序.

 BHO 通常并不提供其自身的任何用户界面 (UI)。它们而是通过在后台响应浏览器事件和用户输入数据来发挥作用。例如,BHO 可以拦截弹出窗口、自动填充窗体或为鼠标手势添加支持。

>>> 阅读全文

 

, , , , ,