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