SHELL32!Shell_MergeMenus函数分析
SHELL32!Shell_MergeMenus函数分析
UINT Shell_MergeMenus(
[in] HMENU hmDst,
[in] HMENU hmSrc,
UINT uInsert,
UINT uIDAdjust,
UINT uIDAdjustMax,
ULONG uFlags
);
参数
[in] hmDst 类型: HMENU 要向其添加 hmSrc 的目标菜单。
[in] hmSrc 类型: HMENU 添加到 hmDst 的源菜单。
uInsert 类型: UINT hmDst 中的点,在该点之后插入 hmSrc 中的条目。
uIDAdjust 类型: UINT 此数字将添加到每个菜单的 ID 中,以提供调整后的 ID。 设置为 0 不进行调整。 uIDAdjust 的值通常是 hmDst 中的项数。 可以使用 GetMenuItemCount 获取此数字。
uIDAdjustMax 类型: UINT 要添加到菜单的最大调整 ID。 不会添加任何大于此值的调整 ID。 若要允许所有 ID,请将此参数设置为 0xFFFF。
uFlags 类型: ULONG 以下一个或多个标志。
MM_ADDSEPARATOR
在两个菜单中的项之间添加分隔符(如果尚不存在)。 如果要将 hmSrc 中的条目插入 hmDst 中间,则会在 hmSrc 材料上方和下方添加分隔符。
MM_DONTREMOVESEPS
请勿删除两个菜单中的任何现有分隔符。 请注意,这可能会导致一行中出现两个分隔符。
MM_SUBMENUSHAVEIDS
如果子菜单具有应调整的 ID,请设置此标志。
返回值
类型: UINT
返回菜单末尾的下一个打开 ID, (调整后的最大 ID + 1) 。
1: kd> dv
hmDst = 0x001a0095
hmSrc = 0x00160097
uInsert = 0
uIDAdjust = 0x7901
uIDAdjustMax = 0x79ff
uFlags = 0x20000
1: kd> dt win32k!menu 0xbc692924
+0x000 head : _PROCDESKHEAD
+0x014 fFlags : 1
+0x018 iItem : 0n0
+0x01c cAlloced : 8
+0x020 cItems : 8
+0x024 cxMenu : 0
+0x028 cyMenu : 0
+0x02c cxTextAlign : 0
+0x030 spwndNotify : (null)
+0x034 rgItems : 0xbc6938d4 tagITEM
+0x038 pParentMenus : (null)
+0x03c dwContextHelpId : 0
+0x040 cyMax : 0
+0x044 dwMenuData : 0
+0x048 hbrBack : (null)
+0x04c iTop : 0n0
+0x050 iMaxTop : 0n0
+0x054 dwArrowsOn : 0y00
1: kd> dx -id 0,0,89589d88 -r1 ((win32k!tagITEM *)0xbc6938d4)
((win32k!tagITEM *)0xbc6938d4) : 0xbc6938d4 [Type: tagITEM *]
[+0x000] fType : 0x0 [Type: unsigned int]
[+0x004] fState : 0x0 [Type: unsigned int]
[+0x008] wID : 0x0 [Type: unsigned int]
[+0x00c] spSubMenu : 0xbc693ce4 [Type: tagMENU *]
[+0x010] hbmpChecked : 0x0 [Type: void *]
[+0x014] hbmpUnchecked : 0x0 [Type: void *]
[+0x018] lpstr : 0xbc694aa4 : 0x26 [Type: unsigned short *]
[+0x01c] cch : 0x5 [Type: unsigned long]
[+0x020] dwItemData : 0x0 [Type: unsigned long]
[+0x024] xItem : 0x0 [Type: unsigned long]
[+0x028] yItem : 0x0 [Type: unsigned long]
[+0x02c] cxItem : 0x0 [Type: unsigned long]
[+0x030] cyItem : 0x0 [Type: unsigned long]
[+0x034] dxTab : 0x0 [Type: unsigned long]
[+0x038] ulX : 0x7fffffff [Type: unsigned long]
[+0x03c] ulWidth : 0x0 [Type: unsigned long]
[+0x040] hbmp : 0x0 [Type: HBITMAP__ *]
[+0x044] cxBmp : -1 [Type: int]
[+0x048] cyBmp : 0 [Type: int]
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*7
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc6929dc -> 0x7b
+0x01c cch : 0x26
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc6929dc
bc6929dc 7b 00 34 00 34 00 30 00-37 00 35 00 44 00 36 00 {.4.4.0.7.5.D.6.
bc6929ec 31 00 2d 00 32 00 30 00-35 00 30 00 2d 00 34 00 1.-.2.0.5.0.-.4.
bc6929fc 44 00 46 00 34 00 2d 00-42 00 43 00 35 00 44 00 D.F.4.-.B.C.5.D.
bc692a0c 2d 00 43 00 42 00 41 00-38 00 38 00 41 00 38 00 -.C.B.A.8.8.A.8.
bc692a1c 34 00 45 00 37 00 35 00-42 00 7d 00 00 00 55 48 4.E.7.5.B.}...UH
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*6
+0x000 fType : 0
+0x004 fState : 1
+0x008 wID : 0x7902
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc692d94 -> 0x50
+0x01c cch : 0xf
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc692d94
bc692d94 50 00 61 00 73 00 74 00-65 00 20 00 26 00 53 00 P.a.s.t.e. .&.S.
bc692da4 68 00 6f 00 72 00 74 00-63 00 75 00 74 00 00 00 h.o.r.t.c.u.t...
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*5
+0x000 fType : 0
+0x004 fState : 1
+0x008 wID : 0x7903
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc67512c -> 0x26
+0x01c cch : 6
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc67512c
bc67512c 26 00 50 00 61 00 73 00-74 00 65 00 00 00 55 48 &.P.a.s.t.e...UH
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*4
+0x000 fType : 0x800
+0x004 fState : 3
+0x008 wID : 3
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : (null)
+0x01c cch : 0
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*3
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7905
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc692a8c -> 0x52
+0x01c cch : 8
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc692a8c
bc692a8c 52 00 26 00 65 00 66 00-72 00 65 00 73 00 68 00 R.&.e.f.r.e.s.h.
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*2
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0
+0x00c spSubMenu : 0xbc692afc tagMENU
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693bfc -> 0x41
+0x01c cch : 0x11
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*1
+0x000 fType : 0x800
+0x004 fState : 3
+0x008 wID : 0xe
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : (null)
+0x01c cch : 0
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> dt win32k!tagITEM 0xbc6938d4+0x4c*0
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0
+0x00c spSubMenu : 0xbc693ce4 tagMENU
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc694aa4 -> 0x26
+0x01c cch : 5
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> dx -id 0,0,89589d88 -r1 ((win32k!tagMENU *)0xbc692afc)
((win32k!tagMENU *)0xbc692afc) : 0xbc692afc [Type: tagMENU *]
[+0x000] head [Type: _PROCDESKHEAD]
[+0x014] fFlags : 0x1 [Type: unsigned long]
[+0x018] iItem : 0 [Type: int]
[+0x01c] cAlloced : 0x10 [Type: unsigned int]
[+0x020] cItems : 0x9 [Type: unsigned int]
[+0x024] cxMenu : 0x0 [Type: unsigned long]
[+0x028] cyMenu : 0x0 [Type: unsigned long]
[+0x02c] cxTextAlign : 0x0 [Type: unsigned long]
[+0x030] spwndNotify : 0x0 [Type: tagWND *]
[+0x034] rgItems : 0xbc694104 [Type: tagITEM *]
[+0x038] pParentMenus : 0xbc693c7c [Type: tagMENULIST *]
[+0x03c] dwContextHelpId : 0x0 [Type: unsigned long]
[+0x040] cyMax : 0x0 [Type: unsigned long]
[+0x044] dwMenuData : 0x0 [Type: unsigned long]
[+0x048] hbrBack : 0x0 [Type: HBRUSH__ *]
[+0x04c] iTop : 0 [Type: int]
[+0x050] iMaxTop : 0 [Type: int]
[+0x054 ( 1: 0)] dwArrowsOn : 0x0 [Type: unsigned long]
1: kd> dx -id 0,0,89589d88 -r1 ((win32k!tagITEM *)0xbc694104)
((win32k!tagITEM *)0xbc694104) : 0xbc694104 [Type: tagITEM *]
[+0x000] fType : 0x0 [Type: unsigned int]
[+0x004] fState : 0x0 [Type: unsigned int]
[+0x008] wID : 0x790e [Type: unsigned int]
[+0x00c] spSubMenu : 0x0 [Type: tagMENU *]
[+0x010] hbmpChecked : 0x0 [Type: void *]
[+0x014] hbmpUnchecked : 0x0 [Type: void *]
[+0x018] lpstr : 0xbc693b94 : 0x26 [Type: unsigned short *]
[+0x01c] cch : 0x5 [Type: unsigned long]
[+0x020] dwItemData : 0x0 [Type: unsigned long]
[+0x024] xItem : 0x0 [Type: unsigned long]
[+0x028] yItem : 0x0 [Type: unsigned long]
[+0x02c] cxItem : 0x0 [Type: unsigned long]
[+0x030] cyItem : 0x0 [Type: unsigned long]
[+0x034] dxTab : 0x0 [Type: unsigned long]
[+0x038] ulX : 0x7fffffff [Type: unsigned long]
[+0x03c] ulWidth : 0x0 [Type: unsigned long]
[+0x040] hbmp : 0x0 [Type: HBITMAP__ *]
[+0x044] cxBmp : -1 [Type: int]
[+0x048] cyBmp : 0 [Type: int]
1: kd> db 0xbc693b94
bc693b94 26 00 4e 00 61 00 6d 00-65 00 00 00 55 48 5f 54 &.N.a.m.e...UH_T
1: kd> win32k!tagITEM 0xbc694104+0x4c*8
^ Syntax error in 'win32k!tagITEM 0xbc694104+0x4c*8'
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*8
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7906
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc692bb4 -> 0x41
+0x01c cch : 0xe
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc692bb4
bc692bb4 41 00 26 00 6c 00 69 00-67 00 6e 00 20 00 74 00 A.&.l.i.g.n. .t.
bc692bc4 6f 00 20 00 47 00 72 00-69 00 64 00 00 00 55 48 o. .G.r.i.d...UH
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*7
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7907
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693e54 -> 0x26
+0x01c cch : 0xd
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc693e54
bc693e54 26 00 41 00 75 00 74 00-6f 00 20 00 41 00 72 00 &.A.u.t.o. .A.r.
bc693e64 72 00 61 00 6e 00 67 00-65 00 00 00 55 48 5f 54 r.a.n.g.e...UH_T
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*6
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7908
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693ecc -> 0x53
+0x01c cch : 0xf
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc693ecc
bc693ecc 53 00 68 00 6f 00 77 00-20 00 69 00 6e 00 20 00 S.h.o.w. .i.n. .
bc693edc 26 00 47 00 72 00 6f 00-75 00 70 00 73 00 00 00 &.G.r.o.u.p.s...
bc693eec 55 48 5f 54 41 49 4c 00-ab ab ab ab ab ab ab ab UH_TAIL.........
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*5
+0x000 fType : 0x800
+0x004 fState : 3
+0x008 wID : 8
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : (null)
+0x01c cch : 0
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*4
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x790a
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693f4c -> 0x41
+0x01c cch : 0xb
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc693f4c
bc693f4c 41 00 74 00 74 00 72 00-69 00 62 00 26 00 75 00 A.t.t.r.i.b.&.u.
bc693f5c 74 00 65 00 73 00 00 00-55 48 5f 54 41 49 4c 00 t.e.s...UH_TAIL.
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*3
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x790b
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693fc4 -> 0x26
+0x01c cch : 9
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc693fc4
bc693fc4 26 00 4d 00 6f 00 64 00-69 00 66 00 69 00 65 00 &.M.o.d.i.f.i.e.
bc693fd4 64 00 00 00 55 48 5f 54-41 49 4c 00 ab ab ab ab d...UH_TAIL.....
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*2
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x790c
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc694034 -> 0x26
+0x01c cch : 5
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc694034
bc694034 26 00 54 00 79 00 70 00-65 00 00 00 55 48 5f 54 &.T.y.p.e...UH_T
bc694044 41 49 4c 00 ab ab ab ab-ab ab ab ab 00 00 00 00 AIL.............
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*1
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x790d
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc69409c -> 0x26
+0x01c cch : 5
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc69409c
bc69409c 26 00 53 00 69 00 7a 00-65 00 00 00 55 48 5f 54 &.S.i.z.e...UH_T
bc6940ac 41 49 4c 00 ab ab ab ab-ab ab ab ab 00 00 00 00 AIL.............
1: kd> dt win32k!tagITEM 0xbc694104+0x4c*0
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x790e
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693b94 -> 0x26
+0x01c cch : 5
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc693b94
bc693b94 26 00 4e 00 61 00 6d 00-65 00 00 00 55 48 5f 54 &.N.a.m.e...UH_T
bc693ba4 41 49 4c 00 ab ab ab ab-ab ab ab ab 00 00 00 00 AIL.............
1: kd> dx -id 0,0,89589d88 -r1 ((win32k!tagMENU *)0xbc693ce4)
((win32k!tagMENU *)0xbc693ce4) : 0xbc693ce4 [Type: tagMENU *]
[+0x000] head [Type: _PROCDESKHEAD]
[+0x014] fFlags : 0x1 [Type: unsigned long]
[+0x018] iItem : 0 [Type: int]
[+0x01c] cAlloced : 0x8 [Type: unsigned int]
[+0x020] cItems : 0x5 [Type: unsigned int]
[+0x024] cxMenu : 0x0 [Type: unsigned long]
[+0x028] cyMenu : 0x0 [Type: unsigned long]
[+0x02c] cxTextAlign : 0x0 [Type: unsigned long]
[+0x030] spwndNotify : 0x0 [Type: tagWND *]
[+0x034] rgItems : 0xbc694624 [Type: tagITEM *]
[+0x038] pParentMenus : 0xbc694b0c [Type: tagMENULIST *]
[+0x03c] dwContextHelpId : 0x0 [Type: unsigned long]
[+0x040] cyMax : 0x0 [Type: unsigned long]
[+0x044] dwMenuData : 0x0 [Type: unsigned long]
[+0x048] hbrBack : 0x0 [Type: HBRUSH__ *]
[+0x04c] iTop : 0 [Type: int]
[+0x050] iMaxTop : 0 [Type: int]
[+0x054 ( 1: 0)] dwArrowsOn : 0x0 [Type: unsigned long]
1: kd> dx -id 0,0,89589d88 -r1 ((win32k!tagITEM *)0xbc694624)
((win32k!tagITEM *)0xbc694624) : 0xbc694624 [Type: tagITEM *]
[+0x000] fType : 0x0 [Type: unsigned int]
[+0x004] fState : 0x0 [Type: unsigned int]
[+0x008] wID : 0x7914 [Type: unsigned int]
[+0x00c] spSubMenu : 0x0 [Type: tagMENU *]
[+0x010] hbmpChecked : 0x0 [Type: void *]
[+0x014] hbmpUnchecked : 0x0 [Type: void *]
[+0x018] lpstr : 0xbc694a2c : 0x54 [Type: unsigned short *]
[+0x01c] cch : 0xb [Type: unsigned long]
[+0x020] dwItemData : 0x0 [Type: unsigned long]
[+0x024] xItem : 0x0 [Type: unsigned long]
[+0x028] yItem : 0x0 [Type: unsigned long]
[+0x02c] cxItem : 0x0 [Type: unsigned long]
[+0x030] cyItem : 0x0 [Type: unsigned long]
[+0x034] dxTab : 0x0 [Type: unsigned long]
[+0x038] ulX : 0x7fffffff [Type: unsigned long]
[+0x03c] ulWidth : 0x0 [Type: unsigned long]
[+0x040] hbmp : 0x0 [Type: HBITMAP__ *]
[+0x044] cxBmp : -1 [Type: int]
[+0x048] cyBmp : 0 [Type: int]
1: kd> dt win32k!tagITEM 0xbc694624+0x4c*4
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7910
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc693d9c -> 0x26
+0x01c cch : 8
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc693d9c
bc693d9c 26 00 44 00 65 00 74 00-61 00 69 00 6c 00 73 00 &.D.e.t.a.i.l.s.
bc693dac 00 00 55 48 5f 54 41 49-4c 00 ab ab ab ab ab ab ..UH_TAIL.......
1: kd> dt win32k!tagITEM 0xbc694624+0x4c*3
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7911
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc6948e4 -> 0x26
+0x01c cch : 5
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc6948e4
bc6948e4 26 00 4c 00 69 00 73 00-74 00 00 00 55 48 5f 54 &.L.i.s.t...UH_T
bc6948f4 41 49 4c 00 ab ab ab ab-ab ab ab ab 00 00 00 00 AIL.............
1: kd> dt win32k!tagITEM 0xbc694624+0x4c*2
+0x000 fType : 0x200
+0x004 fState : 8
+0x008 wID : 0x7912
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc69494c -> 0x49
+0x01c cch : 6
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc69494c
bc69494c 49 00 63 00 6f 00 26 00-6e 00 73 00 00 00 55 48 I.c.o.&.n.s...UH
bc69495c 5f 54 41 49 4c 00 ab ab-ab ab ab ab ab ab ca ca _TAIL...........
1: kd> dt win32k!tagITEM 0xbc694624+0x4c*1
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7913
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc6949bc -> 0x54
+0x01c cch : 6
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc6949bc
bc6949bc 54 00 69 00 6c 00 65 00-26 00 73 00 00 00 55 48 T.i.l.e.&.s...UH
bc6949cc 5f 54 41 49 4c 00 ab ab-ab ab ab ab ab ab ca ca _TAIL...........
1: kd> dt win32k!tagITEM 0xbc694624+0x4c*0
+0x000 fType : 0
+0x004 fState : 0
+0x008 wID : 0x7914
+0x00c spSubMenu : (null)
+0x010 hbmpChecked : (null)
+0x014 hbmpUnchecked : (null)
+0x018 lpstr : 0xbc694a2c -> 0x54
+0x01c cch : 0xb
+0x020 dwItemData : 0
+0x024 xItem : 0
+0x028 yItem : 0
+0x02c cxItem : 0
+0x030 cyItem : 0
+0x034 dxTab : 0
+0x038 ulX : 0x7fffffff
+0x03c ulWidth : 0
+0x040 hbmp : (null)
+0x044 cxBmp : 0n-1
+0x048 cyBmp : 0n0
1: kd> db 0xbc694a2c
bc694a2c 54 00 26 00 68 00 75 00-6d 00 62 00 6e 00 61 00 T.&.h.u.m.b.n.a.
bc694a3c 69 00 6c 00 73 00 00 00-55 48 5f 54 41 49 4c 00 i.l.s...UH_TAIL.
相关文章:
SHELL32!Shell_MergeMenus函数分析
SHELL32!Shell_MergeMenus函数分析 UINT Shell_MergeMenus( [in] HMENU hmDst, [in] HMENU hmSrc, UINT uInsert, UINT uIDAdjust, UINT uIDAdjustMax, ULONG uFlags ); 参数 [in] hmDst 类型: HMENU 要向其添加 hmSrc…...
python: SQLAlchemy (ORM) Simple example using SQLite
领域层(Domain Laye):定义了 School 实体类和 SchoolRepository 抽象基类,明确了业务实体和数据访问的契约。 基础设施层(Infrastructure Laye):通过 SQLAlchemy 实现了 SchoolRepository 类&am…...
MySQL 视图入门
一、什么是 MySQL 视图 1.1 视图的基本概念 在 MySQL 中,视图是一种虚拟表,它本身并不存储实际的数据,而是基于一个或多个真实表(基表)的查询结果集。可以把视图想象成是一个预定义好的查询语句的快捷方式。当你查询…...
【洛谷排序算法】P1012拼数-详细讲解
这道题本质上是通过确定数字的拼接顺序来得到最大拼接数,虽然主要思路是利用字符串及其比较规则来实现,但也可以基于数组结合一些转换操作来解决,以下是大致思路和代码示例: 【算法思路】 首先将输入的数字存储在数组中。然后自…...
在WPS中设置word的页码不从第一页开始,从指定页开始插入页码
大家好,我是小鱼。 在日常的办公中为Word文档页面插入页码是经常要做的。如果一个文档有几十页,插入页码不仅可以快速定位到文章的内容,如果需要制作目录也方便制作。正确情况下插入页码都是从第一页开始的,但是有些文档比如说标…...
鸿蒙app 开发中 对于数组方法 filter 的理解
这段代码是 TypeScript 中数组 filter 方法的类型定义,下面将详细解释其各个部分的含义、作用及使用场景。 整体功能概述 filter 方法是 JavaScript 和 TypeScript 中数组对象的一个内置方法,它的主要功能是创建一个新数组,新数组中的元素是…...
【废物研究生刷算法】字符串
文章目录 1. 反转字符串2. 替换数字3. 反转字符串中的单词4. 右旋字符串总结1、字符串处理函数2、字符串切片 如果使用python处理字符串,有很多py内置的函数可以使用,主要还是记住这些处理方法。 1. 反转字符串 class Solution:def reverseStr(self, s, …...
深入理解 SQL 注入漏洞及解决方案
一、引言 在当今数字化时代,数据库作为存储和管理数据的核心组件,其安全性至关重要。SQL 注入是一种常见且极具威胁性的数据库安全漏洞,它可能导致数据泄露、篡改甚至系统被完全控制。本文将深入探讨 SQL 注入漏洞的产生原因、表现形式以及如…...
Next.js 学习-1
Next.js学习 引用:https://www.nextjs.cn/learn/basics/create-nextjs-app 先试试水吧,正好dify用的这个构建的前端项目。 使用 如果您尚未安装 Node.js,请 从此处安装。要求 Node.js 10.13 或更高版本。 好吧得用新的了,记得…...
[ComfyUI]Recraft贴图开源方案,实现服装印花自由
一、介绍 今天发现了一个简单又好用的插件,可以实现类似Recraft的贴图功能,这是一个作者开发的ComfyUI插件,叫做Comfyui-Transform 这个插件比我们简单的图像覆盖多了一些可控参数,形状、透明度、倾斜、拉升和混合模式等诸多可控…...
JavaScript 数组连接方法
在 JavaScript 中,有多种方法可以连接数组。每种方法都有其自身的优点和缺点。常见的方法包括 concat()、扩展运算符(...)、push()、splice()、slice()、join()、forEach()、reduce() 以及 Array.from() 等。下面是这些方法的详细说明和示例代码。 1. concat() co…...
Windows安装MySQL教程
1.下载 下载地址:https://www.mysql.com/downloads/ 下载版本:MySQL Installer for Window 2.安装MySQL 以下只列出需要注意的一些界面,没出现的界面默认继续即可。 1.选择安装类型 提供了多种安装模式,包括默认开发版、仅…...
VOS3000线路对接、路由配置与路由分析操作教程
一、VOS3000简介 VOS3000是一款常用的VoIP运营平台,支持多种线路对接和路由配置,适合新手快速上手。本教程将带你了解如何对接线路、配置路由以及进行路由分析。 二、线路对接 准备工作 获取线路信息:从供应商处获取线路的IP地址、端口、用…...
PiscTrace的开发者版
基于 PiscTrace 架构的视图处理的纯开发板,支持静态图片、实时视频流、摄像头视频流和网络视频流的处理。与 PiscTrace 应用版相比,开发者版通过直接的代码开发,提供了更高的灵活性和可定制性,适用于需要深度定制和复杂处理的应用…...
OnlyOffice:前端编辑器与后端API实现高效办公
OnlyOffice:前端编辑器与后端API实现高效办公 一、OnlyOffice概述二、前端编辑器:高效、灵活且易用1. 完善的编辑功能2. 实时协作支持3. 自动保存与版本管理4. 高度自定义的界面 三、后端API:管理文档、用户与权限1. 轻松集成与定制2. 实时协…...
github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新
1.github上新建一个repository 设置为private tips删除在这 点setting 然后往下拖动 会有个这里是用来删项目的 2.另外 一台电脑拉取这个repository的时候 需要配置 一个ssh key 这个key的内容生成参考本地电脑的生成 然后在这配置 2.1 生成 SSH 密钥(如果还没有…...
本周行情——250222
本周A股行情展望与策略 结合近期盘面特征及市场主线演化,本周A股预计延续结构性分化行情,科技成长与政策催化板块仍是资金主战场,但需警惕高标股分歧带来的波动。以下是具体分析与策略建议: 1. 行情核心驱动因素 主线延续性&…...
分发糖果(力扣135)
题目说相邻的两个孩子中评分更高的孩子获得的糖果更多,表示我们既要考虑到跟左边的孩子比较,也要考虑右边的孩子,但是我们如果两边一起考虑一定会顾此失彼。这里就引入一个思想:先满足右边大于左边时的糖果分发情况,再…...
QML ToolButton与DelayButton的使用、详解与自定义样式
QML MenuBarItem与MenuItem的使用、详解与自定义样式 一、介绍1、ToolButton常见用法基础示例设置图标 常用属性texticonenabledshortcutcheckable & checked 信号onClickedonPressed 和 onReleased 样式和外观使用场景 2、DelayButton使用场景核心属性1. delay 核心信号1.…...
动态规划
简介 动态规划最核心两步: 状态表示:dp[i]代表什么状态转移方程:如何利用已有的dp求解dp[i] 只要这两步搞对了, 就完成了动态规划的%95 剩下的就是细节问题: dp初始化顺序(有时是倒序)处理边…...
SQL FIRST() 函数详解
SQL FIRST() 函数详解 在SQL中,FIRST() 函数是一个用于处理查询结果的聚合函数。它通常与 GROUP BY 子句结合使用,用于返回每个分组中的第一个记录。本文将详细解释 FIRST() 函数的用法、参数、返回值以及与它的关联函数。 1. 函数概述 FIRST() 函数的…...
ClickHouse系列之ClickHouse安装
ClickHouse系列之ClickHouse安装 1 ClickHouse2 Docker安装ClickHouse2.1 docker 启动脚本2.2 默认用户及密码2.3 8123和9000端口的作用2.3.1 81232.3.2 9000 3 Clickhouse连接3.1 命令行客户端连接3.1.1 常见的客户端脚本3.1.1.1 查看数据库:show databases;3.1.1.…...
大模型监督微调(SFT)技术解析
大模型监督微调(SFT)技术深度解析 一、基本知识介绍 监督微调(Supervised Fine-Tuning)是连接预训练与具体应用的关键技术层。其本质是通过特定任务的标注数据,在保持预训练模型核心能力的前提下,调整模型…...
PTA: 有序顺序表的合并
请设计一个能够将有序顺序表LA,LB进行合并的算法,要求合并后的顺序表LC依然有序。 例如: LA的元素 1 3 5 7 LB的元素 2 4 LC的元素 1 2 3 4 5 7 其中,LA和LB的长度不超过1000,当中的元素为非递减排序。 输入格式: 第…...
Vuetify解决与旧版浏览器(如Internet Explorer 11)的兼容性问题
简介 由于Vuetify使用了ES2015/2017的特性,这些特性在旧版浏览器中可能不被支持,因此需要通过配置来确保这些特性能够被正确转换。 配置1 在项目项目根目录下的vue.config.js文件,或nuxt.config.ts中,添加 transpileDependencies …...
android,flutter 混合开发,pigeon通信,传参
文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…...
Shell文档归档、压缩与解压
Shell文档归档、压缩与解压 1、文件归档与压缩2、zip、gzip与tar指令2.1、zip指令2.2、gzip指令2.3、tar指令 1、文件归档与压缩 归档文件是指将一组文件或目录保存到一个文件中;压缩文件是指将一组文件或目录按照某种存储格式保存到一个文件中,所占磁盘…...
【Bluedroid】AVRCP 连接源码分析(一)
一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…...
CMake入门
1.什么是CMake Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。 不同的IDE所集成的make工具所遵循的规范和标准都不同,也…...
基于vite6创建项目
pnpm create vue vite已自动配置路径,在.config.js jsconfig.json 中 按需引用element-plus 官网中有 pnpm install element-plus npm install -D unplugin-vue-components unplugin-auto-import // vite.config.ts import { defineConfig } from vite import Aut…...
简单封装一个websocket构造函数
问题描述 最近维护一个老项目,发现项目中有大量重复代码,特别是websocket的调用这一块,同样的代码复制了十几个页面,于是自己封装了一个websocket调用的构造函数。 export default class CreateWebSocket {constructor(url) {//…...
大模型产品Deepseek(八)、数据嵌入+知识库管理+联网搜索,实现精准的知识查询
如何将数据嵌入到DeepSeek中以实现精准的知识查询 1. 目标 DeepSeek是一个强大的基于大模型的知识查询工具,能够通过数据嵌入和智能查询功能提供精确的答案。本文将详细介绍如何在DeepSeek中进行数据嵌入,以便最大化其在实际应用中的价值。 2. 推荐使用的Page Assist插件 …...
探索Vue:数字翻滚动画的实现与优化
在前端开发中,动画效果总能为用户界面增添一抹生动与趣味。今天,我们将深入剖析一个基于Vue 3实现的数字翻滚动画组件,从代码结构到功能实现,再到性能优化,一步步揭开它的神秘面纱。 组件概述 这个Vue组件名为Number…...
POI pptx转图片
前言 ppt页面预览一直是个问题,office本身虽然有预览功能但是收费,一些开源的项目的预览又不太好用,例如开源的:kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老,使用版本较旧 <dependency><gro…...
力扣LeetCode: 2506 统计相似字符串对的数目
题目: 给你一个下标从 0 开始的字符串数组 words 。 如果两个字符串由相同的字符组成,则认为这两个字符串 相似 。 例如,"abca" 和 "cba" 相似,因为它们都由字符 a、b、c 组成。然而,"aba…...
DeepSeek模型量化
技术背景 大语言模型(Large Language Model,LLM),可以通过量化(Quantization)操作来节约内存/显存的使用,并且降低了通讯开销,进而达到加速模型推理的效果。常见的就是把Float16的浮…...
如何调整CAN位宽容忍度?
CAN位宽容忍度是指在控制器局域网络(CAN, Controller Area Network)中允许时钟同步的误差范围。这是CAN网络正常通信时的关键因素之一,因为CAN协议依赖位同步来确保多个节点在总线上正确解码数据。CAN位宽容忍度确保节点之间由于时钟偏差或抖…...
Versal - 基础6(Linux 开发 AIE-ML + 自动化脚本解析)
目录 1. 简介 2. 步骤解析 2.1 概览 2.1.1 步骤依赖关系 2.1.2 总目录结构 2.2 Vitis XPFM 2.2.1 Dir 2.2.2 Makefile 2.2.3 vitis_pfm.py 2.3 Kernels 2.3.1 Dir 2.3.2 Makefile 2.3.3 config 文件 2.4 AIE_app 2.4.1 Dir 2.4.2 Makefile 2.4.3 aie 要点 2.…...
乐享数科:供应链金融—三个不同阶段的融资模式
供应链金融是与产业链紧密结合的融资模式,它主要体现在订单采购、存货保管、销售回款这三个不同的业务阶段,并针对这些阶段提供了相应的金融服务。以下是这三个阶段中主要的融资模式及其特点: 供应链金融融资模式主要分为以下几种࿱…...
vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容
1、先安装vmware workstation 17 player,然后再安装Ubuntu Desktop虚拟机,然后再安装vmware tools,具体可以参考如下视频: VMware虚拟机与主机实现文件共享,其实一点也不难_哔哩哔哩_bilibili 2、本人亲自试过了&…...
【React】React 基础(2)
JSX 是什么 JSX是一种 JavaScript 的语法扩展(extension), 也在很多地方称之为 JavaScript XML, 因为看起就是一段XML语法。它用于描述我们的Ul界面,并且其完成可以和 JavaScript 融合在一起使用; 为什么 React 选择使用 jsx? React 认为渲…...
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署
DeepSeek接入Siri(已升级支持苹果手表)完整版硅基流动DeepSeek-R1部署 **DeepSeek** 是一款专注于深度学习和人工智能的工具或平台,通常与人工智能、机器学习、自动化分析等领域有关。它的主要功能可能包括:深度学习模型搜索&…...
ASP.NET MVC AJAX 文件上传
如何使用 MVC 5 和 AJAX(.NET Framework)上传文件。 使用AJAX和ASP.NET MVC 上传文件 再简单不过了。对于最纯粹的人来说,这不需要使用jQuery。此代码实际上允许上传多个文件。 注意:以下代码示例支持 ASP.NET MVC 5。如果使用 .…...
npm使用了代理,但是代理软件已经关闭导致创建失败
如果在关闭前打开了vscode,此时vscode中的终端没有刷新,就会出现这个问题,最开始会一直转圈圈,直到超时,然后出现该报错 ❯ npm create vuelatest npm error code ECONNREFUSED npm error syscall connect npm error …...
Spring Boot定时任务原理
Spring Boot定时任务原理 在现代应用中,定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持,通过注解驱动的方式,开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…...
公文派2025:免费社区版重大安装更新!
大家好,感谢对「公文派」的支持。 距离上一次更新已经过去了将近一年的时间,今天我们带来了全新的免费2025社区版,该版本也是目前最新的版本,无需授权即可使用所有的功能。 我们先来看下本版本的更新及特色功能 聚合多个AI功能…...
Ubuntu24.04LTS的下载安装超细图文教程(VMware虚拟机及正常安装)
😸个人主页👉:神兽汤姆猫 📖系列专栏:开发语言环境配置 、 Java学习 、Java面试 、Markdown等 学习上的每一次进步,均来自于平时的努力与坚持。 💕如果此篇文章对您有帮助的话,请点…...
ES6相关操作
一.JavaScript的基础语法 1.Demo1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JavaScrip…...
【运维】源码编译安装cmake
背景: 已经在本地源码编译安装gcc/g,现在源码安装cmake 下载源码 下载地址:CMake - Upgrade Your Software Build System 安装步骤: ./bootstrap --prefix/usr/local/cmake make make install 错误处理 1、提示找不到libmpc.…...
代码随想录_回溯
代码随想录_回溯 回溯 77.组合 77. 组合 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路: 回溯 优化: 剪枝 注意代码中i,就是for循环里选择的起始位置。 for (int i startIndex; i <…...