内核查看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>

posted @ 2022-10-10 11:18  psj00  阅读(375)  评论(0)    收藏  举报