Electronic Joint Business

Solution for E-Business

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

智能卡和 PKI 是有趣的领域。这里你可以看到最先进的计算机安全技术及其在现实环境中的运用。但是,调试测试与智能卡相关的应用有时候十分痛苦,尤其是在运行负面测试用例的时候,很多时候,你手上没有太多的智能卡以供测试。一旦 PIN 码被屏蔽或 CSP 发出错误命令都可能导致智能卡状态不一致。这类问题相当普遍,所以我意识到,从事智能卡开发第一要务就是:你需要个模拟器来进行各种试验而不会有任何损失。本文并不准备谈论该如何实现智能卡的操作系统仿真(也许以后吧),而是先从开发虚拟智能卡阅读器的驱动程序入手。1 在网上搜索“虚拟驱动程序”可以找到很多有用的资源,但大多不是我想要的“傻瓜式指导”。我不是驱动开发专家;所以本文主旨不是“如何编写驱动程序”。而只是展示我在这个新领域里的一些探索,并希望对其他人有所帮助。 还有一种编写智能卡驱动的方法是编写自己的 winscard.dll 版本,并将它保存在要调试的应用程序的目录下。这种方法更简单,但也有一些缺点: 要完全模拟 Windows 智能卡资源管理器,需要自己实现一些缺失的函数。 要实现诸如 SCardGetStatusChange 等函数十分痛苦,特别要同时考虑真实的读卡器和模拟读卡器 由于系统文件保护机制,你无法覆盖掉系统的 winscard.dll,对有些应用来说,想跳过它得大费周章。 尝试了两种做法之后,我认为重新编写个驱动的做法更为妥帖,并从中学习了不少有益的经验。要实现它,通过 Google 可以得到很多有用的资料。为了简单期间,我选用 UMDF (User Mode Driver Framework) 作为开发驱动的基础。我个人认为,它有以下优势: 驱动中的错误不会导致蓝屏死机,开发更容易 可以用你熟悉的调试器,比如 VS2008 来调试代码,而无需内核调试器,调试更容易 在此用例中性能不是关键需求,一点性能开销不会有任何问题。 这里的代码是从 WDK 7.1中的示例 UMDFSkeleton 修改而来的。我会对代码中的重点部分进行解释,然后说明安装流程。 此外,由于虚拟读卡器会与桌面程序通讯以便进行模拟,所以我们将会看到 UMDF 驱动与用户进程之间的 IPC 通讯。 UMDF 驱动结构 正如之前说的, UMDf 极大简化了驱动的开发。你只需要编写一些实现某些核心接口的 COM (更确切地说,类似于 COM) 对象就可以了。我们来看一下该如何完成这部分工作。 用户模式的驱动类似于 COM 对象。因此,与 […]

, , , , , , ,

Comments are currently closed.