ReactOS 0.4.17-dev-966-gf06eace
forcedxsetupsuccess.c File Reference
#include <windef.h>
#include <winbase.h>
#include <shimlib.h>
#include "ntndk.h"
#include <setup_shim.inl>
#include <implement_shim.inl>
Include dependency graph for forcedxsetupsuccess.c:

Go to the source code of this file.

Macros

#define WIN32_NO_STATUS
 
#define SHIM_NS   ForceDXSetupSuccess
 
#define DSETUPERR_SUCCESS   0
 
#define SHIM_NUM_HOOKS   6
 
#define SHIM_SETUP_HOOKS
 

Typedefs

typedef HMODULE(WINAPI * LOADLIBRARYAPROC) (LPCSTR lpLibFileName)
 
typedef HMODULE(WINAPI * LOADLIBRARYWPROC) (LPCWSTR lpLibFileName)
 
typedef HMODULE(WINAPI * LOADLIBRARYEXAPROC) (LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
 
typedef HMODULE(WINAPI * LOADLIBRARYEXWPROC) (LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
 
typedef FARPROC(WINAPI * GETPROCADDRESSPROC) (HMODULE hModule, LPCSTR lpProcName)
 
typedef BOOL(WINAPI * FREELIBRARYPROC) (HINSTANCE hLibModule)
 

Functions

INT_PTR WINAPI DirectXSetup (HWND hWnd, LPSTR lpszRootPath, DWORD dwFlags)
 
INT_PTR WINAPI DirectXSetupA (HWND hWnd, LPSTR lpszRootPath, DWORD dwFlags)
 
INT_PTR WINAPI DirectXSetupW (HWND hWnd, LPWSTR lpszRootPath, DWORD dwFlags)
 
INT_PTR WINAPI DirectXSetupGetVersion (DWORD *lpdwVersion, DWORD *lpdwMinorVersion)
 
static BOOL IsDxSetupW (PCUNICODE_STRING LibraryPath)
 
static BOOL IsDxSetupA (PCANSI_STRING LibraryPath)
 
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryA (LPCSTR lpLibFileName)
 
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryW (LPCWSTR lpLibFileName)
 
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryExA (LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
 
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryExW (LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
 
FARPROC WINAPI SHIM_OBJ_NAME() APIHook_GetProcAddress (HMODULE hModule, LPCSTR lpProcName)
 
BOOL WINAPI SHIM_OBJ_NAME() APIHook_FreeLibrary (HINSTANCE hLibModule)
 

Macro Definition Documentation

◆ DSETUPERR_SUCCESS

#define DSETUPERR_SUCCESS   0

Definition at line 26 of file forcedxsetupsuccess.c.

◆ SHIM_NS

#define SHIM_NS   ForceDXSetupSuccess

Definition at line 22 of file forcedxsetupsuccess.c.

◆ SHIM_NUM_HOOKS

#define SHIM_NUM_HOOKS   6

Definition at line 192 of file forcedxsetupsuccess.c.

◆ SHIM_SETUP_HOOKS

#define SHIM_SETUP_HOOKS
Value:
SHIM_HOOK(0, "KERNEL32.DLL", "LoadLibraryA", SHIM_OBJ_NAME(APIHook_LoadLibraryA)) \
SHIM_HOOK(1, "KERNEL32.DLL", "LoadLibraryW", SHIM_OBJ_NAME(APIHook_LoadLibraryW)) \
SHIM_HOOK(2, "KERNEL32.DLL", "LoadLibraryExA", SHIM_OBJ_NAME(APIHook_LoadLibraryExA)) \
SHIM_HOOK(3, "KERNEL32.DLL", "LoadLibraryExW", SHIM_OBJ_NAME(APIHook_LoadLibraryExW)) \
SHIM_HOOK(4, "KERNEL32.DLL", "GetProcAddress", SHIM_OBJ_NAME(APIHook_GetProcAddress)) \
SHIM_HOOK(5, "KERNEL32.DLL", "FreeLibrary", SHIM_OBJ_NAME(APIHook_FreeLibrary))
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryW(LPCWSTR lpLibFileName)
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryA(LPCSTR lpLibFileName)
BOOL WINAPI SHIM_OBJ_NAME() APIHook_FreeLibrary(HINSTANCE hLibModule)
FARPROC WINAPI SHIM_OBJ_NAME() APIHook_GetProcAddress(HMODULE hModule, LPCSTR lpProcName)
HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)

Definition at line 193 of file forcedxsetupsuccess.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 8 of file forcedxsetupsuccess.c.

Typedef Documentation

◆ FREELIBRARYPROC

typedef BOOL(WINAPI * FREELIBRARYPROC) (HINSTANCE hLibModule)

Definition at line 19 of file forcedxsetupsuccess.c.

◆ GETPROCADDRESSPROC

typedef FARPROC(WINAPI * GETPROCADDRESSPROC) (HMODULE hModule, LPCSTR lpProcName)

Definition at line 18 of file forcedxsetupsuccess.c.

◆ LOADLIBRARYAPROC

typedef HMODULE(WINAPI * LOADLIBRARYAPROC) (LPCSTR lpLibFileName)

Definition at line 14 of file forcedxsetupsuccess.c.

◆ LOADLIBRARYEXAPROC

typedef HMODULE(WINAPI * LOADLIBRARYEXAPROC) (LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)

Definition at line 16 of file forcedxsetupsuccess.c.

◆ LOADLIBRARYEXWPROC

typedef HMODULE(WINAPI * LOADLIBRARYEXWPROC) (LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)

Definition at line 17 of file forcedxsetupsuccess.c.

◆ LOADLIBRARYWPROC

typedef HMODULE(WINAPI * LOADLIBRARYWPROC) (LPCWSTR lpLibFileName)

Definition at line 15 of file forcedxsetupsuccess.c.

Function Documentation

◆ APIHook_FreeLibrary()

BOOL WINAPI SHIM_OBJ_NAME() APIHook_FreeLibrary ( HINSTANCE  hLibModule)

Definition at line 180 of file forcedxsetupsuccess.c.

181{
183 {
184 SHIM_MSG("Intercepted\n");
185 return TRUE;
186 }
187
188 return CALL_SHIM(5, FREELIBRARYPROC)(hLibModule);
189}
#define TRUE
Definition: types.h:120
BOOL(WINAPI * FREELIBRARYPROC)(HINSTANCE hLibModule)
HINSTANCE hLibModule
Definition: sfc.c:23
HINSTANCE ShimLib_Instance(VOID)
Definition: shimlib.c:55
#define SHIM_MSG(fmt,...)
Definition: shimlib.h:75

◆ APIHook_GetProcAddress()

FARPROC WINAPI SHIM_OBJ_NAME() APIHook_GetProcAddress ( HMODULE  hModule,
LPCSTR  lpProcName 
)

Definition at line 148 of file forcedxsetupsuccess.c.

149{
150 static const STRING DxSetupFunctions[] = {
151 RTL_CONSTANT_STRING("DirectXSetup"),
152 RTL_CONSTANT_STRING("DirectXSetupA"),
153 RTL_CONSTANT_STRING("DirectXSetupW"),
154 RTL_CONSTANT_STRING("DirectXSetupGetVersion"),
155 };
156 static const FARPROC DxSetupRedirections[] = {
161 };
162 DWORD n;
163
164 if (hModule == ShimLib_Instance() && ((ULONG_PTR)lpProcName > MAXUSHORT))
165 {
166 STRING ProcName;
167 RtlInitAnsiString(&ProcName, lpProcName);
168 for (n = 0; n < ARRAYSIZE(DxSetupFunctions); ++n)
169 {
170 if (RtlEqualString(&ProcName, DxSetupFunctions + n, TRUE))
171 {
172 SHIM_MSG("Intercepted %Z\n", DxSetupFunctions + n);
173 return DxSetupRedirections[n];
174 }
175 }
176 }
177 return CALL_SHIM(4, GETPROCADDRESSPROC)(hModule, lpProcName);
178}
#define ARRAYSIZE(a)
Definition: cat.c:25
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
HMODULE hModule
Definition: animate.c:44
int(* FARPROC)()
Definition: compat.h:36
unsigned long DWORD
Definition: ntddk_ex.h:95
std::wstring STRING
Definition: fontsub.cpp:33
INT_PTR WINAPI DirectXSetupGetVersion(DWORD *lpdwVersion, DWORD *lpdwMinorVersion)
INT_PTR WINAPI DirectXSetupA(HWND hWnd, LPSTR lpszRootPath, DWORD dwFlags)
INT_PTR WINAPI DirectXSetupW(HWND hWnd, LPWSTR lpszRootPath, DWORD dwFlags)
FARPROC(WINAPI * GETPROCADDRESSPROC)(HMODULE hModule, LPCSTR lpProcName)
INT_PTR WINAPI DirectXSetup(HWND hWnd, LPSTR lpszRootPath, DWORD dwFlags)
GLdouble n
Definition: glext.h:7729
NTSYSAPI BOOLEAN NTAPI RtlEqualString(PSTRING String1, PSTRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define MAXUSHORT
Definition: typedefs.h:83
uint32_t ULONG_PTR
Definition: typedefs.h:65

◆ APIHook_LoadLibraryA()

HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryA ( LPCSTR  lpLibFileName)

Definition at line 104 of file forcedxsetupsuccess.c.

105{
107
108 RtlInitAnsiString(&Library, lpLibFileName);
109 if (IsDxSetupA(&Library))
110 return ShimLib_Instance();
111
112 return CALL_SHIM(0, LOADLIBRARYAPROC)(lpLibFileName);
113}
static BOOL IsDxSetupA(PCANSI_STRING LibraryPath)
HMODULE(WINAPI * LOADLIBRARYAPROC)(LPCSTR lpLibFileName)

◆ APIHook_LoadLibraryExA()

HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryExA ( LPCSTR  lpLibFileName,
HANDLE  hFile,
DWORD  dwFlags 
)

Definition at line 126 of file forcedxsetupsuccess.c.

127{
129
130 RtlInitAnsiString(&Library, lpLibFileName);
131 if (IsDxSetupA(&Library))
132 return ShimLib_Instance();
133
134 return CALL_SHIM(2, LOADLIBRARYEXAPROC)(lpLibFileName, hFile, dwFlags);
135}
HMODULE(WINAPI * LOADLIBRARYEXAPROC)(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
_In_ HANDLE hFile
Definition: mswsock.h:90
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141

◆ APIHook_LoadLibraryExW()

HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryExW ( LPCWSTR  lpLibFileName,
HANDLE  hFile,
DWORD  dwFlags 
)

Definition at line 137 of file forcedxsetupsuccess.c.

138{
140
141 RtlInitUnicodeString(&Library, lpLibFileName);
142 if (IsDxSetupW(&Library))
143 return ShimLib_Instance();
144
145 return CALL_SHIM(3, LOADLIBRARYEXWPROC)(lpLibFileName, hFile, dwFlags);
146}
HMODULE(WINAPI * LOADLIBRARYEXWPROC)(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
static BOOL IsDxSetupW(PCUNICODE_STRING LibraryPath)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)

◆ APIHook_LoadLibraryW()

HMODULE WINAPI SHIM_OBJ_NAME() APIHook_LoadLibraryW ( LPCWSTR  lpLibFileName)

Definition at line 115 of file forcedxsetupsuccess.c.

116{
118
119 RtlInitUnicodeString(&Library, lpLibFileName);
120 if (IsDxSetupW(&Library))
121 return ShimLib_Instance();
122
123 return CALL_SHIM(1, LOADLIBRARYWPROC)(lpLibFileName);
124}
HMODULE(WINAPI * LOADLIBRARYWPROC)(LPCWSTR lpLibFileName)

◆ DirectXSetup()

INT_PTR WINAPI DirectXSetup ( HWND  hWnd,
LPSTR  lpszRootPath,
DWORD  dwFlags 
)

Definition at line 28 of file forcedxsetupsuccess.c.

29{
30 SHIM_MSG("Returning DSETUPERR_SUCCESS\n");
31 return DSETUPERR_SUCCESS;
32}
#define DSETUPERR_SUCCESS

Referenced by APIHook_GetProcAddress().

◆ DirectXSetupA()

INT_PTR WINAPI DirectXSetupA ( HWND  hWnd,
LPSTR  lpszRootPath,
DWORD  dwFlags 
)

Definition at line 34 of file forcedxsetupsuccess.c.

35{
36 SHIM_MSG("Returning DSETUPERR_SUCCESS\n");
37 return DSETUPERR_SUCCESS;
38}

Referenced by APIHook_GetProcAddress().

◆ DirectXSetupGetVersion()

INT_PTR WINAPI DirectXSetupGetVersion ( DWORD *  lpdwVersion,
DWORD *  lpdwMinorVersion 
)

Definition at line 46 of file forcedxsetupsuccess.c.

47{
48 if (lpdwVersion)
49 *lpdwVersion = MAKELONG(7, 4); // DirectX 7.0
51 *lpdwMinorVersion = MAKELONG(1792, 0);
52
53 return TRUE;
54}
static DWORD * lpdwMinorVersion
Definition: forcedxsetup.c:19
#define MAKELONG(a, b)
Definition: typedefs.h:249

Referenced by APIHook_GetProcAddress(), START_TEST(), and test_GetProcAddress().

◆ DirectXSetupW()

INT_PTR WINAPI DirectXSetupW ( HWND  hWnd,
LPWSTR  lpszRootPath,
DWORD  dwFlags 
)

Definition at line 40 of file forcedxsetupsuccess.c.

41{
42 SHIM_MSG("Returning DSETUPERR_SUCCESS\n");
43 return DSETUPERR_SUCCESS;
44}

Referenced by APIHook_GetProcAddress().

◆ IsDxSetupA()

static BOOL IsDxSetupA ( PCANSI_STRING  LibraryPath)
static

Definition at line 90 of file forcedxsetupsuccess.c.

91{
92 BOOL bIsDxSetup;
93 UNICODE_STRING LibraryPathW;
94
95 if (NT_SUCCESS(RtlAnsiStringToUnicodeString(&LibraryPathW, LibraryPath, TRUE)))
96 {
97 bIsDxSetup = IsDxSetupW(&LibraryPathW);
98 RtlFreeUnicodeString(&LibraryPathW);
99 return bIsDxSetup;
100 }
101 return FALSE;
102}
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
unsigned int BOOL
Definition: ntddk_ex.h:94
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)

Referenced by APIHook_LoadLibraryA(), and APIHook_LoadLibraryExA().

◆ IsDxSetupW()

static BOOL IsDxSetupW ( PCUNICODE_STRING  LibraryPath)
static

Definition at line 56 of file forcedxsetupsuccess.c.

57{
58 static const UNICODE_STRING DxSetupDlls[] = {
59 RTL_CONSTANT_STRING(L"dsetup.dll"),
60 RTL_CONSTANT_STRING(L"dsetup32.dll"),
61 RTL_CONSTANT_STRING(L"dsetup"),
62 RTL_CONSTANT_STRING(L"dsetup32"),
63 };
64 static const UNICODE_STRING PathDividerFind = RTL_CONSTANT_STRING(L"\\/");
65 UNICODE_STRING LibraryName;
66 USHORT PathDivider;
67 DWORD n;
68
69 if (!NT_SUCCESS(RtlFindCharInUnicodeString(RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END, LibraryPath, &PathDividerFind, &PathDivider)))
70 PathDivider = 0;
71
72 if (PathDivider)
73 PathDivider += sizeof(WCHAR);
74
75 LibraryName.Buffer = LibraryPath->Buffer + PathDivider / sizeof(WCHAR);
76 LibraryName.Length = LibraryPath->Length - PathDivider;
77 LibraryName.MaximumLength = LibraryPath->MaximumLength - PathDivider;
78
79 for (n = 0; n < ARRAYSIZE(DxSetupDlls); ++n)
80 {
81 if (RtlEqualUnicodeString(&LibraryName, DxSetupDlls + n, TRUE))
82 {
83 SHIM_MSG("Found %wZ\n", DxSetupDlls + n);
84 return TRUE;
85 }
86 }
87 return FALSE;
88}
#define L(x)
Definition: resources.c:13
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define RTL_FIND_CHAR_IN_UNICODE_STRING_START_AT_END
Definition: rtl.h:25
NTSTATUS NTAPI RtlFindCharInUnicodeString(_In_ ULONG Flags, _In_ PCUNICODE_STRING SearchString, _In_ PCUNICODE_STRING MatchString, _Out_ PUSHORT Position)
short WCHAR
Definition: pedump.c:58
unsigned short USHORT
Definition: pedump.c:61
USHORT MaximumLength
Definition: env_spec_w32.h:370

Referenced by APIHook_LoadLibraryExW(), APIHook_LoadLibraryW(), and IsDxSetupA().