HANDLE¿¡ ´ëÇÑ Å½±¸ - ù¹øÂ° ½Ã°£. Intro API·Î ÇÁ·Î±×·¡¹ÖÀ» Çϸ鼭 ¼ö¾øÀÌ ¸¸³ª°Ô µÇ´Â HANDLE, ÇÏÁö¸¸ ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¸ÓµéÀÌ HANDLE¿¡ ´ëÇÏ¿© Á¦´ë·Î ¾Ë°í ÀÖÁö ¸øÇÏ´Ù. ÀÌ ±ÛÀº HANDLE¿¡ ´ëÇØ ¾Ë°í ½Í¾î ÇÏ´Â ¸ðµçºÐµé¿¡°Ô ¹ÙĨ´Ï´Ù. ±Û ³»¿ë Áß À߸øµÇ¾ú°Å³ª, ºüÁøºÎºÐÀº dual5651@hotmail.comÀ¸·Î ¾Ë·ÁÁÖ½Ã¸é °¨»çÇϰڽÀ´Ï´Ù. * À̱ÛÀº Windows XP¸¦ ´ë»óÀ¸·Î ÀÛ¼ºµÇ¾îÁ³½À´Ï´Ù. HANDLE°ªÀº ¹«¾ùÀ» ÀǹÌÇϴ°¡? HANDLEÀº ´ÙÀ½°ú °°ÀÌ defineµÇ¾î ÀÖ´Ù. #ifdef STRICT typedef void *HANDLE; #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name #else typedef PVOID HANDLE; #define DECLARE_HANDLE(name) typedef HANDLE name #endif HANDLE°ªÀº ¹«¾ùÀ» ÀǹÌÇϴ°¡? Windows¿¡¼­´Â Process´Â °¢°¢ HANDLE_TABLEÀ̶ó´Â ±¸Á¶Ã¼ ÇüŸ¦ °¡Áø, ObjectTable¿¡ ÀÇÇØ HANDLEÀ» °ü¸®ÇÑ´Ù. ±×¸®°í HandleÀº HandleTable¿¡¼­ÀÇ Entry¸¦ °¡¸£Å°´Â »öÀΰªÀ¸·Î »ç¿ëµÇ¾î Áø´Ù. ±×·³À¸·Î ¼­·Î ´Ù¸¥ ÇÁ·Î¼¼½º¿¡¼­´Â °°Àº HANDLE°ªÀÌ¶óµµ ´Ù¸¥ °´Ã¼¸¦ Áö½ÃÇÑ´Ù. ¶Ç Kernel¿¡¼­ »ý¼ºµÈ HANDLEÀº ObpKernelHandleTableÀ̶ó´Â Ư¼öÇÑ HANDLE_TABLE ¿¡ ÀÇÇØ °ü¸®µÇ¾î Áø´Ù. ±×·³ Áö±Ý ºÎÅÍ Á÷Á¢ Á¢±ÙÇÏ¿© º¸ÀÚ. °¢ ÇÁ·Î¼¼½ºÀÇ HANDLE_TABLEÀÇ ÁÖ¼Ò´Â °¢ ÇÁ·Î¼¼½ºÀÇ EPROCESS±¸Á¶Ã¼¿¡ ÀúÀåµÇ¾î ÀÖ´Ù. lkd> dt _EPROCESS +0x000 Pcb : _KPROCESS +0x06c ProcessLock : _EX_PUSH_LOCK +0x070 CreateTime : _LARGE_INTEGER +0x078 ExitTime : _LARGE_INTEGER +0x080 RundownProtect : _EX_RUNDOWN_REF +0x084 UniqueProcessId : Ptr32 Void +0x088 ActiveProcessLinks : _LIST_ENTRY +0x090 QuotaUsage : [3] Uint4B +0x09c QuotaPeak : [3] Uint4B +0x0a8 CommitCharge : Uint4B +0x0ac PeakVirtualSize : Uint4B +0x0b0 VirtualSize : Uint4B +0x0b4 SessionProcessLinks : _LIST_ENTRY +0x0bc DebugPort : Ptr32 Void +0x0c0 ExceptionPort : Ptr32 Void +0x0c4 ObjectTable : Ptr32 _HANDLE_TABLE //HANDLE_TABLEÆ÷ÀÎÅÍ +0x0c8 Token : _EX_FAST_REF ....................... } EPROCESS, *PEPROCESS; ÀÌ Æ÷ÀÎÅÍ º¯¼ö´Â EPROCESSÀÇ ½ÃÀÛÀ§Ä¡·Î ºÎÅÍ 0xC4¸¸Å­ ¶³¾îÁ® ÀÖ´Ù. ÀÌ »ç½ÇÀ» ±â¹ÝÀ¸·Î ƯÁ¤ÇÑ ProcessÀÇ ObjectTableÁÖ¼Ò¸¦ ¾Ë¾Æ³»´Â ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. PHANDLE_TABLE GetObjectTable(DWORD Pid) { NTSTATUS status; PEPROCESS Process; PHANDLE_TABLE ObjectTable; status = PsLookupProcessByProcessId(Pid,&Process); if(NT_SUCCESS(status)) { ObjectTable = (PHANDLE_TABLE)(*(ULONG*)((ULONG)Process + 0xC4)); DbgPrint("Pid : %X PEPROCESS : %X ObjectTable : %Xn",Pid,Process,ObjectTable); ObDereferenceObject(Process); return ObjectTable; } else { DbgPrint("PsLookup errorn"); } ObDereferenceObject(Process); return 0; } ÀÌ HANDLE_TABLEÀº ´ÙÀ½°ú °°Àº ÇüŸ¦ °®´Â´Ù. typedef struct _HANDLE_TABLE { ULONG TableCode; //PHANDLE_TABLE_ENTRY** PEPROCESS QuotaProcess; PVOID UniqueProcessId; EX_PUSH_LOCK HandleTableLock [4]; LIST_ENTRY HandleTableList; EX_PUSH_LOCK HandleContentionEvent; PHANDLE_TRACE_DEBUG_INFO DebugInfo; LONG ExtraInfoPages; ULONG FirstFree; ULONG LastFree; ULONG NextHandleNeedingPool; LONG HandleCount; ULONG Flags; } HANDLE_TABLE, *PHANDLE_TABLE; TableCode : HADLE_TABLE_ENTRYÀÇ ÁÖ¼Ò¸¦ °®´Â´Ù. ÀÌ ENTRY¿¡ ÇØ´ç ProcessµéÀÌ »ç¿ëÇϰí ÀÖ´Â ObjectµéÀÌ ÀÖ´Ù. QuotaProcess : SystemÀÇ °æ¿ì 0À» °¡Áö¸ç, ±×¿ÜÀÇ ProcessµéÀº ÀÚ½ÅÀÇ PEPROCESS°ªÀ» °®´Â´Ù. UniqueProcessId : ÀÌ HANDLE_TABLEÀÇ ¼ÒÀ¯ÁÖÀÇ ProcessId°ªÀÌ´Ù. HandleTableLock : EX_PUSH_LOCK 4°³°¡ ¿¬°áµÈ ¹è¿­·Î µÇ¾î ÀÖ´Ù. EX_PUSH_LOCKÀº ´ÙÀ½°ú °°Àº ÇüŸ¦ °®´Â´Ù. typedef struct _EX_PUSH_LOCK { union { struct { ULONG Waiting:1; ULONG Exclusive:1; ULONG Shared:30; }; ULONG Value; PVOID Ptr; }; } EX_PUSH_LOCK, *PEX_PUSH_LOCK; HandleTableList : ´ÙÀ½ HandleTable·Î ¿¬°áµÈ ListEntryÀÌ´Ù. PHANDLE_TRACE_DEBUG_INFO : ÇØ´ç HANDLE_TABLEÀÇ HANDLE Trace DebugÁ¤º¸¸¦ °®´Â ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍÀÌ´Ù. Windows°¡ Debug¸ðµå·Î ½ÃÀ۵ǾúÀ»¶§¸¸ »ç¿ëÇÏ´Â µí ÇÏ´Ù. HANDLE_TRACE_DEBUG_INFO´Â ´ÙÀ½°ú °°Àº ÇüŸ¦ °®´Â´Ù. typedef struct _HANDLE_TRACE_DB_ENTRY //HANDLE_TRACE_DEBUG_INFO°¡ »ç¿ëÇÏ´Â ±¸Á¶Ã¼ { CLIENT_ID ClientId; HANDLE Handle; ULONG Type; PVOID StackTrace[16]; } HANDLE_TRACE_DB_ENTRY; *PHANDLE_TRACE_DB_ENTRY; typedef struct _HANDLE_TRACE_DEBUG_INFO { ULONG CurrentStackIndex; HANDLE_TRACE_DB_ENTRY TraceDb[4096]; } HANDLE_TRACE_DEBUG_INFO, *PHANDLE_TRACE_DEBUG_INFO; ExtraInfoPages : ºÎ°¡ÀûÀÎ Á¤º¸¿¡ ´ëÇÑ PageÀÇ Offset°ªÀ» °®´Â°ÍÀ¸·Î º¸À̳ª, ÁÖ·Î 0À¸·Î SetµÇ¾î ÀÖ´Ù. FirstFree : HandleTable¿¡¼­ °¡Àå óÀ½À¸·Î »ç¿ë°¡´ÉÇÑ(ºñ¾îÀÖ´Â) EntryÀÇ ÁÖ¼ÒÀ̸ç, ÀÌ °ªÀÌ ¹Ù·Î ´ÙÀ½À¸·Î »ý¼ºµÉ HANDLEÀÌ´Ù. LastFree : NextHandleNeedingPool : ´ÙÀ½¹ø ÇÚµéÀÌ ÇÊ¿ä·Î ÇÏ´Â PoolÀÇ Size°ªÀÌ´Ù. HandleCount : ÀÌ HandleTable¿¡¼­ »ç¿ëÇϰí ÀÖ´Â HandleÀÇ ÃѰ¹¼öÀÌ´Ù. Flags : ÀÌ HandleTableÀÇ Flag°ªÀÌ´Ù. TableCode°¡ EntryÀÇ ÁÖ¼Ò¸¦ °¡¸£Å²´Ù°í ÇÏ¿´´Âµ¥, HANDLE_TABLE_ENTRY´Â ´ÙÀ½°ú °°Àº ÇüŸ¦ °®´Â´Ù. typedef struct _HANDLE_TABLE_ENTRY_INFO { ULONG AuditMask; } HANDLE_TABLE_ENTRY_INFO, *PHANDLE_TABLE_ENTRY_INFO; typedef struct _HANDLE_TABLE_ENTRY { union { PVOID Object; //ÀÌ HandleÀÌ °¡¸£Å°´Â Object ULONG ObAttributes; //HandleÀÇ ¼Ó¼º PHANDLE_TABLE_ENTRY_INFO InfoTable; ULONG Value; } u1; union { ULONG GrantedAccess; //HandleÀÌ Object¿¡ Á¢±ÙÇÏ´Â Á¢±Ù±ÇÇÑ USHORT GrantedAccessIndex; //Access Index LONG NextFreeTableEntry; //´ÙÀ½¹ø »ç¿ë°¡´ÉÇÑ TableÀÇ Entry } u2; USHORT CreatorBackTraceIndex; } HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY; SystemÀÇ HANDLE_TABLEÀ» WinDbg¸¦ ÀÌ¿ëÇÏ¿© »ìÆì º¸¸é¼­, Á÷Á¢È®ÀÎ ÇÏ¿© º¸ÀÚ. À§¿¡¼­ ÀÛ¼ºÇß´ø GetObjectTable()ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© System ProcessÀÇ ObjectTableÀ» ±¸Çß´õ´Ï 0xE1001D28 À̾ú´Ù. ÀÌ ÁÖ¼Ò¸¦ ±â¹ÝÀ¸·Î ´ÙÀ½°ú °°ÀÌ WinDbg¸¦ ÀÌ¿ëÇÏ¿© Ç¥½ÃÇØ º¸¾Ò´Ù. lkd> dt _HANDLE_TABLE 0xE1001D28 +0x000 TableCode : 0xe1002000 +0x004 QuotaProcess : (null) +0x008 UniqueProcessId : 0x00000004 +0x00c HandleTableLock : [4] _EX_PUSH_LOCK +0x01c HandleTableList : _LIST_ENTRY [ 0xe13f4144 - 0x80563ec8 ] +0x024 HandleContentionEvent : _EX_PUSH_LOCK +0x028 DebugInfo : (null) +0x02c ExtraInfoPages : 0 +0x030 FirstFree : 0x698 +0x034 LastFree : 0 +0x038 NextHandleNeedingPool : 0x800 +0x03c HandleCount : 255 +0x040 Flags : 0 +0x040 StrictFIFO : 0y0 ÇöÀç ÀÌ ObjectTableÀÇ TableCode°ªÀº 0xe1002000ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. 0xe1002000ÀÇ ¸Þ¸ð¸®¸¦ Ç¥½ÃÇÏ¿© º¸ÀÚ. e1002000 00000000 fffffffe 817bc9e9 001f0fff 817bc329 00000000 e1288de9 000f003f e1002020 e1007149 00000000 e1291641 0002001f e1291571 00020019 e12870f1 00020019 e1002040 e12915d9 00020019 e12929f9 00020019 e1292991 00020019 e12913d1 00020019 e1002060 e12928f9 00020019 e1291339 00020019 e1293341 0002001f e1292651 00020019 e1002080 817b6209 001f0003 00000000 00000050 00000000 000000b4 00000000 00000058 e10020a0 00000000 00000054 00000000 0000005c 00000000 00000048 00000000 0000004c e10020c0 00000000 00000044 00000000 00000060 00000000 00000064 00000000 00000068 e10020e0 00000000 0000006c 00000000 00000070 00000000 00000074 00000000 00000078 e1002100 00000000 0000007c 815b1331 02000003 00000000 00000080 817cc981 00000000 e1002120 8179fc39 001f03ff 00000000 000000bc 00000000 000000a4 00000000 00000094 e1002140 817da6c9 001f0003 00000000 0000009c e1302de9 000f000f 00000000 00000098 e1002160 00000000 000000ac 00000000 000000b0 e12fd2f9 000f000f 00000000 000000c0 e1002180 00000000 000000c4 00000000 000000c8 00000000 000000cc 00000000 000000d0 e10021a0 00000000 000000d4 00000000 000000d8 00000000 000000dc 00000000 000000e0 e10021c0 00000000 000000e4 00000000 000000e8 00000000 000000ec 00000000 000000f0 e10021e0 00000000 000000f4 00000000 000000f8 00000000 000000fc 00000000 00000100 e1002200 00000000 00000104 00000000 00000108 00000000 0000010c 00000000 00000110 e1002220 00000000 00000114 00000000 00000118 00000000 0000011c 00000000 00000120 e1002240 00000000 00000124 00000000 00000128 00000000 0000012c 00000000 00000130 e1002260 00000000 00000134 00000000 00000138 00000000 0000013c 00000000 0000014c e1002280 00000000 00000288 00000000 00000140 00000000 00000144 00000000 00000148 e10022a0 00000000 00000088 00000000 00000150 00000000 00000154 00000000 00000158 e10022c0 00000000 0000015c 00000000 00000160 00000000 00000164 00000000 00000168 e10022e0 00000000 0000016c e1407499 00020019 815632b9 001f01ff 8157e7c1 001f03ff e1002300 00000000 00000170 00000000 000006f8 e140a5e1 00020019 00000000 00000194 e1002320 81563f79 0012019f 00000000 00000180 00000000 0000018c 00000000 00000198 ÇϳªÀÇ Object¿¡ ´ëÇÏ¿© ObjectHeader¿Í GrantedAccessÀÇ ½ÖÀ¸·Î ÀÌ·ç¾îÁ® ÀÖÀ½À» º¼ ¼ö ÀÖ´Ù. Àç¹Õ´Â °ÍÀº ÀÌ HandleTableÀÇ Ã¹¹ø¤Š Entry´Â ObjectHeaderÀÇ Pointer°ªÀ¸·Î 0À», GrantedAccess°ªÀ¸·Î 0xfffffffeÀ» °¡ÁüÀ¸·Î ½á, HandleTableÀÇ ½ÃÀÛÁöÁ¡ÀÓÀ» ³ªÅ¸³½´Ù. À̰ÍÀº º¸´Â °üÁ¡¿¡ µû¶ó ¿©·¯°¡ÁöÀÇ Àǹ̰¡ Àִµ¥, HANDLEÀ» °¡Áö°í º¸ÀÚ¸é, 0¹ø HandleÀº Á¸ÀçÇÒ ¼ö ¾ø°í, 4¹ø HandleÀÌ Ã³À½À̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. °¢ HandleÀÇ Entry°¡ ¹«¾ðÀÎÁö´Â ¾î¶»°Ô ¾Ë ¼ö ÀÖÀ»±î? ÇÊÀÚ´Â ´ÙÀ½°ú °°Àº ½ÄÀ» ÀÌ¿ëÇÏ¿© °è»êÇÑ´Ù. EntryAddress = ObjectTable->TableCode + (Handle / 4) * 8 ¿¹¸¦ µé¾î, System ProcessÀÇ 0x350À̶ó´Â Handle¿¡ ´ëÇÑ EntryÀÇ ÁÖ¼Ò´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù. EntryAddress = 0xe1002000 + (0x350/4) * 8 = 0xe10026A0 * Handle°ªÀº À§ÀÇ ½Ä¿¡¼­ ¾Ë ¼ö ÀÖ´Ù ½ÍÀÌ ´Ã 4ÀÇ ¹è¼öÀÌ´Ù. ÀÌ Entry¿¡ ´ëÇÑ Á¤º¸¸¦ WinDbg·Î Ç¥½ÃÇÏ¿© º¸¸é, lkd> dt _HANDLE_TABLE_ENTRY 0xe10026A0 +0x000 Object : 0xe138cd19 +0x000 ObAttributes : 0xe138cd19 +0x000 InfoTable : 0xe138cd19 _HANDLE_TABLE_ENTRY_INFO +0x000 Value : 0xe138cd19 +0x004 GrantedAccess : 0x20019 +0x004 GrantedAccessIndex : 0x19 +0x006 CreatorBackTraceIndex : 2 +0x004 NextFreeTableEntry : 131097 ´ÙÀ½°ú °°ÀÌ ¿Ã¹Ù¸¥ Entry¸¦ ±¸ÇßÀ½À» ¾Ë ¼ö ÀÖ´Ù. (ÀÌ°Ç ¾î¶»°Ô ±ÛÀ» Àд µ¶ÀÚ¿¡°Ô ¸Â´ÂÁö º¸¿©ÁÙ ¹æ¹ýÀÌ ¾ø´Ù. ±×³É ¹ÏÀ¸¼¼¿ä :p ) ¿©±â¼­ Object°ªÀº ÀÌ Handle¿¡ ÀÇÇØ ÂüÁ¶µÇ´Â ObjectÀÌ´Ù. °¢ Object´Â ´ÙÀ½°ú °°Àº ÇüŸ¦ °®´Â´Ù. typedef struct _OBJECT_TYPE_INFO { UNICODE_STRING ObjectTypeName; //ObjectÀÇ TypeÀ̸§ÀÇ Æ÷ÀÎÅÍ UCHAR Unknown[0x58]; WCHAR ObjectTypeNameBuffer[1]; } OBJECT_TYPE_INFO, *POBJECT_TYPE_INFO; typedef struct _OBJECT_TYPE_INITIALIZER { USHORT Length; UCHAR UseDefaultObject; UCHAR CaseInsensitive; ULONG InvalidAttributes; GENERIC_MAPPING GenericMapping; ULONG ValidAccessMask; UCHAR SecurityRequired; UCHAR MaintainHandleCount; UCHAR MaintainTypeList; POOL_TYPE PoolType; ULONG DefaultPagedPoolCharge; ULONG DefaultNonPagedPoolCharge; PVOID DumpProcedure; PVOID OpenProcedure; PVOID CloseProcedure; PVOID DeleteProcedure; PVOID ParseProcedure; PVOID SecurityProcedure; PVOID QueryNameProcedure; PVOID OkayToCloseProcedure; } OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER; typedef struct _OBJECT_TYPE { ERESOURCE Mutex; LIST_ENTRY TypeList; UNICODE_STRING Name; PVOID DefaultObject; ULONG Index; ULONG TotalNumberOfObjects; ULONG TotalNumberOfHandles; ULONG HighWaterNumberOfObjects; ULONG HighWaterNumberOfHandles; OBJECT_TYPE_INITIALIZER TypeInfo; ULONG Key; ERESOURCE ObjectLocks[4]; } OBJECT_TYPE, *POBJECT_TYPE; typedef struct _OBJECT_HEADER { LONG PointerCount; //ÀÌ Object¸¦ °¡¸£Å°´Â PointerÀÇ ¼ö union { LONG HandleCount; //ÀÌ Object¸¦ ´ë»óÀ¸·Î ÇÏ´Â HandleÀÇ ¼ö PVOID NextToFree; }; POBJECT_TYPE Type; //ObjectÀÇ Type UCHAR NameInfoOffset; UCHAR HandleInfoOffset; UCHAR QuotaInfoOffset; UCHAR Flags; union { POBJECT_CREATE_INFORMATION ObjectCreateInfo; PVOID QuotaBlockCharged; }; PSECURITY_DESCRIPTOR SecurityDescriptor; QUAD Body; } OBJECT_HEADER, *POBJECT_HEADER,**PPOBJECT_HEADER; PointerCount¿Í HandleCount·Î ÀÌ Object°¡ ¸î¹øÀ̳ª ÂüÁ¶µÇ¾ú´ÂÁö, Çڵ鿡 ÀÇÇØ »ç¿ëµÇ°í ÀÖ´ÂÁö¸¦ ¾Ë ¼ö Àִµ¥, ÂüÁ¶ÇÑ ObjectÀÇ °æ¿ì ObDereferenceObject()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿©, ¹ÝȯÀ» ÇÏ°Ô µÇ´Âµ¥, ÀÌ‹š ObDereferenceObject()ÇÔ¼ö´Â PointerCount¸¸ 1°¨¼Ò½ÃŲ´Ù. ¾òÀº HandleÀ» ¹ÝȯÇϰíÀÚ ÇÒ °æ¿ì ZwClose()ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥, À̶§ ZwClose()ÇÔ¼ö´Â PointerCount¿Í HandleCountÀ» °¢°¢ 1¾¿ °¨¼Ò ½ÃŲ´Ù. ÀÌ HandleCount¿Í PointerCount°¡ 0ÀÌ µÇ¾úÀ»‹š °´Ã¼¿¡ ´ëÇÑ ¿ÏÀüÇÑ ¹ÝȯÀÌ ÀÌ·ç¾îÁø´Ù. 0x350À̶ó´Â Handle°ªÀÇ ObjectHeader°ªÀ¸·Î 0xE138CD19¶ó°í Ç¥½ÃµÇ´Âµ¥, ½ÇÁ¦ ObjectHeaderÀÇ ÁÖ¼Ò´Â ÀÌ °ª¿¡¼­ 1À» »«°ªÀÌ ¿Ã¹Ù¸£´Ù. ±×·³À¸·Î ObjectHeaderÀÇ ÁÖ¼Ò´Â 0xE138CD18ÀÌ´Ù. ÀÌ ObjectHeader¿¡ ´ëÇÑ Á¤º¸¸¦ WinDbg·Î Ç¥½ÃÇÏ¿© º¸¸é ´ÙÀ½°ú °°´Ù. lkd> dt _OBJECT_HEADER 0xE138CD18 +0x000 PointerCount : 1 +0x004 HandleCount : 1 +0x004 NextToFree : 0x00000001 +0x008 Type : 0x817b3bf8 _OBJECT_TYPE +0x00c NameInfoOffset : 0 '' +0x00d HandleInfoOffset : 0 '' +0x00e QuotaInfoOffset : 0 '' +0x00f Flags : 0x2 '' +0x010 ObjectCreateInfo : 0x00000001 _OBJECT_CREATE_INFORMATION +0x010 QuotaBlockCharged : 0x00000001 +0x014 SecurityDescriptor : (null) +0x018 Body : _QUAD lkd> dt _OBJECT_TYPE 0x817b3bf8 +0x000 Mutex : _ERESOURCE +0x038 TypeList : _LIST_ENTRY [ 0x817b3c30 - 0x817b3c30 ] +0x040 Name : _UNICODE_STRING "Key" +0x048 DefaultObject : 0x80562240 +0x04c Index : 0x14 +0x050 TotalNumberOfObjects : 0x29b +0x054 TotalNumberOfHandles : 0x299 +0x058 HighWaterNumberOfObjects : 0x2cd +0x05c HighWaterNumberOfHandles : 0x2cb +0x060 TypeInfo : _OBJECT_TYPE_INITIALIZER +0x0ac Key : 0x2079654b +0x0b0 ObjectLocks : [4] _ERESOURCE # dualpage.muz.ro [2008-01-26]