@@ -20,6 +20,7 @@ namespace
2020 DWORD ms_BehaviorFlags = 0 ;
2121 D3DPRESENT_PARAMETERS* ms_pPresentationParameters = NULL ;
2222 IDirect3DDevice9** ms_ppReturnedDeviceInterface = NULL ;
23+ bool ms_hasDeviceArgs = false ;
2324} // namespace
2425
2526DWORD RESTORE_Addr_PreCreateDevice;
@@ -45,7 +46,7 @@ void _cdecl OnPreCreateDevice(IDirect3D9* pDirect3D, UINT Adapter, D3DDEVTYPE De
4546 }
4647
4748 // Validate critical parameters before dereferencing
48- if (BehaviorFlags && pPresentationParameters)
49+ if (BehaviorFlags && pPresentationParameters && ppReturnedDeviceInterface )
4950 {
5051 ms_pDirect3D = pDirect3D;
5152 ms_Adapter = Adapter;
@@ -54,6 +55,12 @@ void _cdecl OnPreCreateDevice(IDirect3D9* pDirect3D, UINT Adapter, D3DDEVTYPE De
5455 ms_BehaviorFlags = *BehaviorFlags;
5556 ms_pPresentationParameters = pPresentationParameters;
5657 ms_ppReturnedDeviceInterface = ppReturnedDeviceInterface;
58+ ms_hasDeviceArgs = true ;
59+ }
60+ else
61+ {
62+ ms_hasDeviceArgs = false ;
63+ AddReportLog (8740 , SString (" OnPreCreateDevice: missing device arguments for alt startup path" ));
5764 }
5865}
5966
@@ -114,12 +121,36 @@ static void __declspec(naked) HOOK_PreCreateDevice()
114121// //////////////////////////////////////////////////////////////
115122HRESULT _cdecl OnPostCreateDevice (HRESULT hResult)
116123{
117- if (g_pCore)
124+ if (!g_pCore)
125+ {
126+ ms_hasDeviceArgs = false ;
127+ return hResult;
128+ }
129+
130+ if (!ms_hasDeviceArgs)
131+ {
132+ AddReportLog (8741 , SString (" OnPostCreateDevice: device arguments were not captured; skipping alt startup logic" ));
133+ return hResult;
134+ }
135+
136+ if (!SharedUtil::IsReadablePointer (ms_ppReturnedDeviceInterface, sizeof (*ms_ppReturnedDeviceInterface)))
137+ {
138+ AddReportLog (8742 , SString (" OnPostCreateDevice: invalid device pointer reference %p" , ms_ppReturnedDeviceInterface));
139+ ms_hasDeviceArgs = false ;
140+ return hResult;
141+ }
142+
143+ if (!SharedUtil::IsReadablePointer (ms_pPresentationParameters, sizeof (*ms_pPresentationParameters)))
118144 {
119- return g_pCore->OnPostCreateDevice (hResult, ms_pDirect3D, ms_Adapter, ms_DeviceType, ms_hFocusWindow, ms_BehaviorFlags, ms_pPresentationParameters,
120- ms_ppReturnedDeviceInterface);
145+ AddReportLog (8743 , SString (" OnPostCreateDevice: invalid presentation parameters pointer %p" , ms_pPresentationParameters));
146+ ms_hasDeviceArgs = false ;
147+ return hResult;
121148 }
122- return hResult;
149+
150+ HRESULT result = g_pCore->OnPostCreateDevice (hResult, ms_pDirect3D, ms_Adapter, ms_DeviceType, ms_hFocusWindow, ms_BehaviorFlags, ms_pPresentationParameters,
151+ ms_ppReturnedDeviceInterface);
152+ ms_hasDeviceArgs = false ;
153+ return result;
123154}
124155
125156// Hook info
0 commit comments