GetWindowLongPtr函数分析

news2025/3/10 16:44:41


 

第一部分:
#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]:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

任务11:路由器配置与静态路由配置

目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用:通过路由表进行数据的转发。 2、交换机的作用:通过学习和识别 MAC 地址,依据 M…

Python实例:PyMuPDF实现PDF翻译,英文翻译为中文,并按段落创建中文PDF

基于PyMuPDF与百度翻译的PDF翻译处理系统开发:中文乱码解决方案与自动化排版实践 一 、功能预览:将英文翻译为中文后创建的PDF 二、完整代码 from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle

LeeCode题库第四十六题

46.全排列 项目场景: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&am…

LangChain4j开发RAG入门示例

本文将详细介绍如何基于Java语言,使用Langchain4j开源框架、Milvus向量数据、阿里Qwen大模型,开发一个RAG入门级简单示例。本示例虽然简单,但涉及到多个知识点,包括:Milvus初始化、Embedding模型、文档切片、Springboo…

快速从C过度C++(一):namespace,C++的输入和输出,缺省参数,函数重载

📝前言: 本文章适合有一定C语言编程基础的读者浏览,主要介绍从C语言到C过度,我们首先要掌握的一些基础知识,以便于我们快速进入C的学习,为后面的学习打下基础。 这篇文章的主要内容有: 1&#x…

课程《Deep Learning Specialization》

在coursera上,Deep Learning Specialization 课程内容如下图所示:

微服务与消息队列RabbitMQ

简介 同步模式 异步模式 内容 解决方案RabbitMQ 同步调用的优缺点 同步调用的优势是什么? 时效性强,等待到结果后才返回。 同步调用的问题是什么? 拓展性差性能下降级联失败问题

苹果 M3 Ultra 芯片深度解析:AI 时代的性能革命

2025 年 3 月 5 日,苹果正式发布了其史上最强 PC 芯片 ——M3 Ultra。这款基于 UltraFusion 封装技术的旗舰级 SoC,不仅延续了苹果芯片在能效比上的传统优势,更通过架构创新与硬件升级,将 AI 计算能力推向了新高度。本文将从性能突…

通义千问:Qwen2.5-0.5B模型架构解释

通义千问:Qwen2.5-0.5B模型架构解释 1. 模型权重文件 .mdl、.msc:存储模型核心参数,是模型训练后学习到的知识载体,包含神经网络各层权重,加载后模型才能执行推理、生成等任务。 .mdl文件:通常是模型的核心权重数据文件,存储神经网络各层的权重参数、张量等关键数据,是…

【Linux】冯诺依曼体系与操作系统理解

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、冯诺依曼体系结构 二、操作系统 1. 操作系统的概念 2. 操作系统存在的意义 3. 操作系统的管理方式 4. 补充:理解系统调用…

玩转ChatGPT:GPT 深入研究功能

一、写在前面 民间总结: 理科看Claude 3.7 Sonnet 文科看DeepSeek-R1 那么,ChatGPT呢? 看Deep Research(深入研究)功能。 对于科研狗来说,在这个文章爆炸的时代,如何利用AI准确、高效地收…

虚函数和虚表的原理是什么?

虚函数是一个使用virtual关键字声明的成员函数,在基类中声明虚函数,在子类中可以使用override重写该函数。虚函数根据指针或引用指向的实际对象调用,实现运行时的多态。 虚函数表(虚表)是一个用于存储虚函数地址的数组…

laravel es 相关代码 ElasticSearch

来源&#xff1a; github <?phpnamespace App\Http\Controllers;use Elastic\Elasticsearch\ClientBuilder; use Illuminate\Support\Facades\DB;class ElasticSearch extends Controller {public $client null;public function __construct(){$this->client ClientB…

字节跳动C++客户端开发实习生内推-抖音基础技术

智能手机爱好者和使用者&#xff0c;追求良好的用户体验&#xff1b; 具有良好的编程习惯&#xff0c;代码结构清晰&#xff0c;命名规范&#xff1b; 熟练掌握数据结构与算法、计算机网络、操作系统、编译原理等课程&#xff1b; 熟练掌握C/C/OC/Swift一种或多种语言&#xff…

C语言_数据结构总结6:链式栈

纯c语言代码&#xff0c;不涉及C 顺序栈的实现&#xff0c;欢迎查看这篇文章&#xff1a;C语言_数据结构总结5&#xff1a;顺序栈-CSDN博客 0. 结构单元 #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Linknode { ElemType…

基于DeepSeek的智慧医药系统(源码+部署教程)

运行环境 智慧医药系统运行环境如下&#xff1a; 前端&#xff1a; HTMLCSS后端&#xff1a;Java AIGCDeepseekIDE工具&#xff1a;IDEA技术栈&#xff1a;Springboot HTMLCSS MySQL 主要角色 智慧医药系统主要分为两个角色。 游客 尚未进行注册和登录。具备登录注册、…

信奥赛CSP-J复赛集训(模拟算法专题)(6):P6352 [COCI 2007/2008 #3] CETIRI

信奥赛CSP-J复赛集训&#xff08;模拟算法专题&#xff09;&#xff08;6&#xff09;&#xff1a;P6352 [COCI 2007/2008 #3] CETIRI 题目描述 你原本有 4 4 4 个数&#xff0c;它们从小到大排序后构成了等差数列。 但是现在丢失了一个数&#xff0c;并且其余的三个数的顺序…

2025-03-09 学习记录--C/C++-PTA 习题11-1 输出月份英文名

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h>char *getmonth( int n );int main() {int n;char …

linux环保监测4G边缘网关:环境数据的可靠传输者

环保监测工控机&#xff0c;常被称为“环境数据采集器”或“环保数据终端”&#xff0c;是一种专门用于环境监测领域的工业计算机。它具备强大的数据处理能力、稳定的运行性能和多种接口&#xff0c;能够实时采集、处理和传输环境监测数据。这些数据包括空气质量、水质、噪声、…

【哇! C++】类和对象(五) - 赋值运算符重载

目录 ​编辑 一、运算符重载 1.1 运算符重载概念 1.2 全局运算符重载 1.3 运算符重载为成员函数 二、赋值运算符重载的特性 2.1 赋值运算符重载需要注意的点 2.2 赋值运算符重载格式 2.2.1 传值返回 2.2.2 传引用返回 2.2.3 检查自己给自己赋值 三、赋值运算符重载的…