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

GetWindowLongPtr函数分析


 

第一部分:
#ifdef UNICODE
FUNCLOG2(LOG_GENERAL, LONG_PTR, APIENTRY, GetWindowLongPtrW, HWND, hwnd, int, nIndex)
#else
FUNCLOG2(LOG_GENERAL, LONG_PTR, APIENTRY, GetWindowLongPtrA, HWND, hwnd, int, nIndex)
#endif // UNICODE
LONG_PTR APIENTRY GetWindowLongPtr(
    HWND hwnd,
    int nIndex)
{
    PWND pwnd;

    pwnd = ValidateHwnd(hwnd);
    if (pwnd == NULL) {
        return 0;
    }

    try {
        return _GetWindowLongPtr(pwnd, nIndex, IS_ANSI);
    } except (W32ExceptionHandler(FALSE, RIP_WARNING)) {
        RIPERR1(ERROR_INVALID_WINDOW_HANDLE,
                RIP_WARNING,
                "Window %x no longer valid",
                hwnd);
        return 0;
    }
}

#define __GetWindowLong(pwnd, index) ((LONG)(*(DWORD UNALIGNED *)((BYTE *)((pwnd) + 1) + (index))))


第二部分:
1: kd> r
eax=c0000000 ebx=00000000 ecx=40000000 edx=00086144 esi=6f64fcb4 edi=77cc444f
eip=6f64fcc9 esp=013bc99c ebp=013bc9c4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
comctl32!Edit_WndProc+0x15:
001b:6f64fcc9 ffd7            call    edi {USER32!GetWindowLongW (77cc444f)}
1: kd> t
USER32!GetWindowLongW:
001b:77cc444f 6a08            push    8
1: kd> dv
           hwnd = 0x0004003c
         nIndex = 0n0


1: kd> dt win32k!wnd 0xbc67e3e4
   +0x000 head             : _THRDESKHEAD
   +0x014 state            : 0x20000
   +0x018 state2           : 0x80000300
   +0x01c ExStyle          : 0x800
   +0x020 style            : 0x54000080
   +0x024 hModule          : 0x6f610000 Void
   +0x028 hMod16           : 0
   +0x02a fnid             : 0
   +0x02c spwndNext        : (null)
   +0x030 spwndPrev        : (null)
   +0x034 spwndParent      : 0xbc67de3c tagWND
   +0x038 spwndChild       : (null)
   +0x03c spwndOwner       : (null)
   +0x040 rcWindow         : tagRECT
   +0x050 rcClient         : tagRECT
   +0x060 lpfnWndProc      : 0x758ed4d5     long  BROWSEUI!CAddressEditBox::_EditSubclassWndProc+0
   +0x064 pcls             : 0xbc67e2c4 tagCLS
   +0x068 hrgnUpdate       : 0x00000001 HRGN__
   +0x06c ppropList        : 0xbc67f494 tagPROPLIST
   +0x070 pSBInfo          : (null)
   +0x074 spmenuSys        : (null)
   +0x078 spmenu           : 0x0000a205 tagMENU
   +0x07c hrgnClip         : (null)
   +0x080 strName          : _LARGE_UNICODE_STRING
   +0x08c cbwndExtra       : 0n4
   +0x090 spwndLastActive  : (null)
   +0x094 hImc             : (null)
   +0x098 dwUserData       : 0
   +0x09c pActCtx          : 0x00086144 _ACTIVATION_CONTEXT
1: kd> dd 0xbc67e3e4+0x09c
bc67e480  00086144 000fd470        //窗口结构紧接着的一个长型指针000fd470


eax=000fd470


1: kd> dt comctl32!tagED 000fd470
   +0x000 hText            : 0x014a0004 Void
   +0x004 cchAlloc         : 0x20
   +0x008 cchTextMax       : 0x7ff
   +0x00c cch              : 3
   +0x010 cLines           : 1
   +0x014 ichMinSel        : 0
   +0x018 ichMaxSel        : 0
   +0x01c ichCaret         : 0
   +0x020 iCaretLine       : 0
   +0x024 ichScreenStart   : 0
   +0x028 ichLinesOnScreen : 0
   +0x02c xOffset          : 0
   +0x030 charPasswordChar : 0
   +0x034 cPasswordCharWidth : 0n0
   +0x038 hwnd             : 0x0004003c HWND__
   +0x03c pwnd             : (null)
   +0x040 rcFmt            : tagRECT
   +0x050 hwndParent       : 0x0004003e HWND__
   +0x054 ptPrevMouse      : tagPOINT
   +0x05c prevKeys         : 0
   +0x060 fSingle          : 0y1
   +0x060 fNoRedraw        : 0y0
   +0x060 fMouseDown       : 0y0
   +0x060 fFocus           : 0y0
   +0x060 fDirty           : 0y0
   +0x060 fDisabled        : 0y0
   +0x060 fNonPropFont     : 0y0
   +0x060 fNonPropDBCS     : 0y0
   +0x060 fBorder          : 0y0
   +0x060 fAutoVScroll     : 0y0
   +0x060 fAutoHScroll     : 0y1
   +0x060 fNoHideSel       : 0y0
   +0x060 fDBCS            : 0y0
   +0x060 fFmtLines        : 0y0
   +0x060 fWrap            : 0y0
   +0x060 fCalcLines       : 0y0
   +0x060 fEatNextChar     : 0y0
   +0x060 fStripCRCRLF     : 0y0
   +0x060 fInDialogBox     : 0y0
   +0x060 fReadOnly        : 0y0
   +0x060 fCaretHidden     : 0y0
   +0x060 fTrueType        : 0y1
   +0x060 fAnsi            : 0y0
   +0x060 fWin31Compat     : 0y1
   +0x060 f40Compat        : 0y1
   +0x060 fFlatBorder      : 0y0
   +0x060 fSawRButtonDown  : 0y0
   +0x060 fInitialized     : 0y0
   +0x060 fSwapRoOnUp      : 0y0
   +0x060 fAllowRTL        : 0y0
   +0x060 fDisplayCtrl     : 0y0
   +0x060 fRtoLReading     : 0y0
   +0x064 fInsertCompChr   : 0y0
   +0x064 fReplaceCompChr  : 0y0
   +0x064 fNoMoveCaret     : 0y0
   +0x064 fResultProcess   : 0y0
   +0x064 fKorea           : 0y0
   +0x064 fInReconversion  : 0y0
   +0x064 fLShift          : 0y0
   +0x068 wImeStatus       : 0
   +0x06a cbChar           : 2
   +0x06c chLines          : (null)
   +0x070 format           : 0
   +0x074 lpfnNextWord     : 0x758e0bfa     int  BROWSEUI!CAutoComplete::EditWordBreakProcW+0
   +0x078 maxPixelWidth    : 0n0
   +0x07c undoType         : 0
   +0x080 hDeletedText     : (null)
   +0x084 ichDeleted       : 0
   +0x088 cchDeleted       : 0
   +0x08c ichInsStart      : 0
   +0x090 ichInsEnd        : 0
   +0x094 hFont            : 0x0a0a016a Void
   +0x098 aveCharWidth     : 0n6
   +0x09c lineHeight       : 0n13
   +0x0a0 charOverhang     : 0n0
   +0x0a4 cxSysCharWidth   : 0n8
   +0x0a8 cySysCharHeight  : 0n16
   +0x0ac listboxHwnd      : (null)
   +0x0b0 pTabStops        : (null)
   +0x0b4 charWidthBuffer  : (null)
   +0x0b8 charSet          : 0 ''
   +0x0bc wMaxNegA         : 7
   +0x0c0 wMaxNegAcharPos  : 0xb
   +0x0c4 wMaxNegC         : 8
   +0x0c8 wMaxNegCcharPos  : 0xb
   +0x0cc wLeftMargin      : 0
   +0x0d0 wRightMargin     : 0
   +0x0d4 ichStartMinSel   : 0
   +0x0d8 ichStartMaxSel   : 0
   +0x0dc pLpkEditCallout  : (null)
   +0x0e0 hCaretBitmap     : (null)
   +0x0e4 iCaretOffset     : 0n0
   +0x0e8 hInstance        : 0x6f610000 Void
   +0x0ec seed             : 0 ''
   +0x0ed fEncoded         : 0 ''
   +0x0f0 iLockLevel       : 0n0
   +0x0f4 DBCSVector       : [12]  ""
   +0x100 hImcPrev         : (null)
   +0x104 ptScreenBounding : tagPOINT
   +0x10c hTheme           : (null)
   +0x110 pww              : 0x005fe3f8 tagWW
   +0x114 hFontSave        : (null)
   +0x118 pszCueBannerText : (null)
   +0x11c fHot             : 0y0
   +0x120 hwndBalloon      : (null)
   +0x124 hFontPassword    : (null)
1: kd> u 758e0bfa
BROWSEUI!CAutoComplete::EditWordBreakProcW [d:\srv03rtm\shell\browseui\autocomp.cpp @ 1259]:

相关文章:

  • OpenCV 拆分、合并图像通道方法及复现
  • nginx的安装以及相关的全局性配置
  • K8s面试题总结(十一)
  • 使用Arduino和ESP8266进行基于物联网的垃圾箱监控
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cycle_modules
  • 哈夫曼树的讲解
  • 【微知】如何命令行查看Linux上连接的Wi-Fi信息?(iw dev wlp4s0 link ; information wireless)
  • 基于大数据的商品数据可视化及推荐系统
  • C++11新特性 5.static静态
  • 【数据结构初阶】---堆的实现、堆排序以及文件中的TopK问题
  • MySQL(单表)知识点
  • 蓝耘智算 + 通义万相 2.1:为 AIGC 装上 “智能翅膀”,翱翔创作新天空
  • 代码随想录-训练营-day46
  • ES语法学习
  • neo4j-解决neo4j网页版打不开
  • HPC超算系列3——新手指南2
  • 基于Asp.net的度假村管理系统
  • 【弹性计算】异构计算云服务和 AI 加速器(二):适用场景
  • 快乐数 力扣202
  • Windows下安装kafka
  • 惠州营销网站建设公司/媒体发稿公司
  • 腾讯的网站建设用了多少钱/班级优化大师下载安装app
  • 莞城区小程序app网站开发/注册网站流程
  • 网站 改域名/怎样建立网站免费的
  • 做网站备案需要什么/网站超级外链
  • 东莞seo建站优化费用/百度快速排名优化技术