https://git.reactos.org/?p=reactos.git;a=commitdiff;h=0fdfdcb1ea2b124eb05479...
commit 0fdfdcb1ea2b124eb054797308100868f9d4e23d Author: Mark Jansen mark.jansen@reactos.org AuthorDate: Sun Mar 10 23:09:23 2019 +0100 Commit: Mark Jansen mark.jansen@reactos.org CommitDate: Thu Mar 14 20:01:47 2019 +0100
[ACLAYERS] Simplify ForceDXSetupSuccess as suggested by Thomas --- dll/appcompat/shims/layer/forcedxsetupsuccess.c | 99 ++++--------------------- 1 file changed, 16 insertions(+), 83 deletions(-)
diff --git a/dll/appcompat/shims/layer/forcedxsetupsuccess.c b/dll/appcompat/shims/layer/forcedxsetupsuccess.c index f86339e078..7ffcedbe60 100644 --- a/dll/appcompat/shims/layer/forcedxsetupsuccess.c +++ b/dll/appcompat/shims/layer/forcedxsetupsuccess.c @@ -53,87 +53,6 @@ INT WINAPI DirectXSetupGetVersion(DWORD *lpdwVersion, DWORD *lpdwMinorVersion) return TRUE; }
- -static -BOOLEAN -IsCharInAnsiString( - IN CHAR Char, - IN const STRING* MatchString) -{ - USHORT i; - - for (i = 0; i < MatchString->Length; i++) - { - if (Char == MatchString->Buffer[i]) - return TRUE; - } - - return FALSE; -} - - -NTSTATUS -NTAPI -FindCharInAnsiString( - IN const STRING* SearchString, - IN const STRING* MatchString, - OUT PUSHORT Position) -{ - BOOLEAN Found; - ULONG i, Length; - - *Position = 0; - - /* Search */ - Length = SearchString->Length; - for (i = Length - 1; (LONG)i >= 0; i--) - { - Found = IsCharInAnsiString(SearchString->Buffer[i], MatchString); - if (Found) - { - *Position = i; - return STATUS_SUCCESS; - } - } - - return STATUS_NOT_FOUND; -} - - -static BOOL IsDxSetupA(const PSTRING LibraryPath) -{ - static const STRING DxSetupDlls[] = { - RTL_CONSTANT_STRING("dsetup.dll"), - RTL_CONSTANT_STRING("dsetup32.dll"), - RTL_CONSTANT_STRING("dsetup"), - RTL_CONSTANT_STRING("dsetup32"), - }; - static const STRING PathDividerFind = RTL_CONSTANT_STRING("\/"); - STRING LibraryName; - USHORT PathDivider; - DWORD n; - - if (!NT_SUCCESS(FindCharInAnsiString(LibraryPath, &PathDividerFind, &PathDivider))) - PathDivider = 0; - - if (PathDivider) - PathDivider += sizeof(CHAR); - - LibraryName.Buffer = LibraryPath->Buffer + PathDivider; - LibraryName.Length = LibraryPath->Length - PathDivider; - LibraryName.MaximumLength = LibraryPath->MaximumLength - PathDivider; - - for (n = 0; n < ARRAYSIZE(DxSetupDlls); ++n) - { - if (RtlEqualString(&LibraryName, DxSetupDlls + n, TRUE)) - { - SHIM_MSG("Found %Z\n", DxSetupDlls + n); - return TRUE; - } - } - return FALSE; -} - static BOOL IsDxSetupW(PCUNICODE_STRING LibraryPath) { static const UNICODE_STRING DxSetupDlls[] = { @@ -168,9 +87,23 @@ static BOOL IsDxSetupW(PCUNICODE_STRING LibraryPath) return FALSE; }
+static BOOL IsDxSetupA(PCANSI_STRING LibraryPath) +{ + BOOL bIsDxSetup; + UNICODE_STRING LibraryPathW; + + if (NT_SUCCESS(RtlAnsiStringToUnicodeString(&LibraryPathW, LibraryPath, TRUE))) + { + bIsDxSetup = IsDxSetupW(&LibraryPathW); + RtlFreeUnicodeString(&LibraryPathW); + return bIsDxSetup; + } + return FALSE; +} + HMODULE WINAPI SHIM_OBJ_NAME(APIHook_LoadLibraryA)(LPCSTR lpLibFileName) { - STRING Library; + ANSI_STRING Library;
RtlInitAnsiString(&Library, lpLibFileName); if (IsDxSetupA(&Library)) @@ -192,7 +125,7 @@ HMODULE WINAPI SHIM_OBJ_NAME(APIHook_LoadLibraryW)(LPCWSTR lpLibFileName)
HMODULE WINAPI SHIM_OBJ_NAME(APIHook_LoadLibraryExA)(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags) { - STRING Library; + ANSI_STRING Library;
RtlInitAnsiString(&Library, lpLibFileName); if (IsDxSetupA(&Library))