@@ -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
@@ -112,12 +119,36 @@ void _declspec(naked) HOOK_PreCreateDevice()
112119// //////////////////////////////////////////////////////////////
113120HRESULT _cdecl OnPostCreateDevice (HRESULT hResult)
114121{
115- if (g_pCore)
122+ if (!g_pCore)
123+ {
124+ ms_hasDeviceArgs = false ;
125+ return hResult;
126+ }
127+
128+ if (!ms_hasDeviceArgs)
129+ {
130+ AddReportLog (8741 , SString (" OnPostCreateDevice: device arguments were not captured; skipping alt startup logic" ));
131+ return hResult;
132+ }
133+
134+ if (!SharedUtil::IsReadablePointer (ms_ppReturnedDeviceInterface, sizeof (*ms_ppReturnedDeviceInterface)))
135+ {
136+ AddReportLog (8742 , SString (" OnPostCreateDevice: invalid device pointer reference %p" , ms_ppReturnedDeviceInterface));
137+ ms_hasDeviceArgs = false ;
138+ return hResult;
139+ }
140+
141+ if (!SharedUtil::IsReadablePointer (ms_pPresentationParameters, sizeof (*ms_pPresentationParameters)))
116142 {
117- return g_pCore->OnPostCreateDevice (hResult, ms_pDirect3D, ms_Adapter, ms_DeviceType, ms_hFocusWindow, ms_BehaviorFlags, ms_pPresentationParameters,
118- ms_ppReturnedDeviceInterface);
143+ AddReportLog (8743 , SString (" OnPostCreateDevice: invalid presentation parameters pointer %p" , ms_pPresentationParameters));
144+ ms_hasDeviceArgs = false ;
145+ return hResult;
119146 }
120- return hResult;
147+
148+ HRESULT result = g_pCore->OnPostCreateDevice (hResult, ms_pDirect3D, ms_Adapter, ms_DeviceType, ms_hFocusWindow, ms_BehaviorFlags, ms_pPresentationParameters,
149+ ms_ppReturnedDeviceInterface);
150+ ms_hasDeviceArgs = false ;
151+ return result;
121152}
122153
123154// Hook info
0 commit comments