一、RtlInitUnicodeString

作用:该函数用来**初始化**一个**UNICODE_STRING**字符串,UNICODE_STRING用来存储**设备对象名称**
函数原型:VOID RtlInitUnicodeString(IN OUT PUNICODE,DestinationString,IN PCSZ SourceString)
参数:IN OUT PUNICODE,DestinationString:为将要被初始化的UNICODE_STRING字符串,既是输入参数,又是输出参数IN PCSZ SourceString为初始化的UNICODE_STRING字符串的内容,输入参数

二、IoCreateDevice

作用:该函数用来创建设备对象
函数原型:
     NTSTATUS IoCreateDevice(IN PDRIVER_OBJECT DriverObject,IN ULONG DeviceExtensionSize,IN PUNICODE_STRING DeviceNameOPTIONAL,IN DEVICE_TYPE DeviceType,IN ULONG DeviceCharacteristics,IN BOOLEAN Exclusive,OUT PDEVICE_OBJECT *DeviceObject);

参数:
IN PDRIVER_OBJECT DriverObject:指向调用该函数的驱动程序对象的指针,也就是驱动程序去创建设备对象
IN ULONG DeviceExtensionSize:指定设备扩展结构的大小
IN PUNICODE_STRING DeviceNameOPTIONAL:该设备的名称,是一个Unicode字符串指针,必须是一个完整的设备路径名(WDM驱动和过滤驱动程序的设备对象没有名字,改参数为NULL)
IN DEVICE_TYPE DeviceType:设备类型,如FILE_DEVICE_DISK,FILE_DEVICE_KEYBOARD
IN ULONG DeviceCharacteristics:常量或常量组合,指出设备的特征信息
IN BOOLEAN Exclusive:表明设备是否独占,非独占为FALSE
OUT PDEVICE_OBJECT *DeviceObject:用来接收创建的设备对象,其实也就是输出
注意:许多函数通过引用或者指针作为函数入口形参的方式,并作为输出

三 、IoDeleteDevice

作用:该函数用来删除一个设备对象,参数是一个设备对象指针,这里就与IoCreateDevice创建的设备对象指针不谋而合了
函数原型:
IoDeleteDevice(pDevObj);

四、IoCreateSymbolicLink

作用:该函数在设备名和用户可见名字之间创建符号链接(SymbolicLink),其实也就是给设备对象创建一个外号,专门供应用程序访问,原因是IoCreateDevice函数创建的设备名称Unicode字符串(也就是一个路径名)只显示在内核态,操作系统可以看到,应用程序看不到,所以应用程序不能通过设备名称打开这个对象,所以需要给他取个应用程序可以看到的外号,也称为符号链接。
函数原型:
 NTSTATUS IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName,IN PUNICODE_STRING DeviceName);
参数:
SymbolicLinkName:Unicode字符串指针,是一个用户态可见的名称,例如“L\\??\\HelloDDK”,L表示长字符串,??表示驱动器,具体什么类型暂定
DeviceName:Unicode字符串指针,是驱动成熟穿件的设备对象名

五、IoCompleteRequest

该函数表示完成所有I/O请求处理操作,并将给定的IRP返回给I/O管理器,其中I/O管理器是操作系统中一个负责输入输出管理的东西。
函数原型:
VOID IoCompleteRequest
(IN PIRP Irp,IN CCHR PriorityBoost
);
参数:IN PIRP Irp:完成IO请求的IRP指针IN CCHR PriorityBoost:指出是否增加运行时要求操作的原始线程的优先权。被阻塞的线程以何种优先级恢复运行。

通常优先级设置为IO_NO_INCREMENT,表示不增加优先级。
如果原始线程需要驱动程序快速地完成处理,或者IRP填充完成时有错误发生,那么这个值就应该设为IO_NO_INCREMENT。对某些特殊情况,需要将被阻塞的线程以“优先”的身份恢复运行。如键盘、鼠标等设备,他们需要更快的反应。
以下是优先级状态:
/*
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_SERIAL_INCREMENT 串口设备增加的优先级
IO_SOUND_INCREMENT 声卡设备增加的优先级
IO_VIDEO_INCREMENT 视频设备增加的优先级
SEMAPHORE_INCREMENT 信号灯设备增加的优先级
*/

Windows之WDM驱动程序开发:class3相关推荐

  1. WDM 驱动程序开发

    1.概述  引入了全新的WDM (Win32 Driver Model)的驱动程序架构,说是新技术,其实早在1997年Microsoft就提出了该项技术并在Windows 98中得到了充分的应用,换句 ...

  2. Windows CE下驱动程序开发基础

    我想即使读者看过微软的关于驱动开发的培训教材和CE帮助文档中的驱动部分,头脑中仍然一片茫然.要想真正了解驱动程序必须结合一些驱动程序源码,在此我以串口驱动程序(COM16550)中初始化过程为线索简单 ...

  3. 《Win7设备驱动程序开发》学习笔记

    <Windows 7 设备驱动程序开发>是美国Ronald D. Reeves著的一本关于WDF模型的Windows 驱动程序开发教程,适用于Win7和Win10.本文我学习该书的一些笔记 ...

  4. windows驱动程序开发(普及)

    1.用户态驱动驱动程序和核心态驱动程序 下图描绘出了操作系统驱动程序的相关组成部分的概貌: Windows驱动程序既可以运行在用户态也可以运行在核心模态. l         用户态的驱动程序运行在非 ...

  5. WINDOWS下PCI接口卡WDM驱动程序的DMA编程技术1

    摘要:     本文主要讨论了在Windows环境下开发PCI接口卡DMA应用的WDM编程技术,并给出了一个应用DriverWorks和VC++开发的实例程序代码. 关键词:Windows.PCI总线 ...

  6. Windows驱动——利用WinDriver开发PCI设备驱动程序

    摘要 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发.作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果.从 ...

  7. 从零开始学习Windows WDF驱动程序开发

    摘要:本文通过简单的例子和精简的说明,带你快速了解和掌握基于WDF架构的Windows驱动程序的开发过程.WDF自带的文档非常详细而且冗长,读者需要一定的编程基础和英语水平,再加上一定的努力,才能看明 ...

  8. wdm设备驱动程序开发pdf_世界顶级Linux技术大师力作1000页Linux开发实战

    20世纪90年代初,Linux操作系统诞生,随着虚拟化.云计算.大数据.容器技术的出现和人工智能时代的来临,Linux 以迅雷不及掩耳之势飞速发展,占据着整个服务器行业的半壁江山,但同时也面临着巨大的 ...

  9. WDM驱动程序介绍(引)

    http://zhidao.baidu.com/question/56715021.html WDM(Windows driver model)是微软为开发人员提供的一种编写运行在Windows平台下 ...

  10. WDF模型驱动程序开发

    WDF驱动程序开发  1. 引言  设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作.设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此 ...

最新文章

  1. ecshop目录结构
  2. apache+mod_wsgi+django的环境配置
  3. linux编译动态库之-fPIC
  4. Spring的注解形式:@Repository、@Service、@Controller
  5. 常识分析 | 为什么 CPU 访问硬盘很慢
  6. 2018蓝桥杯A组:方格计数(3种方法)
  7. 估算项目工作量的方法:定额法
  8. Java数组分配的关键字_理解JAVA数组 - 小南超子的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. Rimworld Mod教程 第六章:Defs文件
  10. mybatis 的大于号 小于号 大于等于 小于等于
  11. Mac运行Pycharm崩溃
  12. java表达upll导包在哪_用java实现http断点续传.mht 源代码在线查看 - 自己平时从网上搜集的http协议解析文档 资源下载 虫虫电子下载站...
  13. 【已解决】ModuleNotFoundError: No module named ‘snmp_cmds‘ 缺少snmp-cmds包
  14. 【WSN定位】基于matlab灰狼算法优化无线传感器非测距定位【含Matlab源码 2008期】
  15. 住房教育当从娃娃抓起
  16. H+框架 通过按钮新增选项卡功能
  17. 【复变函数】常用公式大全
  18. 聚焦:XuperOS成长计划FAQ
  19. pb11 打印 自定义纸张_如何设置datawindow的打印纸张大小为指定的长、宽
  20. FFplay文档解读-20-音频过滤器五

热门文章

  1. YYText 源码剖析:CoreText 与异步绘制
  2. 淘宝婴儿商品销量分析
  3. SACD ISO镜像中提取DSDIFF(DFF)、DSF文件
  4. IDEA2020版本下载、安装
  5. 常见的网络协议\端口号
  6. PMP课程笔记:第10章 项目沟通管理
  7. 【软件测试】:测试通过标准
  8. 【微信小程序】项目开发-----百度翻译API接口开发微信翻译小程序
  9. Python的Numpy库下载及安装
  10. 入门OJ:最短路径树入门