Windows之WDM驱动程序开发:class3

一、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 信号灯设备增加的优先级
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值