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