-
-
[求助]关于IoGetBaseFileSystemDeviceObject和ObReferenceObjectByName
-
发表于:
2008-11-19 20:33
9509
-
[求助]关于IoGetBaseFileSystemDeviceObject和ObReferenceObjectByName
有问题请大家帮助一下,我现在的问题是想获取一个驱动文件在内核中对应的驱动对象,或者驱动对象的设备对象也行,比如system32/drivers/portcls.sys,这个驱动,从devicetree那个工具的列表里面看不到这个驱动,但是使用icesword查看内核模块,发现这个驱动加载了,我现在就想获得这个驱动的驱动对象
经尝试发现,如果在devicetree这个工具中可以看到驱动名称的话,/driver/tcpip,就可以采用下面的代码通过ObReferenceObjectByName获得驱动对象,但是如果devicetree这个工具中看不到名称,下面的代码就不行了
UNICODE_STRING DriverName;
PDRIVER_OBJECT DriverObject = NULL;
PDEVICE_OBJECT DeviceObject = NULL;
RtlInitUnicodeString( &DriverName, pwszDeviceName );
ObReferenceObjectByName( &DriverName,
OBJ_CASE_INSENSITIVE,
NULL,
0,
( POBJECT_TYPE ) IoDriverObjectType,
KernelMode,
NULL,
&DriverObject );
if ( DriverObject == NULL )
{
return NULL;
}
本来相通过下面的代码实现,但是也是获取不到,主要是对这几个函数没理解清,有知道的帮忙解释一下,多多感谢了啊
PDEVICE_OBJECT DeviceObject1;
PFILE_OBJECT FileObject;
PDEVICE_OBJECT DeviceObject;
UNICODE_STRING sysname;
RtlInitUnicodeString(&sysname,L"\\??\\C:\\windows\\System32\\Drivers\\sysaudio.sys");
status = IoGetDeviceObjectPointer(&sysname, FILE_ATTRIBUTE_NORMAL, &FileObject, &DeviceObject);
if ( status )
{
DbgPrint("IoGetDeviceObjectPointer: %x", status);
}
else
{
DeviceObject1 = (PDEVICE_OBJECT)IoGetBaseFileSystemDeviceObject(FileObject);
DbgPrint("IoGetDeviceObjectPointer: %x", DeviceObject1);
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!