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…...
华为云deepseek大模型平台:deepseek满血版
华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 1、注册: 华为云deepseek大模型平台注册:https://cloud.siliconflow.cn/i/aDmz6aVN 说明:填写邀请码的话邀请和被邀请的账号都会获得2000 万 Tokens;2个帐号间不会与其他关联…...
AutoGen 技术博客系列 八:深入剖析 Swarm—— 智能体协作的新范式
本系列博文在掘金同步发布, 更多优质文章,请关注本人掘金账号: 人肉推土机的掘金账号 AutoGen系列一:基础介绍与入门教程 AutoGen系列二:深入自定义智能体 AutoGen系列三:内置智能体的应用与实战 AutoGen系列四&am…...
从零开始开发纯血鸿蒙应用之网页浏览
从零开始开发纯血鸿蒙应用 〇、前言一、优化菜单交互1、BuilderFunction.ets2、改造 PageTitleBar 二、网址打开1、方式选择1、使用浏览器打开2、内部打开2.1、声明权限2.2、封装 WebViewPage2.2.1、组件字段2.2.2、aboutToAppear2.2.3、onBackPress2.2.4、标题栏2.2.4、网页内…...
【大模型LLM】DeepSeek LLM Scaling Open-Source Language Models with Longtermism
深度探索LLM:以长期主义扩展开源语言模型 0.论文摘要 开源大语言模型(LLMs)的快速发展确实令人瞩目。然而,以往文献中描述的扩展规律得出了不同的结论,这为LLMs的扩展蒙上了一层阴影。我们深入研究了扩展规律&#…...
分布式事务-本地消息表学习与落地方案
本文参考: 数据库事务系列04-本地消息表实现分布式事务 基础概念 本地消息表实现分布式事务最终一致性的核心:是通过上游本地事务的原子性持久性,配合中间件的重试机制,从而实现调用下游的最终一致性。 这里有几个要点可以解析一…...
Debezium系列之:记录一次源头数据库刷数据,造成数据丢失的原因
Debezium系列之:记录一次源头数据库刷数据,造成数据丢失的原因 一、背景二、查看topic日志信息三、结论四、解决方法一、背景 源头数据库在很短的时间内刷了大量的数据,部分数据在hdfs丢失了 理论上debezium数据采集不会丢失,就需要排查数据链路某个节点是否有数据丢失。 …...
PHP约课健身管理系统小程序源码
🏋️♂️ 约课健身管理系统小程序:重塑健身预约体验,引领数字化健身新时代 一款基于ThinkPHPUniapp框架,由米扬精心雕琢的约课健身管理系统小程序,专为健身房、健身工作室、运动会所、运动场馆、瑜伽馆、拳馆等泛健…...
Java之泛型
文章目录 首先接着上一篇(集合)文章,来个非常牛逼的易错题传统集合问题分析泛型快速入门案例泛型介绍泛型的好处泛型的语法泛型的声明泛型的实例化泛型使用举例泛型使用的注意事项和细节 自定义泛型自定义泛型方法 自定义泛型接口自定义泛型方…...
图论 之 最小生成树
文章目录 题目1584.连接所有点的最小费用 最小生成树MST,有两种算法进行求解,分别是Kruskal算法和Prim算法Kruskal算法从边出发,适合用于稀疏图Prim算法从顶点出发,适合用于稠密图:基本思想是从一个起始顶点开始&#…...
STM32-有关内存堆栈、map文件
STM32堆栈空间大小设置_stm32堆栈分配大小-CSDN博客 STM32堆栈的大小及内存四(五)区的分析 - 天街小雨润地狠 - 博客园 .map文件的位置...
Linux系统中常见的词GNU是什么意思?
GNU 是 “GNU’s Not Unix” 的递归缩写,它是一个自由软件项目,旨在创建一个完全自由的操作系统。这个名字反映了GNU项目的核心理念:它试图创建一个类Unix的系统,但不是Unix本身。 GNU 项目由 理查德斯托曼(Richard S…...
【个人开源】——从零开始在高通手机上部署sd(二)
代码:https://github.com/chenjun2hao/qualcomm.ai 推理耗时统计 单位/ms 硬件qnncpu_clipqnncpu_unetqnncpu_vaehtp_cliphtp_unethtp_vae骁龙8 gen124716.994133440.39723.215411.097696.327 1. 下载依赖 下载opencv_x64.tar,提取码: rrbp下载opencv_aarch64.t…...
【MCU驱动开发概述】
MCU驱动开发概述 目录 MCU驱动开发概述二、驱动开发的目的三、驱动开发的关键组成部分四、示例 - LED 控制驱动 一、引言 MCU(Microcontroller Unit),即微控制器单元,是一种集成在单个芯片上的计算机系统,通常用于控制…...
PC端Linux之虚拟CAN
在调试QT程序时候需要用到虚拟CAN进行发送和接收的操作,以此记录方法。 在调试QT程序时候需要用到虚拟CAN进行发送和接收的操作,以此记录方法。 1、安装can-utils sudo apt install can-utils ifconig -a【查看是否安装成功,是否有can0网络…...
C++:std::thread、条件变量与信号量
介绍 在多线程编程的世界里,协调不同线程之间的工作是一项极具挑战性的任务。线程可能需要等待特定条件的满足,或者对共享资源的访问进行限制。C 标准库为我们提供了强大的工具,如 std::thread 用于创建和管理线程,条件变量用于线…...
POI pptx转图片
前言 ppt页面预览一直是个问题,office本身虽然有预览功能但是收费,一些开源的项目的预览又不太好用,例如开源的:kkfileview pptx转图片 1. 引入pom依赖 我这个项目比较老,使用版本较旧 <dependency><gro…...
Java File 类
File 类是 Java 中用于处理文件和目录的基本类之一,位于 java.io 包中。它提供了多种方法来创建、删除、检查、修改文件或目录的属性,以及列出文件夹中的内容。虽然 File 类本身不提供直接的读取或写入文件内容的方法(这些操作通常由 FileInp…...
工业通信协议 EtherNet/IP 全面解析
工业通信协议 EtherNet/IP 全面解析 EtherNet/IP(以太网工业协议)是一种基于标准以太网的工业自动化通信协议,由 ODVA(开放设备网供应商协会) 管理。它融合了 CIP(通用工业协议) 和以太网技术&…...
使用docker配置PostgreSQL
配置docker阿里云镜像仓库 国内使用docker hub拉取镜像比较慢,所以首先配置个人的镜像仓库。 阿里云的个人镜像仓库是免费的,对个人来说足够用。 具体操作参考阿里云官方链接 。 关于个人镜像仓库的使用参考链接。 配置完个人镜像仓库后将公网配置到doc…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
跨平台商品数据接口的标准化与规范化发展路径:淘宝京东拼多多的最新实践
在电商行业蓬勃发展的当下,多平台运营已成为众多商家的必然选择。然而,不同电商平台在商品数据接口方面存在差异,导致商家在跨平台运营时面临诸多挑战,如数据对接困难、运营效率低下、用户体验不一致等。跨平台商品数据接口的标准…...
