[求助]PsSetLoadImageNotifyRoutine中遇到的问题
发表于:
2010-11-19 14:57
11166
[求助]PsSetLoadImageNotifyRoutine中遇到的问题
最近写驱动,调PsSetLoadImageNotifyRoutine设置一个回调函数来得到一个模块的全路径,
根据回调函数的声明
VOID
(*PLOAD_IMAGE_NOTIFY_ROUTINE) (
IN PUNICODE_STRING FullImageName,
IN HANDLE ProcessId, // where image is mapped
IN PIMAGE_INFO ImageInfo
);
FullImageName中的路径有类似以下的三种情况:
\Device\HarddiskVolumeX\yyy\xxx
\SystemRoot\xxx.dll
\WINDOWS\xxxxx.xx
为了得到一个加载模块的全路径,这里遇到了两个问题:
第一种情况时拿出前面的设备名如下调用来得到设备对象,
Status = ObReferenceObjectByName(&VolumeName,
OBJ_CASE_INSENSITIVE,
NULL,
0,
*IoDeviceObjectType,
KernelMode,
0,
(PVOID)&DeviceObject);
其中VolumeName是\Device\HarddiskVolume1
返回0xC0000024,
{错误类型} 请求的操作所请求的对象类型与在请求中指定的对象类型不匹配。
不解
第三种情况,前面没有盘符,得到FileObject后如下调用
Status = IoVolumeDeviceToDosName(DeviceObject, &DosName);
直接蓝,打出当前的 IRQL=APC_LEVEL,不解
MSDN上说是调用IRQL=PASSIVE_LEVEL,有没有好的解决方法呢?
等待高人解答,先谢过了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课