简易流驱动项目开发指南
1. 流驱动基础函数
在与设备驱动进行 I/O 操作时,应用程序通常会经历打开流、执行读写操作,最后关闭流这几个步骤。主要涉及的函数有XXX_Open、XXX_Close、XXX_Read和XXX_Write。
IOControl函数是可选的,但大多数流驱动会大量使用该函数。Seek函数同样可选,一般较少使用,它源自早期用于串行媒体设备(如磁带驱动器)的流驱动。开发者可根据需求实现Seek函数。PreClose函数也是可选的,可用于唤醒可能处于睡眠状态的开放上下文线程,以便将其关闭。只有在执行异步 I/O 操作时,才需要包含Cancel函数。
流电源函数通常不被实现。在设备驱动中实现电源功能的推荐方法是使用系统电源 IOCTL。这些函数在内核模式下运行,因此驱动必须在内核模式下加载,这些函数才能按要求运行。此外,流电源函数存在显著的编码限制,例如不能进行系统调用,未处理的异常可能导致系统停止。PowerDown函数应仅用于快速关闭设备硬件,且不能阻塞;PowerUp函数应仅用于快速进行设备的硬件级恢复,同样不能阻塞。
2. 创建简单流驱动项目
创建新的流驱动项目有多种方法:
- 在 Platform Builder 中创建新的 DLL 子