我的做法是:
先由ObReferenceObjectByHandle得到FileObject
然后:
文件名(不带盘符):FileObject->FileName
盘符:RtlVolumeDeviceToDosName(FileObject->DeviceObject, ...)
这个方法我发现,
RtlVolumeDeviceToDosName的使用有两个问题:
1。 有时静态加载驱动时在Windows登陆前系统卡死
2。 有时运行在别的驱动中bsod,具体如下
KERNEL_MODE_EXCEPTION_NOT_HANDLED_M
TRAP_FRAME: ba593778 -- (.trap 0xffffffffba593778)
ErrCode = 00000000
eax=8a395898 ebx=00000000 ecx=00000000 edx=8a395828 esi=89c4f2b8 edi=8a395828
eip=a6a2c93a esp=ba5937ec ebp=ba593860 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246
vmnetuserif+0x93a:
a6a2c93a 8b510c mov edx,dword ptr [ecx+0Ch] ds:0023:0000000c=????????
TACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
ba593860 804f018f 89d92ed8 8a395828 00000200 vmnetuserif+0x93a
ba593ac0 b84bdcb0 89d92ed8 ba593af0 ba593d30 nt!IoBuildPartialMdl+0xed
ba593b18 b84be4f0 0000006c ba593b30 00000000 flprtct+0xcb0
ba593d38 8054261c 0000006c 00000000 00000000 flprtct+0x14f0
ba593ddc 805470de 80627dc4 00000003 00000000 nt!KeReleaseInStackQueuedSpinLockFromDpcLevel+0xb74
ba593de0 80627dc4 00000003 00000000 0000027f nt!KiDispatchInterrupt+0x72e
ba593de4 00000000 00000000 0000027f 00000000 nt!LsaDeregisterLogonProcess+0xe756
错误在vmnetuserif.sys
flprtct是我的驱动
怎样解决?或是改用其他方法 ?
谨请高手赐教, 不胜感激。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课