18#define IMEMENUINFO_BUFFER_SIZE 0x20000
19#define IMEMENUINFO_MAPPING_NAME L"ImmMenuInfo"
43#define PTR_FROM_OFFSET(head, offset) (PVOID)((PBYTE)(head) + (SIZE_T)(offset))
49 _Out_ PIMEMENUITEMINFOW pItemW,
54 pItemW->cbSize = pItemA->cbSize;
55 pItemW->fType = pItemA->fType;
56 pItemW->fState = pItemA->fState;
57 pItemW->wID = pItemA->wID;
60 pItemW->hbmpChecked = pItemA->hbmpChecked;
61 pItemW->hbmpUnchecked = pItemA->hbmpUnchecked;
62 pItemW->hbmpItem = pItemA->hbmpItem;
64 pItemW->dwItemData = pItemA->dwItemData;
66 pItemW->szString,
_countof(pItemW->szString));
75 _Out_ PIMEMENUITEMINFOA pItemA,
79 pItemA->cbSize = pItemW->cbSize;
80 pItemA->fType = pItemW->fType;
81 pItemA->fState = pItemW->fState;
82 pItemA->wID = pItemW->wID;
83 pItemA->hbmpChecked = pItemW->hbmpChecked;
84 pItemA->hbmpUnchecked = pItemW->hbmpUnchecked;
85 pItemA->dwItemData = pItemW->dwItemData;
86 pItemA->hbmpItem = pItemW->hbmpItem;
111 pBmih = &pNode->bmih;
116 ERR(
"Invalid hbmp: %p\n",
hbmp);
137 ERR(
"No more space\n");
141 dibBitsPtr = (
PBYTE)pBmih + nodeExtraSize;
142 pNode->dibBitsPtr = (
ULONG_PTR)dibBitsPtr;
147 ERR(
"Out of memory\n");
159 ERR(
"GetDIBits failed\n");
171 PIMEMENUITEMINFO lpImeParentMenu,
172 PIMEMENUITEMINFO lpImeMenuItems,
182 if ((
dwSize == 0 || !lpImeMenuItems) && !lpImeParentMenu)
186 else if (lpImeParentMenu)
189 PIMEMENUITEMINFOW pParentSlot = (PIMEMENUITEMINFOW)(pView + 1);
192 pParentSlot->hbmpChecked =
NULL;
193 pParentSlot->hbmpUnchecked =
NULL;
194 pParentSlot->hbmpItem =
NULL;
233 (
PBYTE)pNode >= (
PBYTE)pView + pView->dwBufferSize ||
237 ERR(
"Insufficient or incorrect space\n");
245 ERR(
"GetDC failed\n");
252 ERR(
"CreateCompatibleDC failed\n");
256 pListHead = (
PBITMAPNODE)pView->dwBitmapListOffset;
266 ERR(
"No more space\n");
268 pView->dwBitmapListOffset = pNode->
dwNext;
274 pView->dwBitmapListOffset = (
ULONG_PTR)pNode;
284 if (!pNode || !pNode->dibBitsPtr)
287 if (pNode->hbmpCached)
288 return pNode->hbmpCached;
303 pNode->hbmpCached =
hbmp;
315 DWORD i, dwCount, dwTempBufSize;
331 ERR(
"Invalid dwParentOffset\n");
347 ERR(
"Invalid dwItemsOffset\n");
364 ERR(
"Out of memory\n");
375 pTempBuf, dwTempBufSize);
399 if (pItemsEnd > pBufferEnd)
408 for (
i = 0;
i < dwCount;
i++)
410 PIMEMENUITEMINFOW pSrc = &pTempBuf[
i];
411 PIMEMENUITEMINFOW pDest =
pItems +
i;
415 if (pSrc->hbmpChecked)
424 pDest->hbmpChecked =
NULL;
428 if (pSrc->hbmpUnchecked)
437 pDest->hbmpUnchecked =
NULL;
450 pDest->hbmpItem =
NULL;
469 PIMEMENUITEMINFOW pItem =
pItems +
i;
470 if (pItem->hbmpChecked)
472 if (pItem->hbmpUnchecked)
508 _Out_opt_ PIMEMENUITEMINFOW lpImeMenuItems,
514 PIMEMENUITEMINFOW pItemsBase;
516 dwCount = pView->dwCount;
527 if (pView->dwBitmapListOffset)
539 if (
pCur->dibBitsPtr)
546 if ((
PBYTE)pNextCur < pViewBase ||
547 (
PBYTE)pNextCur >= pViewBase + pView->dwBufferSize)
549 ERR(
"Invalid dwNext\n");
564 if (pView->dwItemsOffset)
566 pItemsBase = (PIMEMENUITEMINFOW)(pViewBase + pView->dwItemsOffset);
568 if ((
PBYTE)pItemsBase < pViewBase || (
PBYTE)pItemsBase >= pViewBase + pView->dwBufferSize)
582 pView->dwItemsOffset = (
ULONG_PTR)pItemsBase;
590 for (
i = 0;
i < dwCount;
i++)
592 PIMEMENUITEMINFOW pItem =
596 if (pItem->hbmpChecked)
599 if ((
PBYTE)pN < pViewBase || (
PBYTE)pN >= pViewBase + pView->dwBufferSize)
601 ERR(
"Invalid hbmpChecked\n");
608 if (pItem->hbmpUnchecked)
611 if ((
PBYTE)pN < pViewBase || (
PBYTE)pN >= pViewBase + pView->dwBufferSize)
613 ERR(
"Invalid hbmpUnchecked\n");
623 if ((
PBYTE)pN < pViewBase || (
PBYTE)pN >= pViewBase + pView->dwBufferSize)
625 ERR(
"Invalid hbmpItem\n");
633 for (
i = 0;
i < dwCount;
i++)
635 PIMEMENUITEMINFOW pSrc =
637 PIMEMENUITEMINFOW pDst = &lpImeMenuItems[
i];
640 pDst->cbSize = pSrc->cbSize;
641 pDst->fType = pSrc->fType;
642 pDst->fState = pSrc->fState;
643 pDst->wID = pSrc->wID;
644 pDst->dwItemData = pSrc->dwItemData;
647 StringCbCopyW(pDst->szString,
sizeof(pDst->szString), pSrc->szString);
737 ERR(
"OpenFileMappingW failed\n");
744 ERR(
"MapViewOfFile failed\n");
778 ERR(
"!dwProcessId\n");
786 ERR(
"ImmGetImeMenuItemsA cannot cross process boundary\n");
806 ERR(
"!dwThreadId\n");
822 if (!pImeDpi->ImeGetImeMenuItems)
824 WARN(
"ImeGetImeMenuItems is not available (optional).\n");
838 if (bImcIsAnsi != bTargetIsAnsi)
847 pNewParent = &ParentW;
868 pNewParent = &ParentA;
887 pNewItems = lpImeMenuItems;
888 pNewParent = lpImeParentMenu;
892 ret = pImeDpi->ImeGetImeMenuItems(hIMC,
dwFlags, dwType, pNewParent, pNewItems,
dwSize);
895 ERR(
"ImeGetImeMenuItems failed\n");
902 if (bImcIsAnsi != bTargetIsAnsi)
912 pItemA = lpImeMenuItems;
913 for (iItem = 0; iItem <
ret; ++iItem, ++pItemW, ++pItemA)
926 pItemW = lpImeMenuItems;
927 for (iItem = 0; iItem <
dwSize; ++iItem, ++pItemA, ++pItemW)
935 if (pNewItems != lpImeMenuItems)
954 TRACE(
"(%p, 0x%lX, 0x%lX, %p, %p, 0x%lX)\n",
971 TRACE(
"(%p, 0x%lX, 0x%lX, %p, %p, 0x%lX)\n",
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
static WCHAR available[MAX_STRING_RESOURCE_LEN]
#define INVALID_HANDLE_VALUE
#define CreateFileMappingW(a, b, c, d, e, f)
#define WideCharToMultiByte
#define MultiByteToWideChar
_ACRTIMP __msvcrt_long __cdecl labs(__msvcrt_long)
static const WCHAR Cleanup[]
HANDLE NTAPI OpenFileMappingW(IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN LPCWSTR lpName)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
RTL_CRITICAL_SECTION gcsImeDpi
PIMEDPI WINAPI ImmLockImeDpi(_In_ HKL hKL)
VOID WINAPI ImmUnlockImeDpi(_Inout_opt_ PIMEDPI pImeDpi)
LPINPUTCONTEXT WINAPI ImmLockIMC(_In_ HIMC hIMC)
BOOL WINAPI ImmUnlockIMC(_In_ HIMC hIMC)
DWORD_PTR NTAPI NtUserQueryInputContext(HIMC hIMC, DWORD dwType)
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM * pItems
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#define _Out_writes_bytes_opt_(s)
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
#define RtlCopyMemory(Destination, Source, Length)
#define ImmLocalFree(lpData)
BOOL Imm32IsImcAnsi(HIMC hIMC)
LPVOID ImmLocalAlloc(_In_ DWORD dwFlags, _In_ DWORD dwBytes)
#define FILE_MAP_ALL_ACCESS
DWORD WINAPI GetCurrentProcessId(void)
int WINAPI GetDIBits(_In_ HDC hdc, _In_ HBITMAP hbm, _In_ UINT start, _In_ UINT cLines, _Out_opt_ LPVOID lpvBits, _At_((LPBITMAPINFOHEADER) lpbmi, _Inout_) LPBITMAPINFO lpbmi, _In_ UINT usage)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
BOOL WINAPI DeleteDC(_In_ HDC)
HBITMAP WINAPI CreateDIBitmap(_In_ HDC hdc, _In_opt_ const BITMAPINFOHEADER *pbmih, _In_ DWORD fdwInit, _In_opt_ const VOID *pvInit, _In_opt_ const BITMAPINFO *pbmi, _In_ UINT uUsage)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
HWND WINAPI GetDesktopWindow(void)
HDC WINAPI GetDC(_In_opt_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)