当前位置: 首页 > news >正文

USER32!GetPropW函数分析之获取窗口属性


第一部分:
#ifdef UNICODE
FUNCLOG2(LOG_GENERAL, HANDLE, APIENTRY, GetPropW, HWND, hwnd, LPCTSTR, pString)
#else
FUNCLOG2(LOG_GENERAL, HANDLE, APIENTRY, GetPropA, HWND, hwnd, LPCTSTR, pString)
#endif // UNICODE
HANDLE APIENTRY GetProp(HWND hwnd, LPCTSTR pString)
{
    PWND pwnd;
    int iString;

    if (IS_PTR(pString)) {
        iString = (int)GlobalFindAtom(pString);
        if (iString == 0)
            return NULL;
    } else
        iString = PTR_TO_ID(pString);

    pwnd = ValidateHwnd(hwnd);

    if (pwnd == NULL)
        return NULL;

    return _GetProp(pwnd, (LPWSTR)UIntToPtr( iString ), FALSE);
}

第二部分:
1: kd> p
USER32!GetPropW+0xc:
001b:77cc7f19 ff750c          push    dword ptr [ebp+0Ch]
1: kd> p
USER32!GetPropW+0xf:
001b:77cc7f1c ff152413ca77    call    dword ptr [USER32!_imp__GlobalFindAtomW (77ca1324)]
1: kd> p
USER32!GetPropW+0x15:
001b:77cc7f22 0fb7f0          movzx   esi,ax
1: kd> r
eax=0000c01a


1: kd> dt HANDLE_TABLE_ENTRY 0xe140d000+8*1a
ntdll!HANDLE_TABLE_ENTRY
   +0x000 Object           : 0xe19a33f9 Void
   +0x000 ObAttributes     : 0xe19a33f9
   +0x000 InfoTable        : 0xe19a33f9 _HANDLE_TABLE_ENTRY_INFO
   +0x000 Value            : 0xe19a33f9
   +0x004 GrantedAccess    : 0
   +0x004 GrantedAccessIndex : 0
   +0x006 CreatorBackTraceIndex : 0
   +0x004 NextFreeTableEntry : 0n0

1: kd> dx -id 0,0,896d1020 -r1 (*((ntdll!unsigned short (*)[1])0xe19a3405))
(*((ntdll!unsigned short (*)[1])0xe19a3405))                 [Type: unsigned short [1]]
    [0]              : 0x4100 [Type: unsigned short]
1: kd> dt ntdll!_RTL_ATOM_TABLE_ENTRY  0xe19a33f8
   +0x000 HashLink         : (null)
   +0x004 HandleIndex      : 0x1a
   +0x006 Atom             : 0xc01a
   +0x008 ReferenceCount   : 2
   +0x00a Flags            : 0 ''
   +0x00b NameLength       : 0x11 ''
   +0x00c Name             : [1] 0x43
1: kd> dx -id 0,0,896d1020 -r1 (*((ntdll!unsigned short (*)[1])0xe19a3404))
(*((ntdll!unsigned short (*)[1])0xe19a3404))                 [Type: unsigned short [1]]
    [0]              : 0x43 [Type: unsigned short]
1: kd> db 0xe19a3404
e19a3404  43 00 41 00 64 00 64 00-72 00 65 00 73 00 73 00  C.A.d.d.r.e.s.s.
e19a3414  42 00 61 00 6e 00 64 00-5f 00 54 00 68 00 69 00  B.a.n.d._.T.h.i.
e19a3424  73 00 00 00 08 08 05 0c-55 73 74 6b 88 76 8a bf  s.......Ustk.v..


#define UIntToPtr( ui )  ((VOID *)(UINT_PTR)((unsigned int)ui))


第三部分:
HANDLE _GetProp(
    PWND pwnd,
    PCWSTR pszKey,
    BOOL fInternal)
{
    PPROP pprop;

    /*
     * A quick little optimization for that case where the window has no
     * properties at all.
     */
    if (pwnd->ppropList == NULL)
        return NULL;

    /*
     * FindProp does all the work, including converting pszKey to an atom
     * (if necessary) for property lookup.
     */
    pprop = _FindProp(pwnd, pszKey, fInternal);
    if (pprop == NULL)
        return NULL;

    return KHANDLE_TO_HANDLE(pprop->hData);
}


第四部分:
1: kd> dv
           pwnd = 0x005fe3e4
         pszKey = 0x0000c01a
      fInternal = 0n0
1: kd> dx -id 0,0,896d1020 -r1 ((USER32!tagWND *)0x5fe3e4)
((USER32!tagWND *)0x5fe3e4)                 : 0x5fe3e4 [Type: tagWND *]
 
    [+0x06c] ppropList        : 0xbc67f494 [Type: tagPROPLIST *]            //ppropList        : 0xbc67f494


1: kd> dx -id 0,0,896d1020 -r1 ((USER32!tagPROPLIST *)0xbc67f494)
((USER32!tagPROPLIST *)0xbc67f494)                 : 0xbc67f494 [Type: tagPROPLIST *]
    [+0x000] cEntries         : 0x4 [Type: unsigned int]
    [+0x004] iFirstFree       : 0x4 [Type: unsigned int]
    [+0x008] aprop            [Type: tagPROP [1]]
1: kd> dx -id 0,0,896d1020 -r1 (*((USER32!tagPROP (*)[1])0xbc67f49c))
(*((USER32!tagPROP (*)[1])0xbc67f49c))                 [Type: tagPROP [1]]
    [0]              [Type: tagPROP]
1: kd> dx -id 0,0,896d1020 -r1 (*((USER32!tagPROP *)0xbc67f49c))
(*((USER32!tagPROP *)0xbc67f49c))                 [Type: tagPROP]
    [+0x000] hData            : 0xfd5a0 [Type: void *]
    [+0x004] atomKey          : 0xc021 [Type: unsigned short]
    [+0x006] fs               : 0x2 [Type: unsigned short]
1: kd> dt USER32!tagPROP 0xbc67f49c+8*1
   +0x000 hData            : 0x0000c00c Void
   +0x004 atomKey          : 0xa911
   +0x006 fs               : 0
1: kd> dd 0xbc67f49c
bc67f49c  000fd5a0 0002c021 0000c00c 0000a911
bc67f4ac  000fcc48 0002c01a 000fd5f0 0002c017
bc67f4bc  545f4855 004c4941 abababab abababab

1: kd> dt USER32!tagPROP 0xbc67f49c+8*2
   +0x000 hData            : 0x000fcc48 Void
   +0x004 atomKey          : 0xc01a
   +0x006 fs               : 2
1: kd> dt USER32!tagPROP 0xbc67f49c+8*3
   +0x000 hData            : 0x000fd5f0 Void
   +0x004 atomKey          : 0xc017
   +0x006 fs               : 2
1: kd> dt USER32!tagPROP 0xbc67f49c+8*4
   +0x000 hData            : 0x545f4855 Void
   +0x004 atomKey          : 0x4941
   +0x006 fs               : 0x4c


    pprop = _FindProp(pwnd, pszKey, fInternal);
    if (pprop == NULL)
        return NULL;

1: kd> p
USER32!_GetProp+0x13:
001b:77cc7f60 e826000000      call    USER32!_FindProp (77cc7f8b)
1: kd> p
USER32!_GetProp+0x18:
001b:77cc7f65 85c0            test    eax,eax
1: kd> r
eax=005ff4ac ebx=77ca68a4 ecx=0000c01a edx=00000201 esi=0000c01a edi=0000060d
eip=77cc7f65 esp=013be0b8 ebp=013be0b8 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
USER32!_GetProp+0x18:
001b:77cc7f65 85c0            test    eax,eax
1: kd> dd 005ff4ac
005ff4ac  000fcc48

第五部分:


1: kd> dx -id 0,0,896d1020 -r1 (*((USER32!tagPROP *)0xbc67f49c))
(*((USER32!tagPROP *)0xbc67f49c))                 [Type: tagPROP]
    [+0x000] hData            : 0xfd5a0 [Type: void *]
    [+0x004] atomKey          : 0xc021 [Type: unsigned short]
    [+0x006] fs               : 0x2 [Type: unsigned short]

1: kd> dt USER32!tagPROP 0xbc67f49c+8*1
   +0x000 hData            : 0x0000c00c Void
   +0x004 atomKey          : 0xa911
   +0x006 fs               : 0

1: kd> dt USER32!tagPROP 0xbc67f49c+8*2
   +0x000 hData            : 0x000fcc48 Void
   +0x004 atomKey          : 0xc01a
   +0x006 fs               : 2

1: kd> dt USER32!tagPROP 0xbc67f49c+8*3
   +0x000 hData            : 0x000fd5f0 Void
   +0x004 atomKey          : 0xc017
   +0x006 fs               : 2

1: kd> dt HANDLE_TABLE_ENTRY 0xe140d000+8*17
ntdll!HANDLE_TABLE_ENTRY
   +0x000 Object           : 0xe1865109 Void
   +0x000 ObAttributes     : 0xe1865109
   +0x000 InfoTable        : 0xe1865109 _HANDLE_TABLE_ENTRY_INFO
   +0x000 Value            : 0xe1865109
   +0x004 GrantedAccess    : 0
   +0x004 GrantedAccessIndex : 0
   +0x006 CreatorBackTraceIndex : 0
   +0x004 NextFreeTableEntry : 0n0
1: kd> dt ntdll!_RTL_ATOM_TABLE_ENTRY 0xe1865108
   +0x000 HashLink         : (null)
   +0x004 HandleIndex      : 0x17
   +0x006 Atom             : 0xc017
   +0x008 ReferenceCount   : 2
   +0x00a Flags            : 0 ''
   +0x00b NameLength       : 0x12 ''
   +0x00c Name             : [1] 0x43
1: kd> dx -id 0,0,896d1020 -r1 (*((ntdll!unsigned short (*)[1])0xe1865114))
(*((ntdll!unsigned short (*)[1])0xe1865114))                 [Type: unsigned short [1]]
    [0]              : 0x43 [Type: unsigned short]
1: kd> db 0xe1865114
e1865114  43 00 41 00 64 00 64 00-72 00 65 00 73 00 73 00  C.A.d.d.r.e.s.s.
e1865124  43 00 6f 00 6d 00 62 00-6f 00 5f 00 54 00 68 00  C.o.m.b.o._.T.h.
e1865134  69 00 73 00 00 00 35 30-46 7d b2 b2 09 08 0b 0c  i.s...50F}......

CAddressCombo_This

1: kd> dt HANDLE_TABLE_ENTRY 0xe140d000+8*21
ntdll!HANDLE_TABLE_ENTRY
   +0x000 Object           : 0xe18379d9 Void
   +0x000 ObAttributes     : 0xe18379d9
   +0x000 InfoTable        : 0xe18379d9 _HANDLE_TABLE_ENTRY_INFO
   +0x000 Value            : 0xe18379d9
   +0x004 GrantedAccess    : 0
   +0x004 GrantedAccessIndex : 0
   +0x006 CreatorBackTraceIndex : 0
   +0x004 NextFreeTableEntry : 0n0
1: kd> dt ntdll!_RTL_ATOM_TABLE_ENTRY 0xe18379d8
   +0x000 HashLink         : 0xe1825758 _RTL_ATOM_TABLE_ENTRY
   +0x004 HandleIndex      : 0x21
   +0x006 Atom             : 0xc021
   +0x008 ReferenceCount   : 0x14
   +0x00a Flags            : 0 ''
   +0x00b NameLength       : 0xe ''
   +0x00c Name             : [1] 0x55
1: kd> dx -id 0,0,896d1020 -r1 (*((ntdll!unsigned short (*)[1])0xe18379e4))
(*((ntdll!unsigned short (*)[1])0xe18379e4))                 [Type: unsigned short [1]]
    [0]              : 0x55 [Type: unsigned short]
1: kd> db 0xe18379e4
e18379e4  55 00 78 00 53 00 75 00-62 00 63 00 6c 00 61 00  U.x.S.u.b.c.l.a.
e18379f4  73 00 73 00 49 00 6e 00-66 00 6f 00 00 00 00 00  s.s.I.n.f.o.....
e1837a04  00 00 00 00 08 08 01 00-55 73 71 75 01 08 06 0c  ........Usqu....


UxSubclassInfo


1: kd> dt HANDLE_TABLE_ENTRY 0xe140d000+8*1a
ntdll!HANDLE_TABLE_ENTRY
   +0x000 Object           : 0xe19a33f9 Void
   +0x000 ObAttributes     : 0xe19a33f9
   +0x000 InfoTable        : 0xe19a33f9 _HANDLE_TABLE_ENTRY_INFO
   +0x000 Value            : 0xe19a33f9
   +0x004 GrantedAccess    : 0
   +0x004 GrantedAccessIndex : 0
   +0x006 CreatorBackTraceIndex : 0
   +0x004 NextFreeTableEntry : 0n0
1: kd> dt ntdll!_RTL_ATOM_TABLE_ENTRY 0xe19a33f8
   +0x000 HashLink         : (null)
   +0x004 HandleIndex      : 0x1a
   +0x006 Atom             : 0xc01a
   +0x008 ReferenceCount   : 2
   +0x00a Flags            : 0 ''
   +0x00b NameLength       : 0x11 ''
   +0x00c Name             : [1] 0x43
1: kd> dx -id 0,0,896d1020 -r1 (*((ntdll!unsigned short (*)[1])0xe19a3404))
(*((ntdll!unsigned short (*)[1])0xe19a3404))                 [Type: unsigned short [1]]
    [0]              : 0x43 [Type: unsigned short]
1: kd> db 0xe19a3404
e19a3404  43 00 41 00 64 00 64 00-72 00 65 00 73 00 73 00  C.A.d.d.r.e.s.s.
e19a3414  42 00 61 00 6e 00 64 00-5f 00 54 00 68 00 69 00  B.a.n.d._.T.h.i.
e19a3424  73 00 00 00 08 08 05 0c-55 73 74 6b 88 76 8a bf  s.......Ustk.v..

CAddressBand_This

相关文章:

  • Python刷题:Python基础
  • C/S架构与B/S架构(C语言)
  • 多 Agent 博弈有哪些典型案例
  • 【Linux】冯诺依曼体系与操作系统理解
  • MouseBoost Pro for Mac 鼠标右键助手右键菜单
  • DeepSeek 各版本的区别
  • DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)
  • 【Qt】自定义信号和槽函数
  • 神经紊乱怎么治才能彻底除根
  • 解决电脑问题(8)——网络问题
  • MySQL安装过程,创建数据库
  • java通用自研接口限流组件
  • C++基础系列【20】数据结构与算法基础
  • 基于springboot的档案管理系统
  • 企业级VPN与零信任客户端的深度隐私防护指南
  • C语言练习题--洛谷P1781宇宙总统
  • 深入浅出解析 FreeRTOS 软件定时器 定时器服务任务:机制、API 详解及实践应用
  • 【算法】009、单双链表反转
  • C++什么是深复制和浅复制,构造函数和析构函数,哪一个可以写成虚函数,为什么?
  • 轻量级 Transformer 架构多模态预训练框架
  • 去年做哪个网站致富/百度自动点击器怎么用
  • dart语言做的网站/百度热搜seo
  • 事务所网站制作方案/百度竞价推广登录入口
  • 做网站的财务会涉及到的科目/网站seo关键词优化技巧
  • 在哪里创建网站/百度提问登陆入口
  • 网站交互式/魔贝课凡seo课程好吗