[MSCTF][SDK][CTFMON][MSCTFIME][MSUTB] Add msctf.dll stubs (#8026)

Some baby steps to msctf.dll for CTF.
JIRA issue: CORE-19361
- Add all the export functions of msctf.dll.
- Modify msctf.spec.
- Modify sdk/include/psdk/msctf.idl
  and sdk/include/psdk/inputscope.idl.
- Add sdk/include/reactos/msctf_undoc.h.
- Include <msctf_undoc.h> in ctfmon,
  msctfime, and msutb.
This commit is contained in:
Katayama Hirofumi MZ 2025-05-26 07:22:41 +09:00 committed by GitHub
parent 99e2606982
commit 5af1d7c6b1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 323 additions and 43 deletions

View file

@ -15,6 +15,7 @@
#include <tchar.h>
#include <strsafe.h>
#include <msctf.h>
#include <msctf_undoc.h>
#include <ctfutb.h>
#include <ctffunc.h>
#include <cicbase.h>

View file

@ -20,6 +20,7 @@
#include <cguid.h>
#include <tchar.h>
#include <msctf.h>
#include <msctf_undoc.h>
#include <ctffunc.h>
#include <shlwapi.h>
#include <strsafe.h>

View file

@ -15,6 +15,7 @@
#include <shlwapi.h>
#include <shlwapi_undoc.h>
#include <msctf.h>
#include <msctf_undoc.h>
#include <strsafe.h>
#include <assert.h>

View file

@ -7,6 +7,8 @@
#pragma once
#define CTF_COMPAT_DELAY_FIRST_ACTIVATE 2
struct MLNGINFO
{
HKL m_hKL;

View file

@ -1,38 +1,39 @@
@ stdcall TF_GetLangIcon(long ptr long)
@ stdcall TF_GetMlngHKL(long ptr ptr long)
@ stdcall TF_GetMlngIconIndex(long)
@ stdcall TF_GetThreadFlags(long ptr ptr ptr)
@ stdcall TF_InatExtractIcon(long)
@ stdcall TF_InitMlngInfo()
@ stdcall TF_IsInMarshaling(long)
@ stdcall TF_MlngInfoCount()
@ stdcall TF_RunInputCPL()
@ stdcall -private DllCanUnloadNow()
@ stdcall -private DllGetClassObject(ptr ptr ptr)
@ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()
@ stdcall SetInputScope(long long)
@ stub SetInputScopeXML
@ stdcall SetInputScopeXML(ptr ptr)
@ stdcall SetInputScopes(long ptr long ptr long wstr wstr)
@ stub TF_CUASAppFix
@ stdcall -stub TF_CheckThreadInputIdle(long long)
@ stub TF_ClearLangBarAddIns
@ stdcall -stub TF_CreateCategoryMgr(ptr)
@ stdcall -stub TF_CreateCicLoadMutex(ptr)
@ stdcall -stub TF_CreateDisplayAttributeMgr(ptr)
@ stdcall TF_CUASAppFix(str)
@ stdcall TF_CheckThreadInputIdle(long long)
@ stdcall TF_ClearLangBarAddIns(ptr)
@ stdcall TF_CreateCategoryMgr(ptr)
@ stdcall TF_CreateCicLoadMutex(ptr)
@ stdcall TF_CreateDisplayAttributeMgr(ptr)
@ stdcall TF_CreateInputProcessorProfiles(ptr)
@ stdcall TF_CreateLangBarItemMgr(ptr)
@ stdcall TF_CreateLangBarMgr(ptr)
@ stdcall TF_CreateThreadMgr(ptr)
@ stdcall -stub TF_DllDetachInOther()
@ stdcall -stub TF_GetGlobalCompartment(ptr)
@ stub TF_GetInputScope
@ stdcall -stub TF_GetLangIcon(long ptr long)
@ stdcall TF_GetMlngHKL(long ptr ptr long)
@ stdcall TF_GetMlngIconIndex(long)
@ stdcall -stub TF_GetThreadFlags(long ptr ptr ptr)
@ stdcall TF_DllDetachInOther()
@ stdcall TF_GetGlobalCompartment(ptr)
@ stdcall TF_GetInputScope(ptr ptr)
@ stdcall TF_GetThreadMgr(ptr)
@ stdcall TF_InatExtractIcon(long)
@ stdcall TF_InitMlngInfo()
@ stdcall -stub TF_InitSystem()
@ stdcall -stub TF_UninitSystem()
@ stdcall -stub TF_InvalidAssemblyListCache()
@ stdcall TF_InitSystem()
@ stdcall TF_InvalidAssemblyListCache()
@ stdcall TF_InvalidAssemblyListCacheIfExist()
@ stdcall TF_IsCtfmonRunning()
@ stdcall -stub TF_IsInMarshaling(long)
@ stdcall TF_MlngInfoCount()
@ stdcall TF_RunInputCPL()
@ stdcall -stub TF_PostAllThreadMsg(long long)
@ stdcall TF_IsFullScreenWindowAcitvated() ; Yes, Microsoft really misspelled this one!
@ stdcall TF_PostAllThreadMsg(ptr long)
@ stdcall TF_RegisterLangBarAddIn(ptr wstr long)
@ stdcall TF_UninitSystem()
@ stdcall TF_UnregisterLangBarAddIn(ptr long)

View file

@ -2,7 +2,7 @@
* PROJECT: ReactOS msctf.dll
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Text Framework Services
* COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
* COPYRIGHT: Copyright 2023-2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#include <stdlib.h>
@ -19,6 +19,7 @@
#include <cguid.h>
#include <tchar.h>
#include <msctf.h>
#include <msctf_undoc.h>
#include <ctffunc.h>
#include <shlwapi.h>
#include <strsafe.h>
@ -49,6 +50,7 @@ BOOL gfSharedMemory = FALSE;
LONG g_cRefDll = -1;
BOOL g_fCUAS = FALSE;
TCHAR g_szCUASImeFile[16] = { 0 };
DWORD g_dwAppCompatibility = 0;
BOOL g_fNoITextStoreAnchor = TRUE;
// Messages
@ -236,6 +238,238 @@ RunCPLSetting(LPCTSTR pszCmdLine)
return FullPathExec(TEXT("rundll32.exe"), pszCmdLine, SW_SHOWMINNOACTIVE, FALSE);
}
/***********************************************************************
* TF_GetThreadFlags (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C BOOL WINAPI
TF_GetThreadFlags(
_In_ DWORD dwThreadId,
_Out_ LPDWORD pdwFlags1,
_Out_ LPDWORD pdwFlags2,
_Out_ LPDWORD pdwFlags3)
{
FIXME("(%lu, %p, %p, %p)\n", dwThreadId, pdwFlags1, pdwFlags2, pdwFlags3);
*pdwFlags1 = *pdwFlags2 = *pdwFlags3 = 0;
return FALSE;
}
/***********************************************************************
* TF_CreateCategoryMgr (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat)
{
FIXME("(%p)\n", ppcat);
if (ppcat)
*ppcat = NULL;
return E_NOTIMPL;
}
/***********************************************************************
* TF_CreateCicLoadMutex (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HANDLE WINAPI
TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon)
{
FIXME("(%p)\n", pfWinLogon);
if (pfWinLogon == NULL)
return NULL;
*pfWinLogon = FALSE;
return NULL;
}
/***********************************************************************
* TF_CreateDisplayAttributeMgr (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam)
{
FIXME("(%p)\n", ppdam);
*ppdam = NULL;
return E_NOTIMPL;
}
/***********************************************************************
* TF_DllDetachInOther (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C BOOL WINAPI
TF_DllDetachInOther(VOID)
{
FIXME("()\n");
return TRUE;
}
/***********************************************************************
* TF_GetGlobalCompartment (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr)
{
FIXME("(%p)\n", ppCompMgr);
*ppCompMgr = NULL;
return E_NOTIMPL;
}
/***********************************************************************
* TF_GetLangIcon (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HICON WINAPI
TF_GetLangIcon(_In_ LANGID LangID, _Out_ PWSTR pszText, _In_ INT cchText)
{
FIXME("(0x%X, %p, %d)\n", LangID, pszText, cchText);
return NULL;
}
/***********************************************************************
* TF_IsFullScreenWindowAcitvated (MSCTF.@)
*
* Yes, this function name is misspelled by MS.
* @unimplemented
*/
EXTERN_C BOOL WINAPI
TF_IsFullScreenWindowAcitvated(VOID)
{
FIXME("()\n");
return FALSE;
}
/***********************************************************************
* TF_GetInputScope (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_GetInputScope(_In_opt_ HWND hWnd, _Out_ ITfInputScope **ppInputScope)
{
FIXME("(%p, %p)\n", hWnd, ppInputScope);
*ppInputScope = NULL;
return E_NOTIMPL;
}
/***********************************************************************
* SetInputScopeXML (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
SetInputScopeXML(_In_opt_ HWND hwnd, _In_opt_ PCWSTR pszXML)
{
FIXME("(%p, %p)\n", hwnd, pszXML);
return E_NOTIMPL;
}
/***********************************************************************
* TF_CUASAppFix (MSCTF.@)
*
* @implemented
*/
EXTERN_C HRESULT WINAPI
TF_CUASAppFix(_In_ LPCSTR pszName)
{
if (!pszName || lstrcmpiA(pszName, "DelayFirstActivateKeyboardLayout") != 0)
return E_INVALIDARG;
g_dwAppCompatibility |= CTF_COMPAT_DELAY_FIRST_ACTIVATE;
return S_OK;
}
/***********************************************************************
* TF_CheckThreadInputIdle (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C LONG WINAPI
TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds)
{
FIXME("(%lu, %lu)\n", dwThreadId, dwMilliseconds);
return -1;
}
/***********************************************************************
* TF_ClearLangBarAddIns (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_ClearLangBarAddIns(_In_ REFGUID guid)
{
FIXME("(%p)\n", guid);
return E_NOTIMPL;
}
/***********************************************************************
* TF_InvalidAssemblyListCache (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_InvalidAssemblyListCache(VOID)
{
FIXME("()\n");
return E_NOTIMPL;
}
/***********************************************************************
* TF_IsInMarshaling (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C BOOL WINAPI
TF_IsInMarshaling(_In_ DWORD dwThreadId)
{
FIXME("(%lu)\n", dwThreadId);
return FALSE;
}
/***********************************************************************
* TF_PostAllThreadMsg (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C HRESULT WINAPI
TF_PostAllThreadMsg(_In_opt_ WPARAM wParam, _In_ DWORD dwFlags)
{
FIXME("(%p, 0x%X)\n", wParam, dwFlags);
return E_NOTIMPL;
}
/***********************************************************************
* TF_InitSystem (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C BOOL WINAPI
TF_InitSystem(VOID)
{
FIXME("()\n");
return FALSE;
}
/***********************************************************************
* TF_UninitSystem (MSCTF.@)
*
* @unimplemented
*/
EXTERN_C BOOL WINAPI
TF_UninitSystem(VOID)
{
FIXME("()\n");
return FALSE;
}
/***********************************************************************
* TF_RegisterLangBarAddIn (MSCTF.@)
*

View file

@ -18,6 +18,7 @@
#include <undocuser.h>
#include <cguid.h>
#include <msctf.h>
#include <msctf_undoc.h>
#include <ctffunc.h>
#include <ctfutb.h>
#include <shlwapi.h>

View file

@ -74,7 +74,7 @@ typedef enum {
cpp_quote("HRESULT WINAPI SetInputScope(HWND hwnd,InputScope inputscope);")
cpp_quote("HRESULT WINAPI SetInputScopes(HWND hwnd,const InputScope *pInputScopes,UINT cInputScopes,WCHAR **ppszPhraseList,UINT cPhrases,WCHAR *pszRegExp,WCHAR *pszSRGS);")
cpp_quote("HRESULT WINAPI SetInputScopeXML(HWND hwnd,WCHAR *pszXML);")
cpp_quote("HRESULT WINAPI SetInputScopeXML(_In_opt_ HWND hwnd, _In_opt_ PCWSTR pszXML);")
cpp_quote("DEFINE_GUID(GUID_PROP_INPUTSCOPE,0x1713dd5a,0x68e7,0x4a5b,0x9a,0xf6,0x59,0x2a,0x59,0x5c,0x77,0x8d);")

View file

@ -46,31 +46,13 @@ cpp_quote("#define TF_E_STACKFULL MAKE_HRESULT(SEVERITY_ERROR, FACILI
cpp_quote("#define TF_E_SYNCHRONOUS MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x0208)")
cpp_quote("#define TF_S_ASYNC MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_ITF, 0x0300)")
cpp_quote("EXTERN_C HRESULT WINAPI TF_InitSystem(VOID);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_UninitSystem(VOID);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_PostAllThreadMsg(DWORD dwUnknown1, DWORD dwUnknown2);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateThreadMgr(_Out_ ITfThreadMgr **pptim);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_GetThreadMgr(_Out_ ITfThreadMgr **pptim);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateInputProcessorProfiles(_Out_ ITfInputProcessorProfiles **ppipr);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateLangBarMgr(_Out_ ITfLangBarMgr **pppbm);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateLangBarItemMgr(_Out_ ITfLangBarItemMgr **pplbim);")
cpp_quote("EXTERN_C HANDLE WINAPI TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_InvalidAssemblyListCache(VOID);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(VOID);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_DllDetachInOther(VOID);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateCategoryMgr(_Out_ ITfCategoryMgr **ppcat);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_CreateDisplayAttributeMgr(_Out_ ITfDisplayAttributeMgr **ppdam);")
cpp_quote("EXTERN_C HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_ LPWSTR pszText, _In_ INT cchText);")
cpp_quote("EXTERN_C VOID WINAPI TF_InitMlngInfo(VOID);")
cpp_quote("EXTERN_C INT WINAPI TF_MlngInfoCount(VOID);")
cpp_quote("EXTERN_C BOOL WINAPI TF_GetMlngHKL(_In_ INT iKL, _Out_opt_ HKL *phKL, _Out_opt_ LPWSTR pszText, _In_ INT cchText);")
cpp_quote("EXTERN_C INT WINAPI TF_GetMlngIconIndex(_In_ INT iKL);")
cpp_quote("EXTERN_C HICON WINAPI TF_InatExtractIcon(_In_ INT iKL);")
cpp_quote("EXTERN_C HRESULT WINAPI TF_RunInputCPL(VOID);")
cpp_quote("EXTERN_C BOOL WINAPI TF_GetThreadFlags(_In_ DWORD dwThreadId, _Out_ LPDWORD pdwFlags1, _Out_ LPDWORD pdwFlags2, _Out_ LPDWORD pdwFlags3);")
cpp_quote("EXTERN_C LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds);")
cpp_quote("EXTERN_C BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId);")
cpp_quote("EXTERN_C const GUID GUID_PROP_TEXTOWNER;")
cpp_quote("EXTERN_C const GUID GUID_PROP_ATTRIBUTE;")

View file

@ -0,0 +1,57 @@
/*
* PROJECT: ReactOS Kernel
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Private header for msctf.dll
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#pragma once
#include <msctf.h>
#include <inputscope.h>
#ifdef __cplusplus
extern "C" {
#endif
BOOL WINAPI TF_InitSystem(VOID);
BOOL WINAPI TF_UninitSystem(VOID);
HRESULT WINAPI TF_GetGlobalCompartment(_Out_ ITfCompartmentMgr **ppCompMgr);
HRESULT WINAPI TF_PostAllThreadMsg(_In_opt_ WPARAM wParam, _In_ DWORD dwFlags);
HANDLE WINAPI TF_CreateCicLoadMutex(_Out_ LPBOOL pfWinLogon);
HRESULT WINAPI TF_InvalidAssemblyListCache(VOID);
HRESULT WINAPI TF_InvalidAssemblyListCacheIfExist(VOID);
HICON WINAPI TF_GetLangIcon(_In_ LANGID LangID, _Out_writes_(cchText) PWSTR pszText, _In_ INT cchText);
VOID WINAPI TF_InitMlngInfo(VOID);
INT WINAPI TF_MlngInfoCount(VOID);
INT WINAPI TF_GetMlngIconIndex(_In_ INT iKL);
HICON WINAPI TF_InatExtractIcon(_In_ INT iKL);
HRESULT WINAPI TF_RunInputCPL(VOID);
LONG WINAPI TF_CheckThreadInputIdle(_In_ DWORD dwThreadId, _In_ DWORD dwMilliseconds);
BOOL WINAPI TF_IsInMarshaling(_In_ DWORD dwThreadId);
// This is intentionally misspelled to match the original name:
BOOL WINAPI TF_IsFullScreenWindowAcitvated(VOID);
HRESULT WINAPI TF_CUASAppFix(_In_ LPCSTR pszName);
HRESULT WINAPI TF_ClearLangBarAddIns(_In_ REFGUID rguid);
HRESULT WINAPI TF_GetInputScope(_In_opt_ HWND hWnd, _Out_ ITfInputScope **ppInputScope);
BOOL WINAPI TF_DllDetachInOther(VOID);
BOOL WINAPI
TF_GetMlngHKL(
_In_ INT iKL,
_Out_opt_ HKL *phKL,
_Out_writes_opt_(cchText) LPWSTR pszText,
_In_ INT cchText);
BOOL WINAPI
TF_GetThreadFlags(
_In_ DWORD dwThreadId,
_Out_ LPDWORD pdwFlags1,
_Out_ LPDWORD pdwFlags2,
_Out_ LPDWORD pdwFlags3);
#ifdef __cplusplus
} // extern "C"
#endif