大多数 Windows CE 设备驱动程序都由一个平台相关驱动程序 (PDD) 和一个模型设备驱动程序 (MDD) 组成。整体式驱动程序 将所有 PDD 和 MDD 组合到一个驱动程序中。分层驱动程序 没有组合它们。
MDD 具有下列特征:
• | 包含给定类型的所有驱动程序所共有的代码。 |
• | 调用 PDD 函数以访问硬件。 |
• | 链接到 PDD 层,并且定义MDD 期望在该层中调用的设备驱动程序服务提供程序接口 (DDSI) 函数。 |
• | 向操作系统 (OS) 公开设备驱动程序接口 (DDI) 函数。 OS 的其他部分可以调用这些函数。相关设备可以共享相同的 DDI。整体式驱动程序还公开 DDI 函数。 |
• | 处理中断处理。 |
• | 可供开发人员重用。 |
• | 可以链接到多个 PDD。 |
• | 通常不需要进行更改。 如果进行了更改,则在将驱动程序迁移到将来的版本时可能会遇到麻烦。 |
• | 包含任何中断服务线程 (IST)。 |
PDD 具有下列特征:
• | 由硬件平台特有的代码组成。 |
• | 可能需要修改硬件平台。 |
• | 专门用于使用特定的 MDD 实现。 |
• | 公开 MDD 调用的 DDSI 函数。 整体式驱动程序不公开 DDSI 函数。 |
以下列表显示了在实现分层驱动程序和整体式驱动程序之间进行取舍时的注意事项:
• | 分层驱动程序可能只需要修改 PDD。 |
• | 分层驱动程序增加了设备驱动程序中的函数调用的系统开销,因为 MDD 调用到 PDD 中。 |
• | 整体式驱动程序改进了驱动程序性能,因为它将 MDD 和 PDD 到组合一个层之中,这消除了 MDD 对 PDD 进行的函数调用。 |
• | 整体式驱动程序更难以迁移到将来版本的 Windows CE,因为 Windows CE 所包含的大多数设备驱动程序都被划分为一个 PDD 和一个 MDD。 |
• | 如果设备的功能与 MDD 层中的函数执行的任务很好地匹配,则整体式驱动程序可以更简单、更有效。 |
不管是实现分层驱动程序还是实现整体式驱动程序,都可以将任何示例驱动程序的源代码作为实现的基础。