IoGetDeviceObjectPointer
IoAttachDeviceToDeviceStack
IoDetachDevice
UNICODE_STRING DeviceName;
RtlInitUnicodeString(&DeviceName, L"\\Device\\MyDDKA");
PDEVICE_OBJECT DeviceObject = NULL;
PFILE_OBJECT FileObject = NULL;
status = IoGetDeviceObjectPointer(&DeviceName,FILE_ALL_ACCESS, &FileObject, &DeviceObject);
PDEVICE_OBJECT TargetDevice = IoAttachDeviceToDeviceStack(
FilterDeviceObject,DeviceObject);
pDevExt->TargetDevice = TargetDevice;
if (!TargetDevice)
{
ObDereferenceObject(FileObject);
IoDeleteDevice(FilterDeviceObject);
KdPrint(("IoAttachDeviceToDeviceStack() error\n"));
return STATUS_INSUFFICIENT_RESOURCES;
}
FilterDeviceObject->DeviceType = TargetDevice->DeviceType;
FilterDeviceObject->Characteristics = TargetDevice->Characteristics;
FilterDeviceObject->Flags &= ~DO_DEVIC
Kernel+中驱动挂载
最新推荐文章于 2024-07-01 17:13:49 发布
本文介绍了在Kernel模式下,如何使用IoGetDeviceObjectPointer、IoAttachDeviceToDeviceStack和IoDetachDevice等函数来挂载设备驱动。通过设置DeviceName并获取DeviceObject,然后将FilterDeviceObject附加到目标设备栈,并进行设备类型和特性设置。在完成设备挂载后,调用下层设备的IoCallDriver处理IRP请求。
摘要由CSDN通过智能技术生成