众所周知,WIN2K下用户态程序不能操作硬件,所以要读写端口可以通过WDM驱动来实现;对端口的读写可能是最简单的驱动程序了,但通过这个程序可以大体了解一下WDM工作流程,下面简单介绍一下端口读写驱动程序的实现方法。
我编制驱动的环境是Win2K+SP4/WIN2K DDK/DRIVER STUDIO 3.1。用DriverWizards可以生成驱动程序框架。我采用的是DeviceIoControl函数完成应用程序与驱动程序的通信 ,在DriverWizards内加入两个Control Code,Mothed选择为Buffered,意为系统分配一个缓冲区用于输入输出。
下面是读操作的处理函数:
NTSTATUS NdcardDevice::NDCARD_IOCTL_800_Handler(KIrp I) //读操作
{
NTSTATUS status = STATUS_SUCCESS;
t << "Entering NdcardDevice::NDCARD_IOCTL_800_Handler, " << I << EOL;
DATATRANSFER ds;
ds = *(PDATATRANSFER)(I.IoctlBuffer());