内核查看previousmode
进入内核NtCreateFile中,如果需要查看是由用户态进入的还是从内核态进入的,可以使用如下命令
.thread 查看当前线程
kd> .thread
Implicit thread is now 87272880
dt _KTHREAD 87272880 -y Previous 在_KTHREAD 结构中查看PreviousMode 变量的值
kd> dt _KTHREAD 87272880 -y Previous 在
ntdll!_KTHREAD
+0x13a PreviousMode : 1 '' 如果为1说明是从用户态进入此函数的,先前模式为用户态。
驱动程序可以调用 ExGetPreviousMode 例程,从当前线程对象获取 PreviousMode 值。 或者,驱动程序可以从描述所请求的 i/o 操作的IRP结构读取irp->requestormode字段。 Irp->requestormode字段包含请求操作的线程的PreviousMode值的副本。
kd> dt _IRP
nt!_IRP
+0x000 Type : Int2B
+0x002 Size : Uint2B
+0x004 MdlAddress : Ptr32 _MDL
+0x008 Flags : Uint4B
+0x00c AssociatedIrp : <unnamed-tag>
+0x010 ThreadListEntry : _LIST_ENTRY
+0x018 IoStatus : _IO_STATUS_BLOCK
+0x020 RequestorMode : Char 先前模式
+0x021 PendingReturned : UChar
+0x022 StackCount : Char
+0x023 CurrentLocation : Char
+0x024 Cancel : UChar
+0x025 CancelIrql : UChar
+0x026 ApcEnvironment : Char
+0x027 AllocationFlags : UChar
+0x028 UserIosb : Ptr32 _IO_STATUS_BLOCK
+0x02c UserEvent : Ptr32 _KEVENT
+0x030 Overlay : <unnamed-tag>
+0x038 CancelRoutine : Ptr32 void
+0x03c UserBuffer : Ptr32 Void
+0x040 Tail : <unnamed-tag>

浙公网安备 33010602011771号