当前位置: 首页> 娱乐> 影视 > 国外企业网络研究_包装设计的网站_简述在线推广网站的方法_高级搜索引擎

国外企业网络研究_包装设计的网站_简述在线推广网站的方法_高级搜索引擎

时间:2025/7/9 12:00:40来源:https://blog.csdn.net/sitelist/article/details/146111078 浏览次数:0次
国外企业网络研究_包装设计的网站_简述在线推广网站的方法_高级搜索引擎

第一部分:
NTSTATUS
RtlLookupAtomInAtomTable(
    IN PVOID AtomTableHandle,
    IN PWSTR AtomName,
    OUT PRTL_ATOM Atom OPTIONAL
    )
{
    NTSTATUS Status;
    PRTL_ATOM_TABLE p = (PRTL_ATOM_TABLE)AtomTableHandle;
    PRTL_ATOM_TABLE_ENTRY a;
    RTL_ATOM Temp;

    RTL_PAGED_CODE();
    if (!RtlpLockAtomTable( p )) {
        return STATUS_INVALID_PARAMETER;
        }
    try {
        if (RtlpGetIntegerAtom( AtomName, &Temp )) {
            if (Temp >= RTL_ATOM_MAXIMUM_INTEGER_ATOM) {
                Temp = RTL_ATOM_INVALID_ATOM;
                Status = STATUS_INVALID_PARAMETER;
                }
            else {
                Status = STATUS_SUCCESS;
                }

            if (ARGUMENT_PRESENT( Atom )) {
                *Atom = Temp;
                }
            }
        else
        if (*AtomName == UNICODE_NULL) {
            Status = STATUS_OBJECT_NAME_INVALID;
            }
        else {
            a = RtlpHashStringToAtom( p, AtomName, NULL, NULL );                    //关键地方
            if (a == NULL) {
                Status = STATUS_OBJECT_NAME_NOT_FOUND;
                }
            else {
                if (RtlpAtomMapAtomToHandleEntry( p, (ULONG)a->HandleIndex ) != NULL) {            //关键地方
                    Status = STATUS_SUCCESS;
                    if (ARGUMENT_PRESENT( Atom )) {
                        *Atom = a->Atom;
                        }
                    }
                else {
                    Status = STATUS_INVALID_HANDLE;
                    }
                }
            }
        }
    except (EXCEPTION_EXECUTE_HANDLER) {
        Status = GetExceptionCode();
        }

    RtlpUnlockAtomTable( p );

    return Status;
}

第二部分:AtomTable->ExHandleTable说明原子表也是个句柄表


PRTL_ATOM_TABLE_ENTRY
RtlpAtomMapAtomToHandleEntry(
    IN PRTL_ATOM_TABLE AtomTable,
    IN ULONG HandleIndex
    )
{
#if defined(NTOS_KERNEL_RUNTIME)
    PHANDLE_TABLE_ENTRY ExHandleEntry;
    PRTL_ATOM_TABLE_ENTRY a;
    EXHANDLE ExHandle;

    ExHandle.GenericHandleOverlay = 0;
    ExHandle.Index = HandleIndex;

    ExHandleEntry = ExMapHandleToPointer( AtomTable->ExHandleTable,
                                          ExHandle.GenericHandleOverlay
                                        );


typedef struct _EXHANDLE {

    union {

        struct {

            //
            //  Application available tag bits
            //

            ULONG TagBits : 2;

            //
            //  The handle table entry index
            //

            ULONG Index : 30;

        };

        HANDLE GenericHandleOverlay;

#define HANDLE_VALUE_INC 4 // Amount to increment the Value to get to the next handle

        ULONG_PTR Value;
    };

} EXHANDLE, *PEXHANDLE;


1: kd> t
nt!RtlLookupAtomInAtomTable+0xc9:
80d51ca1 e862f6ffff      call    nt!RtlpAtomMapAtomToHandleEntry (80d51308)
1: kd> t
nt!RtlpAtomMapAtomToHandleEntry:
80d51308 55              push    ebp
1: kd> dv
      AtomTable = 0xe13d6010
    HandleIndex = 0x1f


第三部分:

NTKERNELAPI
PHANDLE_TABLE_ENTRY
ExMapHandleToPointer (
    IN PHANDLE_TABLE HandleTable,
    IN HANDLE Handle
    )
{
    EXHANDLE LocalHandle;
    PHANDLE_TABLE_ENTRY HandleTableEntry;

    PAGED_CODE();

    LocalHandle.GenericHandleOverlay = Handle;

    if ((LocalHandle.Index & (LOWLEVEL_COUNT - 1)) == 0) {
        return NULL;
    }

    //
    //  Translate the input handle to a handle table entry and make
    //  sure it is a valid handle.
    //

    HandleTableEntry = ExpLookupHandleTableEntry( HandleTable,
                                                  LocalHandle );

1: kd> t
nt!RtlpAtomMapAtomToHandleEntry+0x11:
80d51319 e89e030600      call    nt!ExMapHandleToPointer (80db16bc)
1: kd> t
nt!ExMapHandleToPointer:
80db16bc 55              push    ebp
1: kd> dv
    HandleTable = 0xe140afb8
         Handle = 0x0000007c


第四部分:

PHANDLE_TABLE_ENTRY
ExpLookupHandleTableEntry (
    IN PHANDLE_TABLE HandleTable,
    IN EXHANDLE tHandle
    )

1: kd> dv
    HandleTable = 0xe140afb8
        tHandle = struct _EXHANDLE
1: kd> dx -r1 ((ntkrnlmp!_HANDLE_TABLE *)0xe140afb8)
((ntkrnlmp!_HANDLE_TABLE *)0xe140afb8)                 : 0xe140afb8 [Type: _HANDLE_TABLE *]
    [+0x000] TableCode        : 0xe140d000 [Type: unsigned long]
    [+0x004] QuotaProcess     : 0x0 [Type: _EPROCESS *]
    [+0x008] UniqueProcessId  : 0x1cc [Type: void *]
    [+0x00c] HandleTableLock  [Type: _EX_PUSH_LOCK [4]]
    [+0x01c] HandleTableList  [Type: _LIST_ENTRY]
    [+0x024] HandleContentionEvent [Type: _EX_PUSH_LOCK]
    [+0x028] DebugInfo        : 0x0 [Type: _HANDLE_TRACE_DEBUG_INFO *]
    [+0x02c] ExtraInfoPages   : 0 [Type: long]
    [+0x030] FirstFree        : 0x90 [Type: unsigned long]
    [+0x034] LastFree         : 0x0 [Type: unsigned long]
    [+0x038] NextHandleNeedingPool : 0x800 [Type: unsigned long]
    [+0x03c] HandleCount      : 35 [Type: long]                //一共35个句柄0x23
    [+0x040] Flags            : 0x0 [Type: unsigned long]
    [+0x040 ( 0: 0)] StrictFIFO       : 0x0 [Type: unsigned char]

1: kd> dv
    HandleTable = 0xe140afb8
        tHandle = struct _EXHANDLE
1: kd> dx -r1 (*((ntkrnlmp!_EXHANDLE *)0xb9f32678))
(*((ntkrnlmp!_EXHANDLE *)0xb9f32678))                 [Type: _EXHANDLE]
    [+0x000 ( 1: 0)] TagBits          : 0x0 [Type: unsigned long]
    [+0x000 (31: 2)] Index            : 0x1f [Type: unsigned long]
    [+0x000] GenericHandleOverlay : 0x7c [Type: void *]
    [+0x000] Value            : 0x7c [Type: unsigned long]


1: kd> dt HANDLE_TABLE_ENTRY 0xe140d000
ntdll!HANDLE_TABLE_ENTRY
   +0x000 Object           : (null)
   +0x000 ObAttributes     : 0
   +0x000 InfoTable        : (null)
   +0x000 Value            : 0
   +0x004 GrantedAccess    : 0xfffffffe
   +0x004 GrantedAccessIndex : 0xfffe
   +0x006 CreatorBackTraceIndex : 0xffff
   +0x004 NextFreeTableEntry : 0n-2
1: kd> dt HANDLE_TABLE_ENTRY 0xe140d000+8*1f
ntdll!HANDLE_TABLE_ENTRY
   +0x000 Object           : 0xe194ebd1 Void
   +0x000 ObAttributes     : 0xe194ebd1
   +0x000 InfoTable        : 0xe194ebd1 _HANDLE_TABLE_ENTRY_INFO
   +0x000 Value            : 0xe194ebd1
   +0x004 GrantedAccess    : 0
   +0x004 GrantedAccessIndex : 0
   +0x006 CreatorBackTraceIndex : 0
   +0x004 NextFreeTableEntry : 0n0

第五部分: +0x000 Value            : 0xe194ebd1    转换为ntdll!_RTL_ATOM_TABLE_ENTRY结构

1: kd> dt ntdll!_RTL_ATOM_TABLE_ENTRY 0xe194ebd0
   +0x000 HashLink         : (null)
   +0x004 HandleIndex      : 0x1f
   +0x006 Atom             : 0xc01f
   +0x008 ReferenceCount   : 1
   +0x00a Flags            : 0 ''
   +0x00b NameLength       : 0x14 ''
   +0x00c Name             : [1] 0x43
1: kd> dx -id 0,0,896d1020 -r1 (*((ntdll!unsigned short (*)[1])0xe194ebdc))
(*((ntdll!unsigned short (*)[1])0xe194ebdc))                 [Type: unsigned short [1]]
    [0]              : 0x43 [Type: unsigned short]
1: kd> db 0xe194ebdc
e194ebdc  43 00 41 00 64 00 64 00-72 00 65 00 73 00 73 00  C.A.d.d.r.e.s.s.
e194ebec  43 00 6f 00 6d 00 62 00-6f 00 45 00 78 00 5f 00  C.o.m.b.o.E.x._.
e194ebfc  54 00 68 00 69 00 73 00-00 00 54 89 09 06 09 0c  T.h.i.s...T.....

关键字:国外企业网络研究_包装设计的网站_简述在线推广网站的方法_高级搜索引擎

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: