过滤驱动容易让新手纠结的几个函数

本文探讨了IoAttachDevice函数的使用,该函数用于将设备对象附加到特定设备对象栈的顶部。通过该函数,新手可以了解如何处理设备对象指针,并在驱动程序开发中进行设备对象管理。
摘要由CSDN通过智能技术生成

1. IoAttachDevice

NTSTATUS 
IoAttachDevice(
     IN PDEVICE_OBJECT SourceDevice,
     IN PUNICODE_STRING TargetDevice,
     OUT PDEVICE_OBJECT *AttachedDevice
);

将【指定指针】的设备对象附加到【指定名称】的设备对象所在的【设备对象栈】顶层,并返回【附加之前的栈顶设备对象指针】。


2. IoAttachDeviceToDeviceStack
   
PDEVICE_OBJECT 
IoAttachDeviceToDeviceStack(
     IN PDEVICE_OBJECT SourceDevice,
     IN PDEVICE_OBJECT TargetDevice
);

将【指定指针】的设备对象附加到【指定指针】的设备对象所在的【设备对象栈】顶层,并返回【附加之前的栈顶设备对象指针】。

3. IoGetDeviceObjectPointer
   
NTSTATUS 
IoGetDeviceObjectPointer(
      IN PUNICODE_STRING ObjectName,
      IN ACCESS_MASK DesiredAccess,
      OUT PFILE_OBJECT *FileObject,
      OUT PDEVICE_OBJECT *DeviceObject
);

通过【设备对象的名字】,打开【文件对象】,根据返回的【文件句柄】获取【文件对象指针】,并根据【文件对象指针】得到该【文件对象的设备指针】。

它的源代码:


NTSTATUS
IoGetDeviceObjectPointer(
						 IN PUNICODE_STRING ObjectName,
						 IN ACCESS_MASK DesiredAccess,
						 OUT PFILE_OBJECT *FileObject,
						 OUT PDEVICE_OBJECT *DeviceObject
						 )
{
	PFILE_OBJECT fileObject;
	OBJECT_ATTRIBUTES objectAttributes;
	HANDLE fileHandle;
	IO_STATUS_BLOCK ioStatus;
	NTSTATUS status;

	PAGED_CODE();

	//
	// Initialize the object attributes to open the device.
	//

	InitializeObjectAttributes( &objectAttributes,
		ObjectName,
		OBJ_KERNEL_HANDLE,
		(HANDLE) NULL,
		(PSECURITY_DESCRI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值