Reactos

[IMM32][KERNEL32][SDK] Half-implement BaseCheckAppcompatCache (#6069)

- And add it to <compat_undoc.h>.
- Use <compat_undoc.h> in IMM32.
- Modify kernel32.spec.
CORE-19268

authored by

Katayama Hirofumi MZ and committed by
GitHub
6e449d47 d8ba5920

+120 -16
+1 -7
dll/win32/imm32/ctf.c
··· 8 8 #include "precomp.h" 9 9 #include <msctf.h> /* for ITfLangBarMgr */ 10 10 #include <objidl.h> /* for IInitializeSpy */ 11 + #include <compat_undoc.h> /* for BaseCheckAppcompatCache */ 11 12 12 13 WINE_DEFAULT_DEBUG_CHANNEL(imm); 13 14 ··· 227 228 228 229 /* The type of ApphelpCheckIME function in apphelp.dll */ 229 230 typedef BOOL (WINAPI *FN_ApphelpCheckIME)(_In_z_ LPCWSTR AppName); 230 - 231 - /* FIXME: This is kernel32 function. We have to declare this in some header. */ 232 - BOOL WINAPI 233 - BaseCheckAppcompatCache(_In_z_ LPCWSTR ApplicationName, 234 - _In_ HANDLE FileHandle, 235 - _In_opt_z_ LPCWSTR Environment, 236 - _Out_ PULONG pdwReason); 237 231 238 232 /*********************************************************************** 239 233 * This function checks whether the app's IME is disabled by application
+110 -8
dll/win32/kernel32/client/appcache.c
··· 139 139 * @unimplemented 140 140 */ 141 141 BOOL 142 - WINAPI 143 - BaseCheckAppcompatCache(IN PWCHAR ApplicationName, 144 - IN HANDLE FileHandle, 145 - IN PWCHAR Environment, 146 - OUT PULONG Reason) 142 + BasepShimCacheCheckBypass( 143 + _In_ PCWSTR ApplicationName, 144 + _In_ HANDLE FileHandle, 145 + _In_opt_ PCWSTR Environment, 146 + _In_ BOOL bUnknown, 147 + _Out_opt_ PULONG pdwReason) 147 148 { 148 - DPRINT("BaseCheckAppcompatCache is UNIMPLEMENTED\n"); 149 + DPRINT("fixme:(%S, %p, %S, %d, %p)\n", ApplicationName, FileHandle, Environment, bUnknown, 150 + pdwReason); 151 + return FALSE; 152 + } 153 + 154 + /* 155 + * @implemented 156 + */ 157 + BOOL 158 + BasepShimCacheSearch( 159 + _In_ PCWSTR ApplicationName, 160 + _In_ HANDLE FileHandle) 161 + { 162 + APPHELP_CACHE_SERVICE_LOOKUP Lookup; 163 + RtlInitUnicodeString(&Lookup.ImageName, ApplicationName); 164 + Lookup.ImageHandle = FileHandle; 165 + return NT_SUCCESS(NtApphelpCacheControl(ApphelpCacheServiceLookup, &Lookup)); 166 + } 149 167 150 - if (Reason) *Reason = 0; 168 + /* 169 + * @unimplemented 170 + */ 171 + BOOL 172 + BasepCheckCacheExcludeList( 173 + _In_ PCWSTR ApplicationName) 174 + { 175 + return FALSE; 176 + } 151 177 152 - // We don't know this app. 178 + /* 179 + * @unimplemented 180 + */ 181 + BOOL 182 + BasepCheckCacheExcludeCustom( 183 + _In_ PCWSTR ApplicationName) 184 + { 153 185 return FALSE; 186 + } 187 + 188 + /* 189 + * @implemented 190 + */ 191 + VOID 192 + BasepShimCacheRemoveEntry( 193 + _In_ PCWSTR ApplicationName) 194 + { 195 + APPHELP_CACHE_SERVICE_LOOKUP Lookup; 196 + RtlInitUnicodeString(&Lookup.ImageName, ApplicationName); 197 + Lookup.ImageHandle = INVALID_HANDLE_VALUE; 198 + NtApphelpCacheControl(ApphelpCacheServiceRemove, &Lookup); 199 + } 200 + 201 + /* 202 + * @unimplemented 203 + */ 204 + BOOL 205 + BasepShimCacheLookup( 206 + _In_ PCWSTR ApplicationName, 207 + _In_ HANDLE FileHandle) 208 + { 209 + DPRINT("fixme:(%S, %p)\n", ApplicationName, FileHandle); 210 + 211 + if (!BasepShimCacheSearch(ApplicationName, FileHandle)) 212 + return FALSE; 213 + 214 + if (!BasepCheckCacheExcludeList(ApplicationName) || 215 + !BasepCheckCacheExcludeCustom(ApplicationName)) 216 + { 217 + BasepShimCacheRemoveEntry(ApplicationName); 218 + return FALSE; 219 + } 220 + 221 + return TRUE; 222 + } 223 + 224 + /* 225 + * @implemented 226 + */ 227 + BOOL 228 + WINAPI 229 + BaseCheckAppcompatCache( 230 + _In_ PCWSTR ApplicationName, 231 + _In_ HANDLE FileHandle, 232 + _In_opt_ PCWSTR Environment, 233 + _Out_opt_ PULONG pdwReason) 234 + { 235 + BOOL ret = FALSE; 236 + ULONG dwReason; 237 + 238 + DPRINT("(%S, %p, %S, %p)\n", ApplicationName, FileHandle, Environment, pdwReason); 239 + 240 + dwReason = 0; 241 + if (BasepShimCacheCheckBypass(ApplicationName, FileHandle, Environment, TRUE, &dwReason)) 242 + { 243 + dwReason |= 2; 244 + } 245 + else 246 + { 247 + ret = BasepShimCacheLookup(ApplicationName, FileHandle); 248 + if (!ret) 249 + dwReason |= 1; 250 + } 251 + 252 + if (pdwReason) 253 + *pdwReason = dwReason; 254 + 255 + return ret; 154 256 } 155 257 156 258 static
+1 -1
dll/win32/kernel32/kernel32.spec
··· 24 24 @ stdcall BackupRead(ptr ptr long ptr long long ptr) 25 25 @ stdcall BackupSeek(ptr long long ptr ptr ptr) 26 26 @ stdcall BackupWrite(ptr ptr long ptr long long ptr) 27 - @ stdcall BaseCheckAppcompatCache(long long long ptr) 27 + @ stdcall BaseCheckAppcompatCache(wstr ptr wstr ptr) 28 28 @ stdcall BaseCheckRunApp(long ptr long long long long long long long long) 29 29 @ stdcall BaseCleanupAppcompatCacheSupport(ptr) 30 30 @ stdcall BaseDumpAppcompatCache()
+8
sdk/include/reactos/compat_undoc.h
··· 46 46 return (peb->OSMajorVersion << 8) | (peb->OSMinorVersion); 47 47 } 48 48 49 + BOOL 50 + WINAPI 51 + BaseCheckAppcompatCache( 52 + _In_ PCWSTR ApplicationName, 53 + _In_ HANDLE FileHandle, 54 + _In_opt_ PCWSTR Environment, 55 + _Out_opt_ PULONG pdwReason); 56 + 49 57 #endif // COMPAT_UNDOC_H