#if DBG
#define WRAPAPI(a) a = a##_wrapper
#else
#define WRAPAPI(a) a
#endif // DBG
LIBRARY USER32

EXPORTS
    ClientThreadSetup                                   PRIVATE ;csrss uses GetProcAddr().
    WRAPAPI(DialogBoxIndirectParamAorW)                 PRIVATE ; comdlg, wow
    WRAPAPI(CreateDialogIndirectParamAorW)              PRIVATE ; comdlg
    EndTask
    WRAPAPI(GetAppCompatFlags)                          PRIVATE
    WRAPAPI(GetAppCompatFlags2)                         PRIVATE
    LoadLocalFonts                                      PRIVATE ; winlogon
    LoadRemoteFonts                                     PRIVATE
    LockWindowStation = NtUserLockWindowStation         PRIVATE
    MBToWCSEx                                           PRIVATE
    WCSToMBEx                                           PRIVATE
    WRAPAPI(MenuWindowProcA)                            PRIVATE
    WRAPAPI(MenuWindowProcW)                            PRIVATE
    QuerySendMessage = NtUserQuerySendMessage           PRIVATE
    RegisterServicesProcess                             PRIVATE
    WRAPAPI(RegisterLogonProcess)                       PRIVATE
    SetLogonNotifyWindow = NtUserSetLogonNotifyWindow   PRIVATE ; Chicago!
    WRAPAPI(ShowStartGlass)                             PRIVATE
    UnlockWindowStation = NtUserUnlockWindowStation     PRIVATE ; Chicago!
    WRAPAPI(UpdatePerUserSystemParameters)              PRIVATE
    UserClientDllInitialize                             PRIVATE
    WRAPAPI(UserRealizePalette)                         PRIVATE ; GDI32
    WRAPAPI(UserRegisterWowHandlers)                    PRIVATE
    WRAPAPI(RegisterSystemThread)                       PRIVATE ; Chicago!
    WRAPAPI(SetWindowStationUser)                       PRIVATE
    WRAPAPI(GetCursorFrameInfo)                         PRIVATE
    SetCursorContents = NtUserSetCursorContents         PRIVATE

    WRAPAPI(DrawCaptionTempA)                           PRIVATE ; desk.cpl
    WRAPAPI(DrawCaptionTempW)                           PRIVATE ; desk.cpl
    SetSysColorsTemp                                    PRIVATE ; desk.cpl
    WRAPAPI(DrawMenuBarTemp)                            PRIVATE

    TranslateMessageEx                                  PRIVATE
    SetConsoleReserveKeys = NtUserSetConsoleReserveKeys PRIVATE
    PrivateExtractIconExA                               PRIVATE
    PrivateExtractIconExW                               PRIVATE
    PrivateExtractIconsA
    PrivateExtractIconsW

;
; These are macros
;
; GetNextWindow
; CopyCursor

;
; this stuff wasn't exported from win31 but was in this file
; for some reason
;
;    InitQueue
;    GetSysInputMode
;    IsTwoByteCharPrefix
;    Lookupmenuitem
;    RecalcTabStrings

;
; win32 will not support these functions
;
;    SetSysModalWindow
;    GetSysModalWindow

;
; do we support these functions?
;
;    EnableHardwareInput
;    GetSystemDebugState
;    GetCSSwitchCount

;
; Callbacks from Server
;
    EditWndProc

;
; class.c "Window class manipulation APIs and support routines."
;
    RegisterClassA
    RegisterClassW
    WRAPAPI(UnregisterClassA)
    WRAPAPI(UnregisterClassW)
    GetClassInfoA
    GetClassInfoW
    WRAPAPI(GetClassWord)
    SetClassWord = NtUserSetClassWord
    GetClassLongA
    GetClassLongW
    SetClassLongA
    SetClassLongW
    WRAPAPI(GetClassNameA)
    WRAPAPI(GetClassNameW)

;
; clres.c "Resource loading/manipulation APIs."
;
    WRAPAPI(LookupIconIdFromDirectory)
    WRAPAPI(CreateIconFromResource)
    WRAPAPI(GetIconInfo)
    WRAPAPI(CreateIconIndirect)
    WRAPAPI(LoadMenuA)
    WRAPAPI(LoadMenuW)
    WRAPAPI(LoadCursorA)
    WRAPAPI(LoadCursorW)
    WRAPAPI(LoadIconA)
    WRAPAPI(LoadIconW)
    WRAPAPI(LoadBitmapA)
    WRAPAPI(LoadBitmapW)
    WRAPAPI(LoadAcceleratorsA)
    WRAPAPI(LoadAcceleratorsW)
    WRAPAPI(LoadStringA)
    WRAPAPI(LoadStringW)

;
; input.c "Window message receiving/dispatching APIs and support routines."
;
    WRAPAPI(GetMessageA)
    WRAPAPI(GetMessageW)
    WRAPAPI(PeekMessageA)
    WRAPAPI(PeekMessageW)
    TranslateMessage
    DispatchMessageA
    DispatchMessageW
    WRAPAPI(SetMessageQueue)
    GetMessagePos
    GetMessageTime
    WaitMessage = NtUserWaitMessage
    WRAPAPI(WaitForInputIdle)
    RegisterHotKey = NtUserRegisterHotKey
    UnregisterHotKey = NtUserUnregisterHotKey
    GetMessageExtraInfo
    AttachThreadInput = NtUserAttachThreadInput

;
; sendmsg.c "Window message sending/posting APIs and support routines."
;
    WRAPAPI(SendMessageA)
    WRAPAPI(SendMessageW)
    WRAPAPI(SendMessageTimeoutA)
    WRAPAPI(SendMessageTimeoutW)
    WRAPAPI(SendNotifyMessageA)
    WRAPAPI(SendNotifyMessageW)
    WRAPAPI(SendMessageCallbackA)
    WRAPAPI(SendMessageCallbackW)
    WRAPAPI(PostMessageA)
    WRAPAPI(PostMessageW)
    WRAPAPI(PostThreadMessageA)
    WRAPAPI(PostThreadMessageW)
    WRAPAPI(ReplyMessage)
    WRAPAPI(PostQuitMessage)
    InSendMessage
    WRAPAPI(InSendMessageEx)
    WRAPAPI(RegisterWindowMessageA)
    WRAPAPI(RegisterWindowMessageW)

;
; sysmet.c "System metrics APIs and support routines."
;
    WRAPAPI(SwapMouseButton)
    GetDoubleClickTime = NtUserGetDoubleClickTime
    WRAPAPI(SetDoubleClickTime)
    WRAPAPI(GetSystemMetrics)
    WRAPAPI(GetSysColor)
    SetSysColors

;
; enumwin.c "Window Enumeration APIs and support routines."
;
    WRAPAPI(EnumWindows)
    WRAPAPI(EnumChildWindows)
    WRAPAPI(EnumThreadWindows)

;
; showwin.c "ShowWindow and related APIs and support routines."
;
    ShowWindow = NtUserShowWindow
    WRAPAPI(ShowOwnedPopups)
    WRAPAPI(OpenIcon)
    WRAPAPI(CloseWindow)

;
; createw.c "CreateWindow and related APIs and support routines."
;
    WRAPAPI(CreateWindowExA)
    WRAPAPI(CreateWindowExW)
    DestroyWindow = NtUserDestroyWindow

;
; swp.c "SetWindowPos and related APIs and support routines."
;
    SetWindowPos = NtUserSetWindowPos
    WRAPAPI(BeginDeferWindowPos)
    DeferWindowPos = NtUserDeferWindowPos
    WRAPAPI(EndDeferWindowPos)
    MoveWindow = NtUserMoveWindow
    WRAPAPI(BringWindowToTop)

;
; spb.c
;
    LockWindowUpdate = NtUserLockWindowUpdate

;
; sprite.c
;
    UpdateLayeredWindow = NtUserUpdateLayeredWindow
    GetLayeredWindowAttributes = NtUserGetLayeredWindowAttributes
    SetLayeredWindowAttributes = NtUserSetLayeredWindowAttributes
    PrintWindow = NtUserPrintWindow

#ifdef REDIRECTION
    SetProcessRedirectionMode = NtUserSetProcessRedirectionMode
    GetProcessRedirectionMode = NtUserGetProcessRedirectionMode
    SetDesktopRedirectionMode = NtUserSetDesktopRedirectionMode
    GetDesktopRedirectionMode = NtUserGetDesktopRedirectionMode
#endif // REDIRECTION
;
; winmgr.c "Core Window Manager APIs and support routines."
;
    WRAPAPI(DefWindowProcA)
    WRAPAPI(DefWindowProcW)
    WRAPAPI(CallWindowProcA)
    WRAPAPI(CallWindowProcW)
    WRAPAPI(FlashWindow)
    FlashWindowEx       = NtUserFlashWindowEx
    WRAPAPI(EnableWindow)
    WRAPAPI(IsWindowEnabled)
    IsWindowUnicode
    WRAPAPI(SetWindowTextA)
    WRAPAPI(SetWindowTextW)
    WRAPAPI(GetWindowTextA)
    WRAPAPI(GetWindowTextW)
    WRAPAPI(InternalGetWindowText)
    WRAPAPI(IsHungAppWindow)
    CreateSystemThreads                         PRIVATE
    WRAPAPI(GetWindowTextLengthA)
    WRAPAPI(GetWindowTextLengthW)
    WRAPAPI(GetClientRect)
    WRAPAPI(GetWindowRect)
    WRAPAPI(AdjustWindowRect)
    WRAPAPI(AdjustWindowRectEx)
    WRAPAPI(GetParent)
    SetParent = NtUserSetParent
    WRAPAPI(FindWindowA)
    WRAPAPI(FindWindowW)
    WRAPAPI(GetTopWindow)
    WRAPAPI(GetLastActivePopup)
    WRAPAPI(GetWindow)
    WRAPAPI(ClientToScreen)
    WRAPAPI(ScreenToClient)
    WRAPAPI(MapWindowPoints)
    WRAPAPI(IsWindow)
    WRAPAPI(IsChild)
    WRAPAPI(IsWindowVisible)
    WRAPAPI(IsIconic)
    WRAPAPI(IsZoomed)
    AnyPopup
    GetInternalWindowPos = NtUserGetInternalWindowPos   PRIVATE
    SetInternalWindowPos = NtUserSetInternalWindowPos   PRIVATE
    WRAPAPI(SystemParametersInfoA)
    WRAPAPI(SystemParametersInfoW)
    WRAPAPI(IsGUIThread)
    WRAPAPI(GetWindowThreadProcessId)
    GetWindowPlacement = NtUserGetWindowPlacement
    SetWindowPlacement = NtUserSetWindowPlacement
    WRAPAPI(AnimateWindow)
#ifdef PRERELEASE
    QueryUserCounters = NtUserQueryUserCounters         PRIVATE
#endif
    GetProcessDefaultLayout
    WRAPAPI(SetProcessDefaultLayout)
    WRAPAPI(IsWindowInDestroy)                          PRIVATE
    WRAPAPI(IsServerSideWindow)                         PRIVATE

;
; dlgmgr.c "Dialog Manager APIs and support routines."
;
    WRAPAPI(CreateDialogParamA)
    WRAPAPI(CreateDialogParamW)
    WRAPAPI(CreateDialogIndirectParamA)
    WRAPAPI(CreateDialogIndirectParamW)
    WRAPAPI(DialogBoxParamA)
    WRAPAPI(DialogBoxParamW)
    WRAPAPI(DialogBoxIndirectParamA)
    WRAPAPI(DialogBoxIndirectParamW)
    WRAPAPI(EndDialog)
    WRAPAPI(DefDlgProcA)
    WRAPAPI(DefDlgProcW)
    WRAPAPI(GetDlgItem)
    WRAPAPI(SetDlgItemInt)
    GetDlgItemInt
    WRAPAPI(SetDlgItemTextA)
    WRAPAPI(SetDlgItemTextW)
    WRAPAPI(GetDlgItemTextA)
    WRAPAPI(GetDlgItemTextW)
    WRAPAPI(SendDlgItemMessageA)
    WRAPAPI(SendDlgItemMessageW)
    WRAPAPI(CheckDlgButton)
    WRAPAPI(CheckRadioButton)
    WRAPAPI(IsDlgButtonChecked)
    WRAPAPI(GetNextDlgGroupItem)
    WRAPAPI(GetNextDlgTabItem)
    WRAPAPI(GetDlgCtrlID)
    GetDialogBaseUnits
    WRAPAPI(MapDialogRect)
    WRAPAPI(IsDialogMessageA)
    WRAPAPI(IsDialogMessageW)
    IsDialogMessage = IsDialogMessageA

;
; clipbrd.c "Clipboard Manager APIs and support routines."
;
    WRAPAPI(OpenClipboard)
    CloseClipboard = NtUserCloseClipboard
    WRAPAPI(EnumClipboardFormats)
    EmptyClipboard = NtUserEmptyClipboard
    WRAPAPI(SetClipboardData)
    WRAPAPI(GetClipboardData)
    RegisterClipboardFormatA = RegisterWindowMessageA
    RegisterClipboardFormatW = RegisterWindowMessageW
    IsClipboardFormatAvailable = NtUserIsClipboardFormatAvailable
    WRAPAPI(GetClipboardFormatNameA)
    WRAPAPI(GetClipboardFormatNameW)
    CountClipboardFormats = NtUserCountClipboardFormats
    GetPriorityClipboardFormat = NtUserGetPriorityClipboardFormat
    GetClipboardOwner = NtUserGetClipboardOwner
    GetClipboardSequenceNumber = NtUserGetClipboardSequenceNumber
    GetClipboardViewer = NtUserGetClipboardViewer
    SetClipboardViewer = NtUserSetClipboardViewer
    ChangeClipboardChain = NtUserChangeClipboardChain

;
; paint.c "Window painting APIs and support routines."
;
    BeginPaint = NtUserBeginPaint
    EndPaint = NtUserEndPaint
    WRAPAPI(GetWindowRgn)
    WRAPAPI(GetWindowRgnBox)
    WRAPAPI(SetWindowRgn)

;
; ghost.c "Window ghosting APIs and support routines"
;
    DisableProcessWindowsGhosting

;
; update.c "Window updating APIs and support routines."
;
    WRAPAPI(UpdateWindow)
    WRAPAPI(GetUpdateRect)
    WRAPAPI(GetUpdateRgn)
    ExcludeUpdateRgn = NtUserExcludeUpdateRgn
    InvalidateRect = NtUserInvalidateRect
    ValidateRect = NtUserValidateRect
    InvalidateRgn = NtUserInvalidateRgn
    WRAPAPI(ValidateRgn)
    RedrawWindow = NtUserRedrawWindow

;
; focus.c "Focus/Activation APIs and support routines."
;
    SetFocus = NtUserSetFocus
    GetFocus
    SetActiveWindow = NtUserSetActiveWindow
    GetActiveWindow
    WRAPAPI(SetForegroundWindow)
    GetForegroundWindow = NtUserGetForegroundWindow
    WRAPAPI(AllowSetForegroundWindow)
    WRAPAPI(LockSetForegroundWindow)

;
; capture.c "Window capture APIs and support routines."
;
    GetCapture
    SetCapture = NtUserSetCapture
    ReleaseCapture

;
; kbdlyout.c "Keyboard Layout APIs and support routines."
;
    WRAPAPI(LoadKeyboardLayoutA)
    WRAPAPI(LoadKeyboardLayoutW)
    ActivateKeyboardLayout = NtUserActivateKeyboardLayout
    UnloadKeyboardLayout
    WRAPAPI(GetKeyboardLayoutNameA)
    WRAPAPI(GetKeyboardLayoutNameW)
    WRAPAPI(LoadKeyboardLayoutEx)    PRIVATE

;
; keyboard.c "Keyboard management APIs and support routines."
;
    GetKBCodePage
    WRAPAPI(GetKeyState)
    WRAPAPI(GetAsyncKeyState)
    GetKeyboardState = NtUserGetKeyboardState
    SetKeyboardState = NtUserSetKeyboardState
    WRAPAPI(GetKeyNameTextA)
    WRAPAPI(GetKeyNameTextW)
    WRAPAPI(GetKeyboardType)

;
; toascii.c "Virtual Keycode to Character translation"
;
    ToAscii
    ToUnicode
    WRAPAPI(VkKeyScanA)
    WRAPAPI(VkKeyScanW)

;
; winable.c "Active Accessibility - Win Event hooks"
;
    GetAltTabInfoA
    GetAltTabInfoW
    GetAltTabInfo = GetAltTabInfoA

    GetAncestor = NtUserGetAncestor
    GetComboBoxInfo = NtUserGetComboBoxInfo
    GetCursorInfo = NtUserGetCursorInfo
    GetGUIThreadInfo = NtUserGetGUIThreadInfo
    GetListBoxInfo = NtUserGetListBoxInfo
    GetMenuBarInfo = NtUserGetMenuBarInfo
    GetScrollBarInfo = NtUserGetScrollBarInfo
    GetTitleBarInfo = NtUserGetTitleBarInfo
    WRAPAPI(GetWindowInfo)
    WRAPAPI(GetWindowModuleFileNameA)
    WRAPAPI(GetWindowModuleFileNameW)
    GetWindowModuleFileName = GetWindowModuleFileNameA

    WRAPAPI(NotifyWinEvent)
    RealChildWindowFromPoint = NtUserRealChildWindowFromPoint
    RealGetWindowClass = RealGetWindowClassA
    WRAPAPI(RealGetWindowClassA)
    WRAPAPI(RealGetWindowClassW)

    SetWinEventHook
    UnhookWinEvent = NtUserUnhookWinEvent
    WRAPAPI(IsWinEventHookInstalled)

    WRAPAPI(RegisterUserApiHook)                        PRIVATE
    UnregisterUserApiHook = NtUserUnregisterUserApiHook PRIVATE
#ifdef MESSAGE_PUMP_HOOK
    RegisterMessagePumpHook                             PRIVATE
    UnregisterMessagePumpHook                           PRIVATE
#endif

;
; xlate.c "Scancode, Virtual Key, and Character translations"
;
    WRAPAPI(MapVirtualKeyA)
    WRAPAPI(MapVirtualKeyW)
    WRAPAPI(OemKeyScan)

;
; lowinput.c "Low-level input APIs and support routines."
;
    GetInputState
    WRAPAPI(GetQueueStatus)
    MsgWaitForMultipleObjects
    MsgWaitForMultipleObjectsEx

;
; timers.c "Timer APIs and support routines."
;
    SetTimer = NtUserSetTimer
    KillTimer = NtUserKillTimer
    SetSystemTimer = NtUserSetSystemTimer               PRIVATE
    WRAPAPI(KillSystemTimer)                            PRIVATE

;
; menu.c "Menu APIs and support routines."
;
    WRAPAPI(TranslateAcceleratorA)
    WRAPAPI(TranslateAcceleratorW)
    TranslateAccelerator = TranslateAcceleratorA
    LoadMenuIndirectW = CreateMenuFromResource
    LoadMenuIndirectA = CreateMenuFromResource
    WRAPAPI(GetMenu)
    WRAPAPI(SetMenu)
    SetSystemMenu = NtUserSetSystemMenu                 PRIVATE
    WRAPAPI(ChangeMenuA)
    WRAPAPI(ChangeMenuW)
    HiliteMenuItem = NtUserHiliteMenuItem
    WRAPAPI(GetMenuStringA)
    WRAPAPI(GetMenuStringW)
    WRAPAPI(GetMenuState)
    WRAPAPI(DrawMenuBar)
    GetSystemMenu = NtUserGetSystemMenu
    CreateMenu
    CreatePopupMenu
    DestroyMenu = NtUserDestroyMenu
    WRAPAPI(CheckMenuItem)
    WRAPAPI(EnableMenuItem)
    WRAPAPI(GetSubMenu)
    WRAPAPI(GetMenuItemID)
    WRAPAPI(GetMenuItemCount)
    WRAPAPI(InsertMenuA)
    WRAPAPI(InsertMenuW)
    WRAPAPI(AppendMenuA)
    WRAPAPI(AppendMenuW)
    WRAPAPI(ModifyMenuA)
    WRAPAPI(ModifyMenuW)
    RemoveMenu = NtUserRemoveMenu
    DeleteMenu = NtUserDeleteMenu
    SetMenuItemBitmaps
    GetMenuCheckMarkDimensions
    TrackPopupMenu
    PaintMenuBar = NtUserPaintMenuBar                   PRIVATE
    CalcMenuBar = NtUserCalcMenuBar                     PRIVATE

;
; scroll.c "Window/DC scrolling APIs and support routines."
;
; later scrollwindow can be removed
    ScrollWindow
    ScrollDC
    ScrollWindowEx

;
; sbapi.c "Scrollbar control"
;
    WRAPAPI(SetScrollPos)
    WRAPAPI(GetScrollPos)
    WRAPAPI(SetScrollRange)
    WRAPAPI(GetScrollRange)
    ShowScrollBar = NtUserShowScrollBar

;
; prop.c "Window property APIs and support routines."
;
    WRAPAPI(SetPropA)
    WRAPAPI(SetPropW)
    WRAPAPI(GetPropA)
    WRAPAPI(GetPropW)
    WRAPAPI(RemovePropA)
    WRAPAPI(RemovePropW)
    WRAPAPI(EnumPropsA)
    WRAPAPI(EnumPropsW)
    WRAPAPI(EnumPropsExA)
    WRAPAPI(EnumPropsExW)

;
; msgbox.c "Message Box APIs and support routines."
;
    MessageBoxA
    MessageBoxW
    MessageBoxExA
    MessageBoxExW
    MessageBoxIndirectA
    MessageBoxIndirectW
    MessageBoxTimeoutA
    MessageBoxTimeoutW
    WRAPAPI(MessageBeep)
    MB_GetString                                PRIVATE
    SoftModalMessageBox                         PRIVATE

;
; rmcreate.c
;
    CreateCursor
    WRAPAPI(DestroyCursor)
    CreateIcon
    DestroyIcon             = DestroyCursor
    WRAPAPI(CreateAcceleratorTableA)
    CreateAcceleratorTableW = NtUserCreateAcceleratorTable
    DestroyAcceleratorTable
    WRAPAPI(CopyAcceleratorTableA)
    CopyAcceleratorTableW = NtUserCopyAcceleratorTable

;
; cursor.c "Mouse cursor APIs and support routines."
;
    WRAPAPI(ShowCursor)
    WRAPAPI(SetCursorPos)
    SetCursor = NtUserSetCursor
    WRAPAPI(GetCursorPos)
    ClipCursor = NtUserClipCursor
    GetClipCursor = NtUserGetClipCursor
    GetCursor
    WRAPAPI(SetSystemCursor)
    WRAPAPI(LoadCursorFromFileA)
    WRAPAPI(LoadCursorFromFileW)

;
; icon.c "Icon management APIs and support routines"
;
    WRAPAPI(DrawIcon)

;
; caret.c "Input caret APIs and support routines."
;
    CreateCaret = NtUserCreateCaret
    GetCaretBlinkTime = NtUserGetCaretBlinkTime
    WRAPAPI(SetCaretBlinkTime)
    DestroyCaret
    HideCaret = NtUserHideCaret
    ShowCaret = NtUserShowCaret
    WRAPAPI(SetCaretPos)
    GetCaretPos = NtUserGetCaretPos

;
; winwhere.c "Window hit-testing APIs and support routines."
;
    WindowFromPoint = NtUserWindowFromPoint
    WRAPAPI(ChildWindowFromPoint)

;
; getset.c "window word manipulation APIs"
;
    WRAPAPI(GetWindowWord)
    SetWindowWord = NtUserSetWindowWord
    GetWindowLongA
    GetWindowLongW
    SetWindowLongA
    SetWindowLongW

;
; desktop.c "Desktop window APIs and window procedure."
;

;   GetDesktopHwnd
    GetDesktopWindow

    WRAPAPI(CreateDesktopA)
    WRAPAPI(CreateDesktopW)

    WRAPAPI(OpenDesktopA)
    WRAPAPI(OpenDesktopW)
    OpenInputDesktop = NtUserOpenInputDesktop

    SwitchDesktop = NtUserSwitchDesktop
    GetInputDesktop
    SetThreadDesktop = NtUserSetThreadDesktop
    GetThreadDesktop
    CloseDesktop = NtUserCloseDesktop
    RegisterTasklist = NtUserRegisterTasklist   PRIVATE
    SetDeskWallpaper
    WRAPAPI(EnumDisplayDevicesA)
    WRAPAPI(EnumDisplayDevicesW)
    WRAPAPI(EnumDisplaySettingsA)
    WRAPAPI(EnumDisplaySettingsW)
    WRAPAPI(EnumDisplaySettingsExA)
    WRAPAPI(EnumDisplaySettingsExW)
    WRAPAPI(EnumWindowStationsA)
    WRAPAPI(EnumWindowStationsW)
    WRAPAPI(EnumDesktopsA)
    WRAPAPI(EnumDesktopsW)
    WRAPAPI(EnumDesktopWindows)
    ResolveDesktopForWOW = NtUserResolveDesktopForWOW PRIVATE


;
; winsta.c "Windowstation APIs."
;
    WRAPAPI(CreateWindowStationA)
    WRAPAPI(CreateWindowStationW)
    WRAPAPI(OpenWindowStationA)
    WRAPAPI(OpenWindowStationW)
    CloseWindowStation = NtUserCloseWindowStation
    SetProcessWindowStation = NtUserSetProcessWindowStation
    GetProcessWindowStation = NtUserGetProcessWindowStation

;
; security.c "USER object security routines."
;
    WRAPAPI(SetUserObjectSecurity)
    WRAPAPI(GetUserObjectSecurity)
    SetUserObjectInformationW = NtUserSetObjectInformation
    SetUserObjectInformationA = NtUserSetObjectInformation
    GetUserObjectInformationW = NtUserGetObjectInformation
    WRAPAPI(GetUserObjectInformationA)

;
; dirlist.c "Directory list APIs and support routines."
;
    WRAPAPI(DlgDirListA)
    WRAPAPI(DlgDirListW)
    WRAPAPI(DlgDirSelectExA)
    WRAPAPI(DlgDirSelectExW)
    WRAPAPI(DlgDirListComboBoxA)
    WRAPAPI(DlgDirListComboBoxW)
    WRAPAPI(DlgDirSelectComboBoxExA)
    WRAPAPI(DlgDirSelectComboBoxExW)

;
; hooks.c "Hook APIs and support routines."
;
    WRAPAPI(SetWindowsHookA)
    WRAPAPI(SetWindowsHookW)
    WRAPAPI(UnhookWindowsHook)
    WRAPAPI(SetWindowsHookExA)
    WRAPAPI(SetWindowsHookExW)
    UnhookWindowsHookEx = NtUserUnhookWindowsHookEx
    WRAPAPI(CallNextHookEx)
    WRAPAPI(CallMsgFilterA)
    WRAPAPI(CallMsgFilterW)
    CallMsgFilter = CallMsgFilterA

;
; MDI.c "Multiple Document Interface APIs, window procs, and support routines."
;
    WRAPAPI(DefFrameProcA)
    WRAPAPI(DefFrameProcW)
    WRAPAPI(DefMDIChildProcA)
    WRAPAPI(DefMDIChildProcW)
    WRAPAPI(ArrangeIconicWindows)
    WRAPAPI(CascadeChildWindows)
    WRAPAPI(TileChildWindows)
;   CalcChildScroll                 ; Private API used by progman
    WRAPAPI(CreateMDIWindowA)
    WRAPAPI(CreateMDIWindowW)
    WRAPAPI(ScrollChildren)           PRIVATE

;
; help.c "Front end API for Windows Help Manager."
;
    WinHelpA
    WinHelpW

;
; draw.c "Miscellaneous exported and internal drawing routines."
;
    WRAPAPI(GrayStringA)
    WRAPAPI(GrayStringW)
    WRAPAPI(DrawTextA)
    WRAPAPI(DrawTextW)
    TabbedTextOutA
    TabbedTextOutW
    GetTabbedTextExtentA
    GetTabbedTextExtentW
    DrawFocusRect

;
; dc.c "DC management APIs and support routines."
;
    GetWindowDC = NtUserGetWindowDC
    GetDC = NtUserGetDC
    WRAPAPI(ReleaseDC)
    WRAPAPI(WindowFromDC)
    GetDCEx = NtUserGetDCEx

;
; palman.c "Palette Manager APIs and support routines."
;
;   SelectPalette
;   RealizePalette

;
; misc.c "Miscellanous APIs and routines that don't fit well anywhere else."
;
    WRAPAPI(ExitWindowsEx)
    WRAPAPI(DisplayExitWindowsWarnings)         PRIVATE
    WRAPAPI(RecordShutdownReason)               PRIVATE
    WRAPAPI(SwitchToThisWindow)
    WRAPAPI(SetDebugErrorLevel)
#if defined(_X86_)
    WRAPAPI(InitializeWin32EntryTable)          PRIVATE
#endif
    EnterReaderModeHelper                       PRIVATE
    IsProcess16Bit                              PRIVATE

;
; clrect.c "Client-side rectangle drawing primitives"
;
    FillRect
    InvertRect
    FrameRect

;
; ddeml.c "DDEML APIs"
;
    WRAPAPI(DdeInitializeA)
    WRAPAPI(DdeInitializeW)
    WRAPAPI(DdeUninitialize)
    WRAPAPI(DdeCmpStringHandles)
    WRAPAPI(DdeConnectList)
    WRAPAPI(DdeQueryNextServer)
    WRAPAPI(DdeDisconnectList)
    WRAPAPI(DdeConnect)
    WRAPAPI(DdeDisconnect)
    WRAPAPI(DdeReconnect)
    WRAPAPI(DdeQueryConvInfo)
    WRAPAPI(DdeSetUserHandle)
    WRAPAPI(DdeAbandonTransaction)
    WRAPAPI(DdePostAdvise)
    WRAPAPI(DdeEnableCallback)
    DdeNameService
    WRAPAPI(DdeClientTransaction)
    WRAPAPI(DdeCreateDataHandle)
    WRAPAPI(DdeAddData)
    WRAPAPI(DdeGetData)
    WRAPAPI(DdeAccessData)
    WRAPAPI(DdeFreeDataHandle)
    WRAPAPI(DdeUnaccessData)
    WRAPAPI(DdeGetLastError)
    WRAPAPI(DdeCreateStringHandleA)
    WRAPAPI(DdeCreateStringHandleW)
    WRAPAPI(DdeQueryStringA)
    WRAPAPI(DdeQueryStringW)
    WRAPAPI(DdeFreeStringHandle)
    WRAPAPI(DdeKeepStringHandle)
    WRAPAPI(DdeImpersonateClient)
    ImpersonateDdeClientWindow = NtUserImpersonateDdeClientWindow
    DdeGetQualityOfService = NtUserDdeGetQualityOfService               PRIVATE
    DdeSetQualityOfService = NtUserDdeSetQualityOfService

;
; ddetrack.c
;
    WRAPAPI(PackDDElParam)
    WRAPAPI(UnpackDDElParam)
    WRAPAPI(FreeDDElParam)
    WRAPAPI(ReuseDDElParam)

;
; dragdrop.c "Drag/Drop support functions."
;
    DragObject = NtUserDragObject
    DragDetect = NtUserDragDetect

;
; Merge 3.1.1
;
    GetOpenClipboardWindow = NtUserGetOpenClipboardWindow
    DrawFrame
    EnableScrollBar
    WRAPAPI(CopyIcon)

;
; winmgrc.c
;
    WRAPAPI(IsMenu)

;
; rect.c "Rectangle management APIs."
;
    SetRect
    SetRectEmpty
    CopyRect
    InflateRect
    SubtractRect
    IntersectRect
    UnionRect
    OffsetRect
    IsRectEmpty
    EqualRect
    PtInRect

;
; alignrec.c "Rectangle management APIs."
;
    AlignRects                                  PRIVATE

;
; strings.c "String manipulation routines.  Should be replaced with Rtl macros."
;
    WRAPAPI(wvsprintfA)
    WRAPAPI(wvsprintfW)
    wsprintfA
    wsprintfW

    WRAPAPI(CharLowerA)
    WRAPAPI(CharLowerW)
    WRAPAPI(CharUpperA)
    WRAPAPI(CharUpperW)
    WRAPAPI(CharNextA)
    WRAPAPI(CharNextW)
    WRAPAPI(CharPrevA)
    WRAPAPI(CharPrevW)
    WRAPAPI(IsCharLowerA)
    WRAPAPI(IsCharLowerW)
    WRAPAPI(IsCharUpperA)
    WRAPAPI(IsCharUpperW)
    WRAPAPI(IsCharAlphaA)
    WRAPAPI(IsCharAlphaW)
    WRAPAPI(IsCharAlphaNumericA)
    WRAPAPI(IsCharAlphaNumericW)
    WRAPAPI(CharLowerBuffA)
    WRAPAPI(CharLowerBuffW)
    WRAPAPI(CharUpperBuffA)
    WRAPAPI(CharUpperBuffW)

;
; oemxlate.c "OEM to ANSI/Unicode, ANSI/Unicode to OEM character translation"
;
    WRAPAPI(CharToOemA)
    WRAPAPI(CharToOemW)
    WRAPAPI(CharToOemBuffA)
    WRAPAPI(CharToOemBuffW)
    WRAPAPI(OemToCharA)
    WRAPAPI(OemToCharW)
    WRAPAPI(OemToCharBuffA)
    WRAPAPI(OemToCharBuffW)

;
; ntinput
;
    WRAPAPI(keybd_event)
    WRAPAPI(mouse_event)

    SendInput = NtUserSendInput
    BlockInput = NtUserBlockInput
    GetMouseMovePointsEx = NtUserGetMouseMovePointsEx
    GetLastInputInfo

    WRAPAPI(SetLastErrorEx)      ; to be moved!!!
;
; Chicago/Cairo APIs
;
    WRAPAPI(BroadcastSystemMessageA)
    WRAPAPI(BroadcastSystemMessageW)
    BroadcastSystemMessage = BroadcastSystemMessageA
    WRAPAPI(BroadcastSystemMessageExA)
    WRAPAPI(BroadcastSystemMessageExW)
    CascadeWindows
    WRAPAPI(ChangeDisplaySettingsA)
    WRAPAPI(ChangeDisplaySettingsW)
    WRAPAPI(ChangeDisplaySettingsExA)
    WRAPAPI(ChangeDisplaySettingsExW)
    WRAPAPI(CharNextExA)                 ; Ansi Only
    WRAPAPI(CharPrevExA)                 ; Ansi Only
    WRAPAPI(CheckMenuRadioItem)
    ChildWindowFromPointEx = NtUserChildWindowFromPointEx
    WRAPAPI(CopyImage)
    WRAPAPI(CreateIconFromResourceEx)
    DrawAnimatedRects = NtUserDrawAnimatedRects
    DrawCaption
    DrawEdge
    WRAPAPI(DrawFrameControl)
    WRAPAPI(DrawIconEx)
    WRAPAPI(DrawStateA)
    WRAPAPI(DrawStateW)
    WRAPAPI(DrawTextExA)
    DrawTextExW
    EndMenu = NtUserEndMenu
    WRAPAPI(FindWindowExA)
    WRAPAPI(FindWindowExW)
    GetClassInfoExA
    GetClassInfoExW
    WRAPAPI(GetKeyboardLayout)
    GetKeyboardLayoutList = NtUserGetKeyboardLayoutList
    WRAPAPI(GetMenuContextHelpId)
    WRAPAPI(GetMenuDefaultItem)
    WRAPAPI(GetMenuInfo)
    WRAPAPI(GetMenuItemInfoA)
    WRAPAPI(GetMenuItemInfoW)
    GetMenuItemRect = NtUserGetMenuItemRect
    WRAPAPI(GetScrollInfo)
    GetShellWindow
    WRAPAPI(GetSysColorBrush)
    WRAPAPI(GetWindowContextHelpId)
    InsertMenuItemA
    InsertMenuItemW
    WRAPAPI(LoadImageA)
    WRAPAPI(LoadImageW)
    WRAPAPI(LookupIconIdFromDirectoryEx)
    WRAPAPI(MapVirtualKeyExA)
    WRAPAPI(MapVirtualKeyExW)
    MenuItemFromPoint = NtUserMenuItemFromPoint
    PaintDesktop = NtUserPaintDesktop
    RegisterClassExA
    RegisterClassExW
    SetMenuContextHelpId = NtUserSetMenuContextHelpId
    SetMenuDefaultItem = NtUserSetMenuDefaultItem
    WRAPAPI(SetMenuInfo)
    WRAPAPI(SetMenuItemInfoA)
    WRAPAPI(SetMenuItemInfoW)
    WRAPAPI(SetMessageExtraInfo)
    WRAPAPI(SetScrollInfo)
    WRAPAPI(SetShellWindow)
    SetShellWindowEx = NtUserSetShellWindowEx   PRIVATE
    WRAPAPI(SetWindowContextHelpId)
    ShowWindowAsync = NtUserShowWindowAsync
    TileWindows
    ToAsciiEx
    ToUnicodeEx
    TrackMouseEvent = NtUserTrackMouseEvent
    TrackPopupMenuEx = NtUserTrackPopupMenuEx
    WRAPAPI(TranslateMDISysAccel)
    WRAPAPI(VkKeyScanExA)
    WRAPAPI(VkKeyScanExW)

; Win 5.0 APIs
    GetGuiResources     = NtUserGetGuiResources
    RegisterDeviceNotificationA
    RegisterDeviceNotificationW
    UnregisterDeviceNotification
    DeviceEventWorker                           PRIVATE

    Win32PoolAllocationStats = NtUserWin32PoolAllocationStats    PRIVATE

#if DBG
    WRAPAPI(DbgWin32HeapFail)
    WRAPAPI(DbgWin32HeapStat)
#endif

    LockWorkStation = NtUserLockWorkStation

    UserHandleGrantAccess = NtUserUserHandleGrantAccess

; multimonitor apis
    WRAPAPI(GetMonitorInfoA)
    WRAPAPI(GetMonitorInfoW)
    EnumDisplayMonitors = NtUserEnumDisplayMonitors
    MonitorFromPoint
    MonitorFromRect
    MonitorFromWindow

    WRAPAPI(SetTaskmanWindow)                   PRIVATE
    GetTaskmanWindow                            PRIVATE
    WRAPAPI(SetProgmanWindow)                   PRIVATE
    GetProgmanWindow                            PRIVATE
    WRAPAPI(RegisterShellHookWindow)
    WRAPAPI(DeregisterShellHookWindow)

#if DBG
    PrivateSetDbgTag                            PRIVATE
    PrivateSetRipFlags                          PRIVATE
    SetDbgTag                                   PRIVATE
    SetRipFlags                                 PRIVATE
    GetRipFlags                                 PRIVATE
    GetDbgTagFlags                              PRIVATE

    VRipOutput                                  PRIVATE
    VTagOutput                                  PRIVATE
#endif

;
;   Used by CreateWindowStation() and winsrv.dll to
;   finish DLL init after the connection is made.
;   No graphics can be done until the connection is
;   established.
    CtxInitUser32                               PRIVATE
    GetWinStationInfo                           PRIVATE



#ifdef _WIN64
    WRAPAPI(GetWindowLongPtrA)
    WRAPAPI(GetWindowLongPtrW)
    WRAPAPI(SetWindowLongPtrA)
    WRAPAPI(SetWindowLongPtrW)
    WRAPAPI(GetClassLongPtrA)
    WRAPAPI(GetClassLongPtrW)
    WRAPAPI(SetClassLongPtrA)
    WRAPAPI(SetClassLongPtrW)
#endif

;
; The following IMM functions are faked(US) or dynamically loaded(FE)
;
    WRAPAPI(WINNLSGetIMEHotkey)
    WRAPAPI(WINNLSEnableIME)
    WRAPAPI(WINNLSGetEnableStatus)
    WRAPAPI(SendIMEMessageExW)
    WRAPAPI(SendIMEMessageExA)
    WRAPAPI(IMPGetIMEW)
    WRAPAPI(IMPGetIMEA)
    WRAPAPI(IMPQueryIMEW)
    WRAPAPI(IMPQueryIMEA)
    WRAPAPI(IMPSetIMEW)
    WRAPAPI(IMPSetIMEA)
    WRAPAPI(User32InitializeImmEntryTable)      PRIVATE

;
; IMM related private APIs
;
    WRAPAPI(CliImmSetHotKey)                    PRIVATE
#ifdef LATER
    WRAPAPI(ImmReconversionWorker)              PRIVATE
#endif

;
; LPK APIs
;
    InitializeLpkHooks                          PRIVATE
    UserLpkTabbedTextOut                        PRIVATE
    WRAPAPI(UserLpkPSMTextOut)                  PRIVATE

#ifdef GENERIC_INPUT
    ; Raw Input APIs
    GetRawInputData = NtUserGetRawInputData
    WRAPAPI(GetRawInputDeviceInfoA)
    WRAPAPI(GetRawInputDeviceInfoW)
    RegisterRawInputDevices = NtUserRegisterRawInputDevices
    GetRegisteredRawInputDevices = NtUserGetRegisteredRawInputDevices
    WRAPAPI(GetRawInputBuffer)
    GetRawInputDeviceList = NtUserGetRawInputDeviceList
    DefRawInputProc
#endif // GENERIC_INPUT

;
; Shutdown reason APIs
    GetReasonTitleFromReasonCode                PRIVATE
    ReasonCodeNeedsComment                      PRIVATE
    ReasonCodeNeedsBugID                        PRIVATE
    BuildReasonArray                            PRIVATE
    DestroyReasons                              PRIVATE
    IsSETEnabled                                PRIVATE

;
; BroadcastSystemMessageExW wrapper function
; associates a desktop with the csrss server thread
; in order to send a message with BroadcastSystemMessageExW
;
    WRAPAPI(CsrBroadcastSystemMessageExW)       PRIVATE

    AllowForegroundActivation                   PRIVATE