15#define INVALID_THREAD_ID ((ULONG)-1)
16#define INVALID_HOTKEY ((UINT)-1)
17#define MOD_KEYS (MOD_CONTROL | MOD_SHIFT | MOD_ALT | MOD_WIN)
18#define MOD_LEFT_RIGHT (MOD_LEFT | MOD_RIGHT)
20#define LANGID_CHINESE_SIMPLIFIED MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
21#define LANGID_JAPANESE MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT)
22#define LANGID_KOREAN MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN)
23#define LANGID_CHINESE_TRADITIONAL MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
24#define LANGID_NEUTRAL MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)
101#define IME_CHOTKEY 0x10
102#define IME_JHOTKEY 0x30
103#define IME_KHOTKEY 0x50
104#define IME_THOTKEY 0x70
105#define IME_XHOTKEY 0x90
106 static const LANGID s_array[] =
135 for (pNode = *ppList; pNode; pNode = pNode->
pNext)
139 pNode->
pNext = pHotKey;
149 for (pNode =
pList; pNode; pNode = pNode->
pNext)
166 for (pNode =
pList; pNode; pNode = pNode->
pNext)
194 if (*ppList == pHotKey)
196 *ppList = pHotKey->
pNext;
201 for (pNode = *ppList; pNode; pNode = pNode->
pNext)
203 if (pNode->
pNext == pHotKey)
221 UINT nScore, nMaxScore = 0;
223 for (pNode =
pList; pNode; pNode = pNode->
pNext)
264 if (nMaxScore < nScore)
281 static UINT s_uKeyUpVKey = 0;
400 ERR(
"0x%lX\n", dwAction);
421 ERR(
"%p, %p, %p\n", lpuModifiers, lpuVirtualKey, lphKL);
439 ERR(
"%p, %p, %p, %p\n", pNode, lpuModifiers, lpuVirtualKey, lphKL);
517 if (pOldKL && pOldKL->
hkl != hOldKL)
539 DWORD dwRealCount = 0;
545 if (dwRealCount < dwCount)
557 if (dwRealCount < dwCount)
596 pKL = pWnd->
head.pti->KeyboardLayout;
700 ERR(
"!IS_IMM_MODE()\n");
728 ERR(
"%p, %p\n", phList, pdwCount);
733 if (dwCount < dwRealCount)
749 BOOL bAlphaNumeric, bKatakana, bHiragana, bFullShape, bRoman, bCharCode;
813 ERR(
"!IS_IMM_MODE()\n");
821 pti = pwnd->
head.pti;
863 ERR(
"!IS_IMM_MODE()\n");
872 ppi = ptiCurrent->
ppi;
899 if (!pti || pti->
ppi != ptiCurrent->
ppi)
935 ERR(
"!IS_IMM_MODE()\n");
941 if (pWnd->
head.pti->ppi == pti->
ppi)
968 if (pInfoEx->hkl == pkl->
hkl)
972 ERR(
"!pkl->piiex at %p\n", pkl->
hkl);
976 *pInfoEx = *pkl->
piiex;
981 }
while (pkl != pklHead);
991 *pInfoEx = *pkl->
piiex;
996 }
while (pkl != pklHead);
1000 ERR(
"SearchType: %d\n", SearchType);
1020 ERR(
"!IS_IMM_MODE()\n");
1027 ImeInfoEx = *pImeInfoEx;
1031 ERR(
"%p\n", pImeInfoEx);
1044 *pImeInfoEx = ImeInfoEx;
1048 ERR(
"%p\n", pImeInfoEx);
1070 ERR(
"!IS_IMM_MODE()\n");
1080 if (pWnd->
head.pti->ppi == pti->
ppi)
1103 if (pkl->
hkl != pImeInfoEx->hkl)
1111 ERR(
"!pkl->piiex at %p\n", pkl->
hkl);
1116 *pkl->
piiex = *pImeInfoEx;
1119 }
while (pkl != pklHead);
1136 ERR(
"!IS_IMM_MODE()\n");
1143 ImeInfoEx = *pImeInfoEx;
1147 ERR(
"%p\n", pImeInfoEx);
1164 PWND pwndNode, pwndNextOwner, pwndParent, pwndSibling;
1171 for (pwndNode = pwndOwner; ; pwndNode = pwndNextOwner)
1174 if (!pwndNextOwner || pwndNextOwner->
head.pti != pti)
1182 pwndNode = pwndOwner;
1186 if (!pwndParent || pwndOwner != pwndNode)
1192 for (pwndSibling = pwndParent->
spwndChild; pwndSibling; pwndSibling = pwndSibling->
spwndNext)
1194 if (pwndNode->
head.pti != pwndSibling->
head.pti)
1203 if (pwndNode == pwndSibling || (pwndSibling->
style &
WS_CHILD))
1209 pwndNode = pwndSibling;
1221 PWND pwndNode, pwndOwner, pwndLastTopMost =
NULL;
1237 for (pwndOwner = pwndNode; pwndOwner; pwndOwner = pwndOwner->
spwndOwner)
1239 if (pImeWnd == pwndOwner)
1248 pwndLastTopMost = pwndNode;
1251 return pwndLastTopMost;
1258 PWND pwndParent, pwndChild, pwndNode, pwndNext, pwndInsertAfter =
NULL;
1259 PWND pwndInsertAfterSave;
1271 if (pwndInsertBefore)
1273 for (pwndNode = pwndInsertAfter; pwndNode; pwndNode = pwndNode->
spwndNext)
1275 if (pwndNode->
spwndNext == pwndInsertBefore)
1278 if (pwndNode == pImeWnd)
1285 pwndInsertAfter = pwndNode;
1291 for (pwndNode = pwndInsertAfter; pwndNode; pwndNode = pwndNode->
spwndNext)
1297 pwndInsertAfter = pwndNode;
1302 pwndInsertAfterSave = pwndInsertAfter;
1310 pwndChild->
head.pti == pImeWnd->
head.pti)
1313 for (pwndNode = pwndChild; pwndNode; pwndNode = pwndNode->
spwndOwner)
1315 if (pwndNode != pImeWnd)
1324 pwndChild->
ExStyle &= ~WS_EX_TOPMOST;
1326 if (!pwndInsertAfter)
1332 pwndInsertAfter = pwndChild;
1338 pwndChild = pwndNext;
1339 if (pwndChild && pwndChild == pwndInsertAfterSave && pwndInsertAfter)
1355 pwndInsertBefore = pwndOwner;
1365 PWND pImeWnd, pwndFocus, pwndTopLevel, pwndNode, pwndActive;
1372 ERR(
"!IS_IMM_MODE()\n");
1388 for (pwndNode = pwndTopLevel; pwndNode; pwndNode = pwndNode->
spwndOwner)
1392 pwndTopLevel =
NULL;
1402 ptiIme = pImeWnd->
head.pti;
1405 if (!pwndActive || pwndActive != pImeWnd->
spwndOwner)
1447 ObjHead->
pSelf = ObjHead;
1452 pti->
ppi->UserHandleCount++;
1468 pti = pIMC->
head.pti;
1480 pti->
ppi->UserHandleCount--;
1517 pwndChild = pti->
rpdesk->pDeskInfo->spwnd->spwndChild;
1524 if (pWnd && pWnd->
hImc == hIMC)
1566 ERR(
"IME is disabled\n");
1586 if (dwClientImcData)
1615 ERR(
"!IS_IMM_MODE()\n");
1620 if (!dwClientImcData)
1640 BOOL bIgnoreNullImc = (
dwFlags & IACE_IGNORENOCONTEXT);
1652 if (pIMC && pti != pIMC->
head.pti)
1674 if (pwndTarget->
hImc == hIMC || (bIgnoreNullImc && !pwndTarget->
hImc))
1678 if (pwndTarget == pwndFocus)
1686 if (!bIgnoreNullImc || pWnd->
hImc)
1689 if (pWnd->
hImc != hIMC)
1692 if (pWnd == pwndFocus)
1712 ERR(
"!IS_IMM_MODE()\n");
1734 if (pti->
ppi != ptiIMC->
ppi)
1774 ERR(
"!IS_IMM_MODE()\n");
1806 ptiIMC = pIMC->
head.pti;
1840 PWND pwnd, pwndOwner, pwndNode;
1846 if (pwnd == pwndTarget || pwnd->
head.pti != ptiTarget ||
IS_WND_MENU(pwnd))
1853 for (pwndOwner = pwnd; pwndOwner; pwndOwner = pwndOwner->
spwndOwner)
1873 if (pwndNode->
head.pti != ptiTarget)
1891 for (; pwndNode; pwndNode = pwndNode->
spwndOwner)
1893 if (pwndNode->
head.pti != ptiTarget)
1940 for (pwndNode = pwndParent; pwndNode; pwndNode = pwndNode->
spwndParent)
1996 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2006 ERR(
"%p\n", pimeui);
2023 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2031 SafeImeUI = *pimeui;
2037 ERR(
"%p\n", pimeui);
2048 for (pwndNode = pwndTarget; pwndNode; pwndNode = pwndNode->
spwndParent)
2050 if (pwndNode == pwndNode->
head.
rpdesk->pDeskInfo->spwnd)
2068 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2076 SafeImeUI = *pimeui;
2082 ERR(
"%p\n", pimeui);
2091 if (pwndNode == pwndTarget)
2100 for (pwndNode = pwndTarget; pwndNode; pwndNode = pwndNode->
spwndOwner)
2110 if (pwndNode == pImeWnd)
2113 if (pwndNode == pImeWnd)
2131 PWND pwndNode, pwndIMC;
2149 if (!pwndNode || pwndIme == pwndNode)
2158 pimeui = ((
PIMEWND)pwndNode)->pimeui;
2159 if (!pimeui || pimeui == (
PIMEUI)-1)
2162 if (pti && pti != pwndNode->
head.pti)
2167 if (pwndNode->
head.pti->ppi != ptiCurrent->
ppi)
2177 SafeImeUI = *pimeui;
2191 ERR(
"%p\n", pimeui);
2241 SafeImeUI = *pimeui;
2246 ERR(
"%p\n", pimeui);
2263 ERR(
"%p\n", pimeui);
2288 ERR(
"%p\n", pimeui);
2335 ptiIME = pImeWnd->
head.pti;
2345 pimeui = ((
PIMEWND)pImeWnd)->pimeui;
2346 SafeImeUI = *pimeui;
2362 ERR(
"%p, %p\n", pImeWnd, pimeui);
#define InterlockedIncrement
#define InterlockedDecrement
#define UlongToHandle(ul)
#define DBG_DEFAULT_CHANNEL(ch)
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define ERROR_ACCESS_DENIED
#define ValidateHwndNoErr(hwnd)
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI ProbeForRead(IN CONST VOID *Address, IN SIZE_T Length, IN ULONG Alignment)
VOID NTAPI ProbeForWrite(IN PVOID Address, IN SIZE_T Length, IN ULONG Alignment)
PUSER_MESSAGE_QUEUE gpqForeground
#define ISITHOOKED(HookId)
@ ImeInfoExKeyboardLayout
#define IME_CMODE_KATAKANA
#define IME_CMODE_HANJACONVERT
#define IME_THOTKEY_IME_NONIME_TOGGLE
#define MOD_IGNORE_ALL_MODIFIER
#define IME_CHOTKEY_IME_NONIME_TOGGLE
#define IME_HOTKEY_DSWITCH_LAST
#define IME_CMODE_CHARCODE
#define IME_CMODE_ALPHANUMERIC
#define IMN_OPENSTATUSWINDOW
#define IME_HOTKEY_DSWITCH_FIRST
#define IMN_CLOSESTATUSWINDOW
#define IME_CMODE_FULLSHAPE
#define IME_PROP_NEED_ALTKEY
#define IME_PROP_IGNORE_UPKEYS
#define EXCEPTION_EXECUTE_HANDLER
#define WNDS_SERVERSIDEWINDOWPROC
#define UserHMGetHandle(obj)
DWORD NTAPI NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion)
BOOL NTAPI NtUserDisableThreadIme(DWORD dwThreadID)
struct _THREADINFO * GetW32ThreadInfo(VOID)
BOOL NTAPI NtUserSetImeInfoEx(PIMEINFOEX pImeInfoEx)
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING, IN PCWSTR, IN INT)
BOOL NTAPI NtUserGetImeInfoEx(PIMEINFOEX pImeInfoEx, IMEINFOEXCLASS SearchType)
#define VK_DBE_ALPHANUMERIC
#define VK_DBE_ENTERCONFIGMODE
#define VK_DBE_ENTERWORDREGISTERMODE
#define VK_DBE_NOCODEINPUT
#define ExFreePoolWithTag(_P, _T)
NTSYSAPI NTSTATUS NTAPI ZwQueryDefaultLocale(_In_ BOOLEAN UserProfile, _Out_ PLCID DefaultLocaleId)
#define MAKELCID(lgid, srtid)
HANDLE NTAPI PsGetThreadId(IN PETHREAD Thread)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
HANDLE NTAPI PsGetThreadProcessId(IN PETHREAD Thread)
LRESULT APIENTRY co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
PWINSTATION_OBJECT FASTCALL IntGetProcessWindowStation(HWINSTA *phWinSta OPTIONAL)
VOID FASTCALL UserLeave(VOID)
VOID FASTCALL UserEnterShared(VOID)
VOID FASTCALL UserEnterExclusive(VOID)
static __inline VOID UserDerefObjectCo(PVOID obj)
static __inline VOID UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY UserReferenceEntry)
VOID NTAPI KeDetachProcess(VOID)
VOID NTAPI KeAttachProcess(IN PKPROCESS Process)
#define _SEH2_EXCEPT(...)
#define _SEH2_YIELD(__stmt)
_Check_return_ _CRTIMP int __cdecl _wcsnicmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
#define LANGIDFROMLCID(l)
#define STATUS_BUFFER_TOO_SMALL
struct _WINSTATION_OBJECT * rpwinstaParent
struct _CLIENTINFO * pClientInfo
struct tagIMC * spDefaultImc
struct tagKL * KeyboardLayout
struct _WND * spwndDefaultIme
struct _USER_MESSAGE_QUEUE * MessageQueue
BYTE afKeyState[256 *2/8]
struct _WND * spwndParent
ULONG_PTR dwClientImcData
struct tagIMEHOTKEY * pNext
HWND ahwnd[ANYSIZE_ARRAY]
#define RtlZeroMemory(Destination, Length)
#define STATUS_UNSUCCESSFUL
@ SETIMEHOTKEY_INITIALIZE
#define ASSERT_REFS_CO(_obj_)
BOOLEAN co_UserDestroyWindow(PVOID Object)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
#define IntDereferenceThreadInfo(pti)
#define IntReferenceThreadInfo(pti)
DWORD APIENTRY co_IntImmProcessKey(HWND hWnd, HKL hKL, UINT vKey, LPARAM lParam, DWORD dwHotKeyID)
PWND FASTCALL UserGetDesktopWindow(VOID)
PTHREADINFO gptiForeground
static __inline PVOID DesktopHeapAlloc(IN PDESKTOP Desktop, IN SIZE_T Bytes)
static __inline BOOL DesktopHeapFree(IN PDESKTOP Desktop, IN PVOID lpMem)
BOOL IntFindNonImeRelatedWndOfSameThread(PWND pwndParent, PWND pwndTarget)
static PIMEHOTKEY FASTCALL IntGetImeHotKeyById(PIMEHOTKEY pList, DWORD dwHotKeyId)
#define INVALID_THREAD_ID
VOID FASTCALL IntFreeImeHotKeys(VOID)
#define LANGID_CHINESE_SIMPLIFIED
DWORD FASTCALL IntAssociateInputContextEx(PWND pWnd, PIMC pIMC, DWORD dwFlags)
struct tagIMEHOTKEY IMEHOTKEY
BOOL NTAPI NtUserSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
PIMEHOTKEY IntGetImeHotKeyByKey(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight, UINT uVirtualKey)
PWND FASTCALL IntGetTopLevelWindow(PWND pwnd)
LRESULT FASTCALL IntSendMessageToUI(PTHREADINFO ptiIME, PIMEUI pimeui, UINT uMsg, WPARAM wParam, LPARAM lParam)
DWORD NTAPI NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL)
static VOID FASTCALL IntDeleteImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
PVOID AllocInputContextObject(PDESKTOP pDesk, PTHREADINFO pti, SIZE_T Size, PVOID *HandleOwner)
BOOL FASTCALL IntImeCanDestroyDefIME(PWND pImeWnd, PWND pwndTarget)
DWORD NTAPI NtUserGetAppImeLevel(HWND hWnd)
static BOOL APIENTRY IntSetImeHotKey(DWORD dwHotKeyId, UINT uModifiers, UINT uVirtualKey, HKL hKL, DWORD dwAction)
static LANGID FASTCALL IntGetImeHotKeyLangId(DWORD dwHotKeyId)
DWORD FASTCALL UserBuildHimcList(PTHREADINFO pti, DWORD dwCount, HIMC *phList)
BOOL IntDestroyInputContext(PIMC pIMC)
DWORD NTAPI NtUserCheckImeHotKey(UINT uVirtualKey, LPARAM lParam)
VOID FASTCALL IntSendOpenStatusNotify(PTHREADINFO ptiIME, PIMEUI pimeui, PWND pWnd, BOOL bOpen)
BOOL FASTCALL IntCheckImeShowStatus(PWND pwndIme, PTHREADINFO pti)
BOOL NTAPI NtUserSetAppImeLevel(HWND hWnd, DWORD dwLevel)
BOOL FASTCALL UserUpdateInputContext(PIMC pIMC, DWORD dwType, DWORD_PTR dwValue)
BOOL NTAPI NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus)
VOID FASTCALL IntCheckImeShowStatusInThread(PWND pImeWnd)
BOOL NTAPI NtUserDestroyInputContext(HIMC hIMC)
PIMEHOTKEY gpImeHotKeyList
PWND FASTCALL co_IntCreateDefaultImeWindow(PWND pwndTarget, HINSTANCE hInst)
BOOL NTAPI NtUserGetImeHotKey(DWORD dwHotKeyId, LPUINT lpuModifiers, LPUINT lpuVirtualKey, LPHKL lphKL)
#define LANGID_CHINESE_TRADITIONAL
PIMC FASTCALL UserCreateInputContext(ULONG_PTR dwClientImcData)
BOOL FASTCALL IntImeCanDestroyDefIMEforChild(PWND pImeWnd, PWND pwndTarget)
HIMC FASTCALL IntAssociateInputContext(PWND pWnd, PIMC pImc)
VOID FASTCALL IntImeSetFutureOwner(PWND pImeWnd, PWND pwndOwner)
BOOL FASTCALL IntWantImeWindow(PWND pwndTarget)
BOOL FASTCALL UserGetImeInfoEx(_Inout_ PWINSTATION_OBJECT pWinSta, _Inout_ PIMEINFOEX pInfoEx, _In_ IMEINFOEXCLASS SearchType)
VOID FASTCALL IntImeSetTopMost(PWND pImeWnd, BOOL bTopMost, PWND pwndInsertBefore)
PWND FASTCALL IntGetLastTopMostWindowNoIME(PWND pImeWnd)
BOOLEAN UserDestroyInputContext(PVOID Object)
NTSTATUS NTAPI NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCount)
UINT FASTCALL IntGetImeHotKeyLanguageScore(HKL hKL, LANGID HotKeyLangId)
HKL FASTCALL IntGetActiveKeyboardLayout(VOID)
HIMC NTAPI NtUserCreateInputContext(ULONG_PTR dwClientImcData)
BOOL FASTCALL UserSetImeInfoEx(_Inout_ PWINSTATION_OBJECT pWinSta, _Inout_ PIMEINFOEX pImeInfoEx)
VOID FASTCALL IntImeCheckTopmost(PWND pImeWnd)
static VOID FASTCALL UserSetImeConversionKeyState(PTHREADINFO pti, DWORD dwConversion)
VOID FASTCALL IntNotifyImeShowStatus(PWND pImeWnd)
VOID UserFreeInputContext(PVOID Object)
BOOL NTAPI NtUserUpdateInputContext(HIMC hIMC, DWORD dwType, DWORD_PTR dwValue)
BOOL FASTCALL IntBroadcastImeShowStatusChange(PWND pImeWnd, BOOL bShow)
struct tagIMEHOTKEY * PIMEHOTKEY
PIMEHOTKEY IntCheckImeHotKey(PUSER_MESSAGE_QUEUE MessageQueue, UINT uVirtualKey, LPARAM lParam)
DWORD FASTCALL IntGetImeCompatFlags(PTHREADINFO pti)
DWORD NTAPI NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags)
UINT FASTCALL IntImmProcessKey(PUSER_MESSAGE_QUEUE MessageQueue, PWND pWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static VOID FASTCALL IntAddImeHotKey(PIMEHOTKEY *ppList, PIMEHOTKEY pHotKey)
static PIMEHOTKEY APIENTRY IntGetImeHotKeyByKeyAndLang(PIMEHOTKEY pList, UINT uModKeys, UINT uLeftRight, UINT uVirtualKey, LANGID TargetLangId)
HKL FASTCALL UserGetKeyboardLayout(DWORD dwThreadId)
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
LRESULT FASTCALL co_IntSendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
PTHREADINFO FASTCALL IntTID2PTI(HANDLE id)
PVOID UserGetObject(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
BOOL FASTCALL UserMarkObjectDestroy(PVOID Object)
PVOID FASTCALL UserAssignmentLock(PVOID *ppvObj, PVOID pvNew)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
PUSER_HANDLE_TABLE gHandleTable
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
PVOID UserGetObjectNoErr(PUSER_HANDLE_TABLE ht, HANDLE handle, HANDLE_TYPE type)
HANDLE FASTCALL UserGetProp(_In_ PWND Window, _In_ ATOM Atom, _In_ BOOLEAN SystemProp)
VOID FASTCALL IntFreeHwndList(PWINDOWLIST pwlTarget)
VOID FASTCALL IntUnlinkWindow(PWND Wnd)
PWND FASTCALL co_UserCreateWindowEx(CREATESTRUCTW *Cs, PUNICODE_STRING ClassName, PLARGE_STRING WindowName, PVOID acbiBuffer, DWORD dwVer)
PWINDOWLIST FASTCALL IntBuildHwndList(PWND pwnd, DWORD dwFlags, PTHREADINFO pti)
VOID FASTCALL IntLinkHwnd(PWND Wnd, HWND hWndPrev)
static VOID WndSetOwner(_Inout_ PWND pwnd, _In_opt_ PWND pwndOwner)
#define IS_WND_MENU(pWnd)
#define IS_WND_IMELIKE(pWnd)
#define IS_WND_CHILD(pWnd)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
_In_ ULONG_PTR _In_ ULONG _Out_ ULONG_PTR * pid