原文发表于百度空间,2008-7-23
==========================================================================
学内核从基本数据结构开始吧,就像学C语言时从学习int,char开始一样.
只列出目前见到和用到的,其它后面再补充~
常用数据结构:
数字:
lkd> dt _ULARGE_INTEGER
ntdll!_ULARGE_INTEGER
+0x000 LowPart : Uint4B
+0x004 HighPart : Uint4B
+0x000 u : __unnamed
+0x000 QuadPart : Uint8B
lkd> dt _LARGE_INTEGER
ntdll!_LARGE_INTEGER
+0x000 LowPart : Uint4B
+0x004 HighPart : Int4B
+0x000 u : __unnamed
+0x000 QuadPart : Int8B
字符串:
lkd> dt _STRING
nt!_STRING
+0x000 Length : Uint2B
+0x002 MaximumLength : Uint2B
+0x004 Buffer : Ptr32 Char
lkd> dt _UNICODE_STRING
ntdll!_UNICODE_STRING
+0x000 Length : Uint2B
+0x002 MaximumLength : Uint2B
+0x004 Buffer : Ptr32 Uint2B
单链表头(看来数据结构要学好啊)::
lkd> dt _SLIST_HEADER
ntdll!_SLIST_HEADER
+0x000 Alignment : Uint8B
+0x000 Next : _SINGLE_LIST_ENTRY
+0x004 Depth : Uint2B
+0x006 Sequence : Uint2B
链表结点:
lkd> dt _KNODE
ntdll!_KNODE
+0x000 ProcessorMask : Uint4B
+0x004 Color : Uint4B
+0x008 MmShiftedColor : Uint4B
+0x00c FreeCount : [2] Uint4B
+0x018 DeadStackList : _SLIST_HEADER //链表头
+0x020 PfnDereferenceSListHead : _SLIST_HEADER
+0x028 PfnDeferredList : Ptr32 _SINGLE_LIST_ENTRY
+0x02c Seed : UChar
+0x02d Flags : _flags
单链表的指针:
lkd> dt _SINGLE_LIST_ENTRY
ntdll!_SINGLE_LIST_ENTRY
+0x000 Next : Ptr32 _SINGLE_LIST_ENTRY
双向链表指针:
lkd> dt _LIST_ENTRY
ntdll!_LIST_ENTRY
+0x000 Flink : Ptr32 _LIST_ENTRY
+0x004 Blink : Ptr32 _LIST_ENTRY
内核队列:
lkd> dt _KQUEUE
ntdll!_KQUEUE
+0x000 Header : _DISPATCHER_HEADER
+0x010 EntryListHead : _LIST_ENTRY
+0x018 CurrentCount : Uint4B
+0x01c MaximumCount : Uint4B
+0x020 ThreadListHead : _LIST_ENTRY
一个很多地方用到的头部结构:
lkd> dt _DISPATCHER_HEADER
ntdll!_DISPATCHER_HEADER
+0x000 Type : UChar
+0x001 Absolute : UChar
+0x002 Size : UChar
+0x003 Inserted : UChar
+0x004 SignalState : Int4B
+0x008 WaitListHead : _LIST_ENTRY