ddk 派遣函数

对 Windows驱动开发技术详解 第七章的(派遣函数)自我理解
2009年09月19日 星期六 14:54

对 Windows驱动开发技术详解 第七章的(派遣函数)自我理解

BY:ALALMN—飞龙   QQ:316118740     BLOG:http://hi.baidu.com/alalmn

派遣函数其实就相当于应用程序的事件响应一样。
///
派遣函数
就是在入口点下(DriverEntry)的
pDriverObject->MajorFunction[......]
pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;
这就叫做派遣函数

///
IRP类型
IRP_MJ_CREATE                创建设备,CreatFile会产生此IRP
IRP_MJ_CLOSE                 关闭设备,CloseHandle会产生此IRP
IRP_MJ_CLEANUP               清除工作,CloseHandle会产生此IRP
IRP_MJ_DEVICE_CONTROL        DeviceIoControl函数会产生此IRP
IRP_MJ_PNP                   即插即用消息,NT式驱动不支持此种IRP,只有WDM驱动才支持此种IRP
IRP_MJ_POWER                 在操作系统处理电源消息时,产生此IRP
IRP_MJ_QUERY_INFORMATION     获取文件长度,GetFileSize会产生此IRP
IRP_MJ_READ                  读取设备内容,ReadFile会产生此IRP
IRP_MJ_SET_INFORMATION       设置文件长度,GetFileSize会产生此IRP
IRP_MJ_SHUTDOWN              关闭系统前会产生此IRP
IRP_MJ_SYSTEM_CONTROL        系统内部产生的控制信息,类似于内核调用DeviceIoControl函数
IRP_MJ_WRITE                 对设备进行WriteFile时会产生此IRP

///
结束IRP
VOID
IoCompleteRequest(
    IN PIRP Irp,             //代表需要被结束的IRP。
    IN CCHAR PriorityBoost   //代表线程恢复时的优先级别。
    );

PriorityBoost优先级别。
IO_NO_INCREMENT             不增加优先级
IO_CD_ROM_INCREMENT         光驱设备增加优先级
IO_DISK_INCREMENT           磁盘设备增加优先级
IO_KEYBOARD_INCREMENT       键盘设备增加优先级
IO_MOUSE_INCREMENT          鼠标设备增加优先级
IO_NAMED_PIPE_INCREMENT     命名管道增加优先级
IO_NETWORK_INCREMENT        网络设备增加优先级
IO_PARALLEL_INCREMENT       并口设备增加优先级
IO_SERLAL_INCREMENT         串口设备增加优先级
IO_SOUND_INCREMENT          声卡设备增加优先级
IO_VIDEO_INCREMENT          视频设备增加优先级
SEMAPHORE_INCREMENT         信号灯增加优先级

///
H:/Windows驱动开发技术详解/chapter07/DispatchTest/Test/
运行下面的程序用Dbgview监控 会发现出现了这个消息
KdPrint(("Enter HelloDDKDispatchRoutine/n"));
KdPrint(("Leave HelloDDKDispatchRoutine/n"));
这是应为Test.EXE
使用了CreateFile文件操作
而在驱动程序中定义了pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;
IRP_MJ_CREATE                创建设备,CreatFile会产生此IRP
这样就启动了HelloDDKDispatchRoutine函数
其实很好理解就是跟应用程序程序的事件响应是一样的。

///
派遣函数设置pIrp->IoStatus.Information 告诉ReadFile实际读取了多少字节。这个数值对应ReadFile的第4个参数。
读取文件
BOOL ReadFile(
  HANDLE hFile, //文件的句柄
  LPVOID lpBuffer, //用于保存读入数据的一个缓冲区
  DWORD nNumberOfBytesToRead, //要读入的字符数
  LPDWORD lpNumberOfBytesRead, //指向实际读取字节数的指针
  LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,那么必须,用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL
  );
写入文件
BOOL WriteFile(
  HANDLE hFile, // 文件句柄
  LPCVOID lpBuffer, // 数据缓存区指针
  DWORD nNumberOfBytesToWrite, // 你要写的字节数
  LPDWORD lpNumberOfBytesWritten, // 用于保存实际写入字节数的存储区域的指针
  LPOVERLAPPED lpOverlapped // OVERLAPPED结构体指针
  );

///
DeviceIoControl与驱动交互
BOOL DeviceIoControl(
HANDLE hDevice,             //已经打开的设备
DWORD dwIoControlCode,      //控制码
LPVOID lpInBuffer,          //输入缓冲区
DWORD nInBufferSize,        //输入缓冲区大小
LPVOID lpOutBuffer,         //输出缓冲区
DWORD nOutBufferSize,       //输出缓冲区大小
LPDWORD lpBytesReturned,    //实际返回字节数
LPOVERLAPPED lpOverlapped   //是否OVERLAP操作
);

///
#define CTL_CODE(DeviceType, Function, Method, Access)
DeviceType //设备对象的类型,这个类型应和创建设备(IoCreateDevice)时的类型相匹配。一般是形如FILE_DEVICE_XX的宏。
Function    //这是驱动程序定义的IOCTL码。其中:
               //0X0000到0X7FFF:为微软保留。     
               //0X800到0XFFF:由程序员自己定义。
Method      //这个是操作模式,可以是一列四种模式之一。
               //METHOD_BUFFERED 使用缓冲区方式操作。
               //METHOD_IN_DIRECT 使用直接写方式操作。
               //METHOD_OUT_DIRECT 使用直接读方式操作。
               //METHOD_NEITHER 使用其他方式操作。
Access      //访问权限,如果没有特殊要求,一般使用FILE_ANY_ACCESS。

///

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值