From: Mark Jansen Date: Sat, 28 May 2016 16:47:39 +0000 (+0000) Subject: [APPHELP] Register AppPatch directory with cmake, import SdbGetAppPatchDir implementa... X-Git-Tag: ReactOS-0.4.2~518 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=605449d0fe6a16a7ae058b6d4453f629da66ecd4 [APPHELP] Register AppPatch directory with cmake, import SdbGetAppPatchDir implementation from Mislav Blažević CORE-10369 svn path=/trunk/; revision=71440 --- diff --git a/reactos/boot/bootdata/packages/reactos.dff.in b/reactos/boot/bootdata/packages/reactos.dff.in index 791aee19c6c..c9ad5a66ba3 100644 --- a/reactos/boot/bootdata/packages/reactos.dff.in +++ b/reactos/boot/bootdata/packages/reactos.dff.in @@ -69,6 +69,7 @@ Signature = "$ReactOS$" 50 = security\templates 51 = system32\CatRoot 52 = system32\CatRoot2 +53 = AppPatch .InfEnd diff --git a/reactos/dll/appcompat/apphelp/apphelp.h b/reactos/dll/appcompat/apphelp/apphelp.h index 4d7531d9e93..56e1cb92f4b 100644 --- a/reactos/dll/appcompat/apphelp/apphelp.h +++ b/reactos/dll/appcompat/apphelp/apphelp.h @@ -50,6 +50,11 @@ typedef struct _DB { #define SDB_DATABASE_MAIN_SHIM 0x80030000 #define SDB_DATABASE_MAIN_DRIVERS 0x80040000 +typedef struct _SDB { + PDB db; + BOOL auto_loaded; +} SDB, *HSDB; + typedef struct tagATTRINFO { TAG type; DWORD flags; diff --git a/reactos/dll/appcompat/apphelp/apphelp.spec b/reactos/dll/appcompat/apphelp/apphelp.spec index 27bb181f74e..011c1cbb1a0 100644 --- a/reactos/dll/appcompat/apphelp/apphelp.spec +++ b/reactos/dll/appcompat/apphelp/apphelp.spec @@ -52,7 +52,7 @@ @ stub SdbFreeFileInfo @ stub SdbFreeFlagInfo @ stub SdbGetAppCompatDataSize -@ stub SdbGetAppPatchDir +@ stdcall SdbGetAppPatchDir(ptr wstr long) @ stdcall SdbGetBinaryTagData(ptr long) @ stdcall SdbGetDatabaseID(ptr ptr) @ stub SdbGetDatabaseInformation diff --git a/reactos/dll/appcompat/apphelp/sdbapi.c b/reactos/dll/appcompat/apphelp/sdbapi.c index 143933ac15c..4dc1cf6ced8 100644 --- a/reactos/dll/appcompat/apphelp/sdbapi.c +++ b/reactos/dll/appcompat/apphelp/sdbapi.c @@ -433,6 +433,53 @@ void WINAPI SdbCloseDatabase(PDB db) SdbFree(db); } +/** + * Retrieves AppPatch directory. + * + * @param [in] db Handle to the shim database. + * @param [out] path Pointer to memory in which path shall be written. + * @param [in] size Size of the buffer in characters. + */ +BOOL WINAPI SdbGetAppPatchDir(HSDB db, LPWSTR path, DWORD size) +{ + static WCHAR* default_dir = NULL; + + if(!default_dir) + { + WCHAR* tmp = NULL; + UINT len = GetSystemWindowsDirectoryW(NULL, 0) + lstrlenW((CONST WCHAR[]){'\\','A','p','p','P','a','t','c','h',0}); + tmp = SdbAlloc((len + 1)* sizeof(WCHAR)); + if(tmp) + { + UINT r = GetSystemWindowsDirectoryW(tmp, len+1); + if (r && r < len) + { + if (SUCCEEDED(StringCchCatW(tmp, len+1, (CONST WCHAR[]){'\\','A','p','p','P','a','t','c','h',0}))) + { + if(InterlockedCompareExchangePointer((void**)&default_dir, tmp, NULL) == NULL) + tmp = NULL; + } + } + if (tmp) + SdbFree(tmp); + } + } + + /* In case function fails, path holds empty string */ + if (size > 0) + *path = 0; + + if (!db) + { + return SUCCEEDED(StringCchCopyW(path, size, default_dir)); + } + else + { + /* fixme */ + return FALSE; + } +} + /** * Parses a string to retrieve a GUID. * diff --git a/reactos/sdk/cmake/CMakeMacros.cmake b/reactos/sdk/cmake/CMakeMacros.cmake index e64c5a9b494..86b931a8e67 100644 --- a/reactos/sdk/cmake/CMakeMacros.cmake +++ b/reactos/sdk/cmake/CMakeMacros.cmake @@ -261,6 +261,8 @@ macro(dir_to_num dir var) set(${var} 51) elseif(${dir} STREQUAL reactos/system32/CatRoot2) set(${var} 52) + elseif(${dir} STREQUAL reactos/AppPatch) + set(${var} 53) else() message(FATAL_ERROR "Wrong destination: ${dir}") endif()