From 7eefee644a14b61039e65a733e5e9c2bcd232592 Mon Sep 17 00:00:00 2001 From: gho tik Date: Thu, 14 Apr 2016 12:45:38 -0400 Subject: [PATCH] v2_03_62_src Former-commit-id: 3b7d1ac770cc520bfce21e312ada56032671a513 --- Release/.gitattributes | 1 - Release/dxwnd.dll | 3 - Release/dxwnd.exe | 3 - build/dxwnd.0.ini | 3 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/dxwnd.reg | 14 - .../exports/Gooka The Mystery of Janatris.dxw | 29 ++ build/proxy/d3d8.dll | 2 +- build/proxy/d3d9.dll | 2 +- build/proxy/ddraw.dll | 4 +- build/readme-relnotes.txt | 8 +- dll/dinput.cpp | 298 ++++++++++++++---- dll/dsound.cpp | 65 +++- dll/dxhook.cpp | 8 +- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 425472 -> 444416 bytes dll/winproc.cpp | 7 +- host/TabProgram.cpp | 13 + host/dxwndhost.aps | Bin 138336 -> 138072 bytes host/dxwndhost.rc | Bin 113266 -> 113270 bytes host/dxwndhost.vs2008.suo | Bin 94720 -> 96768 bytes proxy/d3d8.suo | Bin 10240 -> 10240 bytes proxy/d3d9.suo | Bin 9216 -> 9216 bytes proxy/ddraw.suo | Bin 17408 -> 17408 bytes proxy/init.cpp | 6 - 26 files changed, 367 insertions(+), 107 deletions(-) delete mode 100644 Release/.gitattributes delete mode 100644 Release/dxwnd.dll delete mode 100644 Release/dxwnd.exe delete mode 100644 build/dxwnd.reg create mode 100644 build/exports/Gooka The Mystery of Janatris.dxw diff --git a/Release/.gitattributes b/Release/.gitattributes deleted file mode 100644 index b110a24..0000000 --- a/Release/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.{dll,exe} filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/Release/dxwnd.dll b/Release/dxwnd.dll deleted file mode 100644 index 0bf9953..0000000 --- a/Release/dxwnd.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a515ee8d52505d5b62117e1931676f56d30edb24aa7c177da523ea480ca3ea56 -size 638464 diff --git a/Release/dxwnd.exe b/Release/dxwnd.exe deleted file mode 100644 index 6f72c4a..0000000 --- a/Release/dxwnd.exe +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:580769bb1fc0c1d0639a1b1dc00f874184b7c61269efcdd2644765d7de1e7442 -size 556032 diff --git a/build/dxwnd.0.ini b/build/dxwnd.0.ini index be2c649..dfdaf5d 100644 --- a/build/dxwnd.0.ini +++ b/build/dxwnd.0.ini @@ -27,5 +27,8 @@ fpstoggle= printscreen=0x7B corner=0x7A freezetime=0x79 +fullscreen=0x0D +workarea= +desktop= diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 0bf9953..f2b647a 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a515ee8d52505d5b62117e1931676f56d30edb24aa7c177da523ea480ca3ea56 -size 638464 +oid sha256:c352a420894e9be21d4b1a04c665e7e463d533be4c54b70201c90db2702ef994 +size 643584 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 6f72c4a..66e542e 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:580769bb1fc0c1d0639a1b1dc00f874184b7c61269efcdd2644765d7de1e7442 +oid sha256:b9bf619ccedb715b22ab6deee04a4182be6f76f31f702ac1e2ff1bb172447e49 size 556032 diff --git a/build/dxwnd.reg b/build/dxwnd.reg deleted file mode 100644 index ead38c6..0000000 --- a/build/dxwnd.reg +++ /dev/null @@ -1,14 +0,0 @@ -[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft] -[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games] -[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98] -[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Golf '98\Version 1.0 Demo] -"AppPath"="D:\\Games\\MSGolf98\\MSGOLF98" -"InstallType"="1" -"InstallPath"="D:\\Games\\MSGolf98\\MSGOLF98\\" -"CDPath"="D:\\Games\\MSGolf98\\MSGOLF98" -"Launched"="1" -"PID"="" -"Path"="D:\\Games\\MSGolf98\\MSGOLF98" -"VersionType"="TrialVersion" -"InstalledGroup"="1" -"LangID"=dword:00000009 diff --git a/build/exports/Gooka The Mystery of Janatris.dxw b/build/exports/Gooka The Mystery of Janatris.dxw new file mode 100644 index 0000000..46b87f8 --- /dev/null +++ b/build/exports/Gooka The Mystery of Janatris.dxw @@ -0,0 +1,29 @@ +[target] +title0=Gooka The Mystery of Janatris +path0=D:\Games\Gooka The Mystery of Janatris\Gooka\Gooka2.exe +launchpath0= +module0= +opengllib0= +notes0=Starforce protected: is working only with proper crack.\nThe game has a native windowed mode.\nTo use DxWnd configure it in fullscreen mode.\nSetting audio in 3D mode (in advanced game settings" may cause a game error \nafter the main menu at game starting! +registry0= +ver0=0 +coord0=0 +flag0=136315402 +flagg0=1207959552 +flagh0=20 +flagi0=4194308 +flagj0=4224 +flagk0=268500992 +flagl0=8 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 diff --git a/build/proxy/d3d8.dll b/build/proxy/d3d8.dll index e61c304..ec3c3db 100644 --- a/build/proxy/d3d8.dll +++ b/build/proxy/d3d8.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fbf64fa49a8d0a6b663bead76c6505fc15601989ad224c4c7c2a7362f7c7191 +oid sha256:6f84be0f5c6643d8c83967d60f343b4d1a61f278287206ee56fbcb2991001d34 size 54784 diff --git a/build/proxy/d3d9.dll b/build/proxy/d3d9.dll index 8448260..e83a734 100644 --- a/build/proxy/d3d9.dll +++ b/build/proxy/d3d9.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82e18e275a93264221b7c2d205192332d457d2d0cf44fa88400b3d288db3601c +oid sha256:b1e79093e9a141f7936c8c8cd27ac2dc36196683294a81f21e5f84a5f5fcc5e0 size 55808 diff --git a/build/proxy/ddraw.dll b/build/proxy/ddraw.dll index b43f5b7..22148b1 100644 --- a/build/proxy/ddraw.dll +++ b/build/proxy/ddraw.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d0edf937b0e8cac90fa36c4281f78fb554a236c1da32a5d8b103211636839c6 -size 56832 +oid sha256:73324ad26838bc56f13cdcb1e23c1e122f9a6bb96cb3fdc3f13ad47f249ecb8e +size 56320 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 3b7678c..2cd24df 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1076,4 +1076,10 @@ fix: preliminary d3d7 function pointers separation for different interfaces add: block process priority class add: autohide DxWnd feature fix: GUI kill process now kills the whole process tree to avoid leaving live processes around. Happens for instance in Win7 with rundll32.exe for compatibility in 64 bit environment, and that one uses a full core CPU! -fix: added CDS_UPDATEREGISTRY to the ChangeDisplaySettings modes to be neutralized. Needed in "Severance: Blade of Darkness". \ No newline at end of file +fix: added CDS_UPDATEREGISTRY to the ChangeDisplaySettings modes to be neutralized. Needed in "Severance: Blade of Darkness". + +v2.03.62 +fix: flag "Intercept Alt-F4 key" now working also alone with no need to set "Enable hot keys" +fix: file open dialogs initialization on WinXP platform +fix: hooked ANSI & WIDECHAR version of DirectInput8Create: makes "Gooka the Mystery of Janatris" working. +fix: rebuild up-to-date dxwnd proxies diff --git a/dll/dinput.cpp b/dll/dinput.cpp index c057841..2f2d3c6 100644 --- a/dll/dinput.cpp +++ b/dll/dinput.cpp @@ -20,47 +20,89 @@ extern BOOL WINAPI extGetCursorPos(LPPOINT); +/* +DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); +DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); +DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); +DEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); +DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +*/ + typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); -typedef HRESULT (WINAPI *DirectInputCreate_Type)(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); +typedef HRESULT (WINAPI *DirectInputCreateA_Type)(HINSTANCE, DWORD, LPDIRECTINPUTA *, LPUNKNOWN); +typedef HRESULT (WINAPI *DirectInputCreateW_Type)(HINSTANCE, DWORD, LPDIRECTINPUTW *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectInputCreateEx_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); -typedef HRESULT (WINAPI *DICreateDevice_Type)(LPDIRECTINPUT, REFGUID, LPDIRECTINPUTDEVICE *, LPUNKNOWN); +typedef HRESULT (WINAPI *DICreateDeviceA_Type)(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); +typedef HRESULT (WINAPI *DICreateDeviceW_Type)(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); typedef HRESULT (WINAPI *DICreateDeviceEx_Type)(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN); typedef HRESULT (WINAPI *GetDeviceData_Type)(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD); typedef HRESULT (WINAPI *GetDeviceState_Type)(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE); typedef HRESULT (WINAPI *DISetCooperativeLevel_Type)(LPDIRECTINPUTDEVICE, HWND, DWORD); typedef HRESULT (WINAPI *SetDataFormat_Type)(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT); -typedef HRESULT (WINAPI *DIEnumDevices_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACK, LPVOID, DWORD); +typedef HRESULT (WINAPI *DIEnumDevicesA_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); +typedef HRESULT (WINAPI *DIEnumDevicesW_Type)(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); typedef HRESULT (WINAPI *Acquire_Type)(LPDIRECTINPUTDEVICE); typedef HRESULT (WINAPI *Unacquire_Type)(LPDIRECTINPUTDEVICE); typedef HRESULT (WINAPI *DirectInput8Create_Type)(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); - -HRESULT WINAPI extDirectInputCreateA(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); -HRESULT WINAPI extDirectInputCreateW(HINSTANCE, DWORD, LPDIRECTINPUT *, LPUNKNOWN); -HRESULT WINAPI extDirectInputCreateEx(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); + +HRESULT WINAPI extDirectInputCreateA(HINSTANCE, DWORD, LPDIRECTINPUTA *, LPUNKNOWN); +HRESULT WINAPI extDirectInputCreateW(HINSTANCE, DWORD, LPDIRECTINPUTW *, LPUNKNOWN); +HRESULT WINAPI extDirectInputCreateExA(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); +HRESULT WINAPI extDirectInputCreateExW(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); -HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT, REFGUID, LPDIRECTINPUTDEVICE *, LPUNKNOWN); -HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT, REFGUID, REFIID, LPVOID *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceA1(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceA2(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceA7(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceA8(LPDIRECTINPUTA, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceW1(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceW2(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceW7(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceW8(LPDIRECTINPUTW, REFGUID, LPDIRECTINPUTDEVICEW *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceExA(LPDIRECTINPUTA, REFGUID, REFIID, LPVOID *, LPUNKNOWN); +HRESULT WINAPI extDICreateDeviceExW(LPDIRECTINPUTW, REFGUID, REFIID, LPVOID *, LPUNKNOWN); HRESULT WINAPI extGetDeviceData(LPDIRECTINPUTDEVICE, DWORD, LPVOID, LPDWORD, DWORD); HRESULT WINAPI extGetDeviceState(LPDIRECTINPUTDEVICE, DWORD, LPDIMOUSESTATE); HRESULT WINAPI extDISetCooperativeLevel(LPDIRECTINPUTDEVICE, HWND, DWORD); HRESULT WINAPI extSetDataFormat(LPDIRECTINPUTDEVICE, LPCDIDATAFORMAT); HRESULT WINAPI extDIQueryInterface(void *, REFIID, LPVOID *); -HRESULT WINAPI extDIEnumDevices(void *, DWORD, LPDIENUMDEVICESCALLBACK, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesA1(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesA2(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesA7(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesA8(void *, DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesW1(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesW2(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesW7(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); +HRESULT WINAPI extDIEnumDevicesW8(void *, DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); HRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE); HRESULT WINAPI extUnacquire(LPDIRECTINPUTDEVICE); HRESULT WINAPI extDirectInput8Create(HINSTANCE, DWORD, REFIID, LPVOID *, LPUNKNOWN); -DirectInputCreate_Type pDirectInputCreateA = NULL; -DirectInputCreate_Type pDirectInputCreateW = NULL; -DirectInputCreateEx_Type pDirectInputCreateEx = NULL; -DICreateDevice_Type pDICreateDevice = NULL; -DICreateDeviceEx_Type pDICreateDeviceEx = NULL; +DirectInputCreateA_Type pDirectInputCreateA = NULL; +DirectInputCreateW_Type pDirectInputCreateW = NULL; +DirectInputCreateEx_Type pDirectInputCreateExA, pDirectInputCreateExW; +DICreateDeviceA_Type pDICreateDeviceA1, pDICreateDeviceA2, pDICreateDeviceA7, pDICreateDeviceA8; +DICreateDeviceW_Type pDICreateDeviceW1, pDICreateDeviceW2, pDICreateDeviceW7, pDICreateDeviceW8; +DICreateDeviceEx_Type pDICreateDeviceExA, pDICreateDeviceExW; +//DICreateDeviceEx_Type pDICreateDeviceEx; GetDeviceData_Type pGetDeviceData = NULL; GetDeviceState_Type pGetDeviceState = NULL; DISetCooperativeLevel_Type pDISetCooperativeLevel = NULL; SetDataFormat_Type pSetDataFormat = NULL; QueryInterface_Type pDIQueryInterface = NULL; -DIEnumDevices_Type pDIEnumDevices = NULL; +DIEnumDevicesA_Type pDIEnumDevicesA1, pDIEnumDevicesA2, pDIEnumDevicesA7, pDIEnumDevicesA8; +DIEnumDevicesW_Type pDIEnumDevicesW1, pDIEnumDevicesW2, pDIEnumDevicesW7, pDIEnumDevicesW8; Acquire_Type pAcquire = NULL; Unacquire_Type pUnacquire = NULL; DirectInput8Create_Type pDirectInput8Create = NULL; @@ -68,7 +110,7 @@ DirectInput8Create_Type pDirectInput8Create = NULL; static HookEntryEx_Type diHooks[]={ {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateA", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateA, (FARPROC)extDirectInputCreateA}, {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateW", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateW, (FARPROC)extDirectInputCreateW}, - {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateEx", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateEx, (FARPROC)extDirectInputCreateEx}, + {HOOK_HOT_CANDIDATE, 0, "DirectInputCreateExA", (FARPROC)NULL, (FARPROC *)&pDirectInputCreateExA, (FARPROC)extDirectInputCreateExA}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -115,15 +157,15 @@ void HookDirectInput(HMODULE module) LPDIRECTINPUT lpdi; HookLibraryEx(module, diHooks, "dinput.dll"); - if(!pDirectInputCreateA && !pDirectInputCreateW && !pDirectInputCreateEx){ + if(!pDirectInputCreateA && !pDirectInputCreateW && !pDirectInputCreateExA){ hinst = LoadLibrary("dinput.dll"); - pDirectInputCreateA = (DirectInputCreate_Type)GetProcAddress(hinst, "DirectInputCreateA"); + pDirectInputCreateA = (DirectInputCreateA_Type)GetProcAddress(hinst, "DirectInputCreateA"); if(pDirectInputCreateA) if(!extDirectInputCreateA(GetModuleHandle(0), DIRECTINPUT_VERSION, &lpdi, 0)) lpdi->Release(); - pDirectInputCreateEx = (DirectInputCreateEx_Type)GetProcAddress(hinst, "DirectInputCreateEx"); - if(pDirectInputCreateEx) - if(!extDirectInputCreateEx(GetModuleHandle(0), DIRECTINPUT_VERSION, + pDirectInputCreateExA = (DirectInputCreateEx_Type)GetProcAddress(hinst, "DirectInputCreateEx"); + if(pDirectInputCreateExA) + if(!extDirectInputCreateExA(GetModuleHandle(0), DIRECTINPUT_VERSION, di7, (void **)&lpdi, 0)) lpdi->Release(); } } @@ -158,50 +200,75 @@ FARPROC Remap_DInput8_ProcAddress(LPCSTR proc, HMODULE hModule) return NULL; } -HRESULT WINAPI extDirectInputCreate(HINSTANCE hinst, - DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu, DirectInputCreate_Type pDirectInputCreate, char *apiname) +HRESULT WINAPI extDirectInputCreateA(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu) { HRESULT res; - OutTraceDW("%s: dwVersion=%x\n", apiname, dwversion); + OutTraceDW("DirectInputCreateA: version=%x\n", dwversion); - res = (*pDirectInputCreate)(hinst, dwversion, lplpdi, pu); + res = (*pDirectInputCreateA)(hinst, dwversion, lplpdi, pu); if(res) { - OutTraceE("%s: ERROR err=%x(%s)\n", apiname, res, ExplainDDError(res)); + OutTraceE("DirectInputCreateA: ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } SetHook((void *)(**(DWORD **)lplpdi), extDIQueryInterface, (void **)&pDIQueryInterface, "QueryInterface(I)"); - SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); - SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)"); + SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDeviceA1, (void **)&pDICreateDeviceA1, "CreateDevice(I)"); + SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevicesA1, (void **)&pDIEnumDevicesA1, "EnumDevices(I)"); return 0; } -HRESULT WINAPI extDirectInputCreateA(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu) -{ - return extDirectInputCreate(hinst, dwversion, lplpdi, pu, pDirectInputCreateA, "DirectInputCreateA"); -} - -HRESULT WINAPI extDirectInputCreateW(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUT *lplpdi, LPUNKNOWN pu) -{ - return extDirectInputCreate(hinst, dwversion, lplpdi, pu, pDirectInputCreateW, "DirectInputCreateW"); -} - -HRESULT WINAPI extDirectInputCreateEx(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) +HRESULT WINAPI extDirectInputCreateW(HINSTANCE hinst, DWORD dwversion, LPDIRECTINPUTW *lplpdi, LPUNKNOWN pu) { HRESULT res; - OutTraceDW("DirectInputCreateEx: dwVersion=%x REFIID=%x\n", - dwversion, riidltf.Data1); + OutTraceDW("DirectInputCreateW: version=%x\n", dwversion); - res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu); + res = (*pDirectInputCreateW)(hinst, dwversion, lplpdi, pu); if(res) { - OutTraceE("DirectInputCreateEx: ERROR err=%x(%s)\n", res, ExplainDDError(res)); + OutTraceE("DirectInputCreateW: ERROR err=%x(%s)\n", res, ExplainDDError(res)); return res; } - SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I7)"); - SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I7)"); + SetHook((void *)(**(DWORD **)lplpdi), extDIQueryInterface, (void **)&pDIQueryInterface, "QueryInterface(I)"); + SetHook((void *)(**(DWORD **)lplpdi + 12), extDICreateDeviceW1, (void **)&pDICreateDeviceW1, "CreateDevice(IW1)"); + SetHook((void *)(**(DWORD **)lplpdi + 16), extDIEnumDevicesW1, (void **)&pDIEnumDevicesW1, "EnumDevices(IW1)"); + return 0; +} + +HRESULT WINAPI extDirectInputCreateExA(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) +{ + HRESULT res; + + OutTraceDW("DirectInputCreateExA: dwVersion=%x REFIID=%x\n", + dwversion, riidltf.Data1); + + res = (*pDirectInputCreateExA)(hinst, dwversion, riidltf, ppvout, pu); + if(res) { + OutTraceE("DirectInputCreateExA: ERROR err=%x(%s)\n", res, ExplainDDError(res)); + return res; + } + SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceA7, (void **)&pDICreateDeviceA7, "CreateDevice(IA7)"); + SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesA7, (void **)&pDIEnumDevicesA7, "EnumDevices(IA7)"); if(dwversion >= 700) - SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceEx, (void **)&pDICreateDeviceEx, "CreateDeviceEx(I7)"); + SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceExA, (void **)&pDICreateDeviceExA, "CreateDeviceEx(IA7)"); + return 0; +} + +HRESULT WINAPI extDirectInputCreateExW(HINSTANCE hinst, DWORD dwversion, REFIID riidltf, LPVOID *ppvout, LPUNKNOWN pu) +{ + HRESULT res; + + OutTraceDW("DirectInputCreateExW: dwVersion=%x REFIID=%x\n", + dwversion, riidltf.Data1); + + res = (*pDirectInputCreateExW)(hinst, dwversion, riidltf, ppvout, pu); + if(res) { + OutTraceE("DirectInputCreateExW: ERROR err=%x(%s)\n", res, ExplainDDError(res)); + return res; + } + SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceW7, (void **)&pDICreateDeviceA7, "CreateDevice(IA7)"); + SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesW7, (void **)&pDIEnumDevicesA7, "EnumDevices(IA7)"); + if(dwversion >= 700) + SetHook((void *)(**(DWORD **)ppvout + 36), extDICreateDeviceExW, (void **)&pDICreateDeviceExA, "CreateDeviceEx(IA7)"); return 0; } @@ -217,20 +284,29 @@ HRESULT WINAPI extDIQueryInterface(void * lpdi, REFIID riid, LPVOID *obp) switch(riid.Data1){ case 0x89521360: //DirectInputA + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA1, (void **)&pDICreateDeviceA1, "CreateDevice(IA1)"); + SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA1, (void **)&pDIEnumDevicesA1, "EnumDevices(IA1)"); + break; case 0x89521361: //DirectInputW - SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I)"); - SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I)"); + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW1, (void **)&pDICreateDeviceW1, "CreateDevice(IW1)"); + SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW1, (void **)&pDIEnumDevicesW1, "EnumDevices(IW1)"); break; case 0x5944E662: //DirectInput2A + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA2, (void **)&pDICreateDeviceA2, "CreateDevice(IA2)"); + SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA2, (void **)&pDIEnumDevicesA2, "EnumDevices(IA2)"); + break; case 0x5944E663: //DirectInput2W - SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I2)"); - SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I2)"); + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW2, (void **)&pDICreateDeviceW2, "CreateDevice(IW2)"); + SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW2, (void **)&pDIEnumDevicesW2, "EnumDevices(IW2)"); break; case 0x9A4CB684: //IDirectInput7A + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceA7, (void **)&pDICreateDeviceA7, "CreateDevice(IA7)"); + SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesA7, (void **)&pDIEnumDevicesA7, "EnumDevices(IA7)"); + SetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceExA, (void **)&pDICreateDeviceExA, "CreateDeviceEx(IA7)"); case 0x9A4CB685: //IDirectInput7W - SetHook((void *)(**(DWORD **)obp + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I7)"); - SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I7)"); - SetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceEx, (void **)&pDICreateDeviceEx, "CreateDeviceEx(I7)"); + SetHook((void *)(**(DWORD **)obp + 12), extDICreateDeviceW7, (void **)&pDICreateDeviceW7, "CreateDevice(IW7)"); + SetHook((void *)(**(DWORD **)obp + 16), extDIEnumDevicesW7, (void **)&pDIEnumDevicesW7, "EnumDevices(IW7)"); + SetHook((void *)(**(DWORD **)obp + 36), extDICreateDeviceExW, (void **)&pDICreateDeviceExW, "CreateDeviceEx(IW7)"); break; } return 0; @@ -243,15 +319,22 @@ HRESULT WINAPI extDirectInput8Create(HINSTANCE hinst, DWORD dwversion, REFIID ri OutTraceDW("DirectInput8Create: dwVersion=%x REFIID=%x\n", dwversion, riidltf.Data1); - //res = (*pDirectInputCreateEx)(hinst, dwversion, riidltf, ppvout, pu); res = (*pDirectInput8Create)(hinst, dwversion, riidltf, ppvout, pu); if(res) { OutTraceE("DirectInput8Create: ERROR res=%x\n", res); return res; } OutTraceDW("DirectInput8Create: di=%x\n", *ppvout); - SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDevice, (void **)&pDICreateDevice, "CreateDevice(I8)"); - SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevices, (void **)&pDIEnumDevices, "EnumDevices(I8)"); + switch(riidltf.Data1){ + case 0xBF798030: + SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceA8, (void **)&pDICreateDeviceA8, "CreateDevice(IA8)"); + SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesA8, (void **)&pDIEnumDevicesA8, "EnumDevices(IA8)"); + break; + case 0xBF798031: + SetHook((void *)(**(DWORD **)ppvout + 12), extDICreateDeviceW8, (void **)&pDICreateDeviceW8, "CreateDevice(IW8)"); + SetHook((void *)(**(DWORD **)ppvout + 16), extDIEnumDevicesW8, (void **)&pDIEnumDevicesW8, "EnumDevices(IW8)"); + break; + } return 0; } @@ -283,15 +366,15 @@ static int iDeviceType(REFGUID rguid) return devtype; } -HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICE *lplpdid, LPUNKNOWN pu) +HRESULT WINAPI extDICreateDeviceA(DICreateDeviceA_Type pDICreateDevice, LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) { HRESULT res; - OutTraceDW("CreateDevice(I): REFGUID=%x(%s)\n", rguid.Data1, sDeviceType(rguid)); + OutTraceDW("CreateDeviceA(I): REFGUID=%x(%s)\n", rguid.Data1, sDeviceType(rguid)); res = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu); if(res) { - OutTraceE("CreateDevice(I): ERROR res=%x\n", res); + OutTraceE("CreateDeviceA(I): ERROR res=%x\n", res); return res; } @@ -312,6 +395,53 @@ HRESULT WINAPI extDICreateDevice(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPU return DI_OK; } +HRESULT WINAPI extDICreateDeviceA1(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceA(pDICreateDeviceA1, lpdi, rguid, lplpdid, pu); } +HRESULT WINAPI extDICreateDeviceA2(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceA(pDICreateDeviceA2, lpdi, rguid, lplpdid, pu); } +HRESULT WINAPI extDICreateDeviceA7(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceA(pDICreateDeviceA7, lpdi, rguid, lplpdid, pu); } +HRESULT WINAPI extDICreateDeviceA8(LPDIRECTINPUT lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEA *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceA(pDICreateDeviceA8, lpdi, rguid, lplpdid, pu); } + +HRESULT WINAPI extDICreateDeviceW(DICreateDeviceW_Type pDICreateDevice, LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) +{ + HRESULT res; + + OutTraceDW("CreateDeviceW(I): REFGUID=%x(%s)\n", rguid.Data1, sDeviceType(rguid)); + + res = (*pDICreateDevice)(lpdi, rguid, lplpdid, pu); + if(res) { + OutTraceE("CreateDeviceW(I): ERROR res=%x\n", res); + return res; + } + + OutTraceDW("CreateDevice(I): did=%x\n", *lplpdid); + SetHook((void *)(**(DWORD **)lplpdid + 28), extAcquire, (void **)&pAcquire, "Acquire(I)"); + SetHook((void *)(**(DWORD **)lplpdid + 32), extUnacquire, (void **)&pUnacquire, "Unacquire(I)"); + SetHook((void *)(**(DWORD **)lplpdid + 36), extGetDeviceState, (void **)&pGetDeviceState, "GetDeviceState(I)"); + SetHook((void *)(**(DWORD **)lplpdid + 40), extGetDeviceData, (void **)&pGetDeviceData, "GetDeviceData(I)"); + SetHook((void *)(**(DWORD **)lplpdid + 44), extSetDataFormat, (void **)&pSetDataFormat, "SetDataFormat(I)"); + SetHook((void *)(**(DWORD **)lplpdid + 52), extDISetCooperativeLevel, (void **)&pDISetCooperativeLevel, "SetCooperativeLevel(I)"); + + switch(iDeviceType(rguid)){ + case DIDEVTYPE_DEVICE: lpDIDDevice = (LPDIRECTINPUTDEVICE)*lplpdid; break; + case DIDEVTYPE_MOUSE: lpDIDSysMouse = (LPDIRECTINPUTDEVICE)*lplpdid; break; + case DIDEVTYPE_KEYBOARD: lpDIDKeyboard = (LPDIRECTINPUTDEVICE)*lplpdid; break; + case DIDEVTYPE_JOYSTICK: lpDIDJoystick = (LPDIRECTINPUTDEVICE)*lplpdid; break; + } + return DI_OK; +} + +HRESULT WINAPI extDICreateDeviceW1(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceW(pDICreateDeviceW1, lpdi, rguid, lplpdid, pu); } +HRESULT WINAPI extDICreateDeviceW2(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceW(pDICreateDeviceW2, lpdi, rguid, lplpdid, pu); } +HRESULT WINAPI extDICreateDeviceW7(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceW(pDICreateDeviceW7, lpdi, rguid, lplpdid, pu); } +HRESULT WINAPI extDICreateDeviceW8(LPDIRECTINPUTW lpdi, REFGUID rguid, LPDIRECTINPUTDEVICEW *lplpdid, LPUNKNOWN pu) +{ return extDICreateDeviceW(pDICreateDeviceW8, lpdi, rguid, lplpdid, pu); } + HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) { @@ -319,7 +449,7 @@ HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid, OutTraceDW("CreateDeviceEx(I): GUID=%x(%s) REFIID=%x\n", rguid.Data1, sDeviceType(rguid), riid.Data1); - res = (*pDICreateDeviceEx)(lpdi, rguid, riid, pvout, pu); + res = (*pDICreateDeviceExA)(lpdi, rguid, riid, pvout, pu); if(res) { OutTraceE("CreateDeviceEx(I): ERROR res=%x\n", res); return res; @@ -341,6 +471,13 @@ HRESULT WINAPI extDICreateDeviceEx(LPDIRECTINPUT lpdi, REFGUID rguid, return DI_OK; } +// to do +HRESULT WINAPI extDICreateDeviceExA(LPDIRECTINPUTA lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) +{ return extDICreateDeviceEx(lpdi, rguid, riid, pvout, pu); } +HRESULT WINAPI extDICreateDeviceExW(LPDIRECTINPUTW lpdi, REFGUID rguid, REFIID riid, LPVOID *pvout, LPUNKNOWN pu) +{ return extDICreateDeviceEx((LPDIRECTINPUT)lpdi, rguid, riid, pvout, pu); } + + /* from MSDN: cbObjectData Size of the DIDEVICEOBJECTDATA structure, in bytes. @@ -631,19 +768,50 @@ HRESULT WINAPI extDeviceProxy(LPCDIDEVICEINSTANCE dev, LPVOID arg) return res; } -HRESULT WINAPI extDIEnumDevices(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) +HRESULT WINAPI extDIEnumDevicesA(DIEnumDevicesA_Type pDIEnumDevices, void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) { HRESULT res; CallbackArg Arg; - OutTraceDW("EnumDevices(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\n", lpdi, dwDevType, lpCallback, pvRef, dwFlags); + OutTraceDW("EnumDevicesA(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\n", lpdi, dwDevType, lpCallback, pvRef, dwFlags); Arg.cb= lpCallback; Arg.arg=pvRef; - res=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACK)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix + res=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACKA)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix //res=(*pDIEnumDevices)( lpdi, dwDevType, lpCallback, pvRef, dwFlags); - OutTraceDW("EnumDevices(I): res=%x\n", res); + OutTraceDW("EnumDevicesA(I): res=%x\n", res); return res; } +HRESULT WINAPI extDIEnumDevicesA1(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesA(pDIEnumDevicesA1, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } +HRESULT WINAPI extDIEnumDevicesA2(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesA(pDIEnumDevicesA2, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } +HRESULT WINAPI extDIEnumDevicesA7(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesA(pDIEnumDevicesA7, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } +HRESULT WINAPI extDIEnumDevicesA8(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesA(pDIEnumDevicesA8, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } + +HRESULT WINAPI extDIEnumDevicesW(DIEnumDevicesW_Type pDIEnumDevices, void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + HRESULT res; + CallbackArg Arg; + OutTraceDW("EnumDevicesW(I): di=%x DevType=%x CallBack=%x Ref=%x Flags=%x\n", lpdi, dwDevType, lpCallback, pvRef, dwFlags); + Arg.cb= (LPDIENUMDEVICESCALLBACKA)lpCallback; + Arg.arg=pvRef; + res=(*pDIEnumDevices)( lpdi, dwDevType, (LPDIENUMDEVICESCALLBACKW)extDeviceProxy, &Arg, dwFlags); // V2.02.80 fix + //res=(*pDIEnumDevices)( lpdi, dwDevType, lpCallback, pvRef, dwFlags); + OutTraceDW("EnumDevicesW(I): res=%x\n", res); + return res; +} + +HRESULT WINAPI extDIEnumDevicesW1(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesW(pDIEnumDevicesW1, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } +HRESULT WINAPI extDIEnumDevicesW2(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesW(pDIEnumDevicesW2, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } +HRESULT WINAPI extDIEnumDevicesW7(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesW(pDIEnumDevicesW7, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } +HRESULT WINAPI extDIEnumDevicesW8(void *lpdi, DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ return extDIEnumDevicesW(pDIEnumDevicesW8, lpdi, dwDevType, lpCallback, pvRef, dwFlags); } + HRESULT WINAPI extAcquire(LPDIRECTINPUTDEVICE lpdid) { HRESULT res; diff --git a/dll/dsound.cpp b/dll/dsound.cpp index 2921a7f..b3a3820 100644 --- a/dll/dsound.cpp +++ b/dll/dsound.cpp @@ -15,18 +15,29 @@ typedef HRESULT (WINAPI *DirectSoundCreate_Type)(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); typedef HRESULT (WINAPI *DirectSoundCreate8_Type)(LPCGUID, LPDIRECTSOUND8 *, LPUNKNOWN); typedef HRESULT (WINAPI *SetCooperativeLevel_Type) (void *, HWND, DWORD); +typedef HRESULT (WINAPI *CreateSoundBuffer_Type) (void *, LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN); +typedef HRESULT (WINAPI *DirectSoundEnumerateA_Type)(LPDSENUMCALLBACKA, LPVOID); +typedef HRESULT (WINAPI *DirectSoundEnumerateW_Type)(LPDSENUMCALLBACKW, LPVOID); DirectSoundCreate_Type pDirectSoundCreate = NULL; DirectSoundCreate8_Type pDirectSoundCreate8 = NULL; SetCooperativeLevel_Type pDSSetCooperativeLevel = NULL; +CreateSoundBuffer_Type pCreateSoundBuffer = NULL; +DirectSoundEnumerateA_Type pDirectSoundEnumerateA = NULL; +DirectSoundEnumerateW_Type pDirectSoundEnumerateW = NULL; HRESULT WINAPI extDirectSoundCreate(LPGUID, LPDIRECTSOUND *, LPUNKNOWN); HRESULT WINAPI extDirectSoundCreate8(LPCGUID, LPDIRECTSOUND8 *, LPUNKNOWN); HRESULT WINAPI extDSSetCooperativeLevel(void *, HWND, DWORD); +HRESULT WINAPI extCreateSoundBuffer(void *, LPCDSBUFFERDESC, LPDIRECTSOUNDBUFFER *, LPUNKNOWN); +HRESULT WINAPI extDirectSoundEnumerateA(LPDSENUMCALLBACKA, LPVOID); +HRESULT WINAPI extDirectSoundEnumerateW(LPDSENUMCALLBACKW, LPVOID); static HookEntryEx_Type Hooks[]={ {HOOK_HOT_CANDIDATE, 0x0001, "DirectSoundCreate", (FARPROC)NULL, (FARPROC *)&pDirectSoundCreate, (FARPROC)extDirectSoundCreate}, {HOOK_HOT_CANDIDATE, 0x000B, "DirectSoundCreate8", (FARPROC)NULL, (FARPROC *)&pDirectSoundCreate8, (FARPROC)extDirectSoundCreate8}, + {HOOK_HOT_CANDIDATE, 0x000B, "DirectSoundEnumerateA", (FARPROC)NULL, (FARPROC *)&pDirectSoundEnumerateA, (FARPROC)extDirectSoundEnumerateA}, + {HOOK_HOT_CANDIDATE, 0x000B, "DirectSoundEnumerateW", (FARPROC)NULL, (FARPROC *)&pDirectSoundEnumerateW, (FARPROC)extDirectSoundEnumerateW}, {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; @@ -41,7 +52,7 @@ static char *libname = "dsound.dll"; void HookDirectSound(HMODULE hModule) { - HookLibraryEx(hModule, Hooks, libname); + HookLibraryEx(hModule, Hooks, "dsound.dll"); } void HookDirectSoundInit() @@ -52,6 +63,7 @@ void HookDirectSoundInit() void HookDirectSoundObj(LPDIRECTSOUND *lpds) { // IDIrectSound::SetCooperativeLevel + SetHook((void *)(**(DWORD **)lpds + 12), extCreateSoundBuffer, (void **)&pCreateSoundBuffer, "CreateSoundBuffer"); SetHook((void *)(**(DWORD **)lpds + 24), extDSSetCooperativeLevel, (void **)&pDSSetCooperativeLevel, "SetCooperativeLevel(DSound)"); } @@ -125,3 +137,54 @@ HRESULT WINAPI extDSSetCooperativeLevel(void *lpds, HWND hwnd, DWORD dwLevel) } return res; } + +char *ExplainCSBFlags(DWORD c) +{ + static char eb[512]; + unsigned int l; + strcpy(eb,""); + if (c & DSBCAPS_PRIMARYBUFFER) strcat(eb, "PRIMARYBUFFER+"); + if (c & DSBCAPS_STATIC) strcat(eb, "STATIC+"); + if (c & DSBCAPS_LOCHARDWARE) strcat(eb, "LOCHARDWARE+"); + if (c & DSBCAPS_LOCSOFTWARE) strcat(eb, "LOCSOFTWARE+"); + if (c & DSBCAPS_CTRL3D) strcat(eb, "CTRL3D+"); + if (c & DSBCAPS_CTRLFREQUENCY) strcat(eb, "CTRLFREQUENCY+"); + if (c & DSBCAPS_CTRLPAN) strcat(eb, "CTRLPAN+"); + if (c & DSBCAPS_CTRLVOLUME) strcat(eb, "CTRLVOLUME+"); + if (c & DSBCAPS_CTRLPOSITIONNOTIFY) strcat(eb, "CTRLPOSITIONNOTIFY+"); + if (c & DSBCAPS_CTRLFX) strcat(eb, "CTRLFX+"); + if (c & DSBCAPS_STICKYFOCUS) strcat(eb, "STICKYFOCUS+"); + if (c & DSBCAPS_GLOBALFOCUS) strcat(eb, "GLOBALFOCUS+"); + if (c & DSBCAPS_GETCURRENTPOSITION2) strcat(eb, "GETCURRENTPOSITION2+"); + if (c & DSBCAPS_MUTE3DATMAXDISTANCE) strcat(eb, "MUTE3DATMAXDISTANCE+"); + if (c & DSBCAPS_LOCDEFER) strcat(eb, "LOCDEFER+"); + l=strlen(eb); + if (l>strlen("DSBCAPS_")) eb[l-1]=0; // delete last '+' if any + else eb[0]=0; + return(eb); +} + +HRESULT WINAPI extCreateSoundBuffer (void *lpds, LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) +{ + HRESULT res; + OutTraceDW("CreateSoundBuffer: flags=%x(%s) BufferBytes=%d\n", pcDSBufferDesc->dwFlags, ExplainCSBFlags(pcDSBufferDesc->dwFlags), pcDSBufferDesc->dwBufferBytes); + res = (*pCreateSoundBuffer)(lpds, pcDSBufferDesc, ppDSBuffer, pUnkOuter); + if(res) OutTraceE("CreateSoundBuffer ERROR: res=%x(s)\n", res, ExplainDDError(res)); + return res; +} + +HRESULT WINAPI extDirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext) +{ + HRESULT res; + OutTraceDW("DirectSoundEnumerateA\n"); + res = (*pDirectSoundEnumerateA)(pDSEnumCallback, pContext); + return res; +} + +HRESULT WINAPI extDirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext) +{ + HRESULT res; + OutTraceDW("DirectSoundEnumerateW\n"); + res = (*pDirectSoundEnumerateW)(pDSEnumCallback, pContext); + return res; +} diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index a2734bc..a5c22e1 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -80,8 +80,8 @@ static char *Flag3Names[32]={ "FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT", "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE", "MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE", - "NOWINDOWMOVE", "**", "LOCKSYSCOLORS", "GDIEMULATEDC", - "FULLSCREENONLY", "FONTBYPASS", "**", "DEFAULTMESSAGES", + "NOWINDOWMOVE", "FORCECLIPPER", "LOCKSYSCOLORS", "GDIEMULATEDC", + "FULLSCREENONLY", "FONTBYPASS", "MINIMALCAPS", "DEFAULTMESSAGES", "BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN", "ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX", "NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT", @@ -121,8 +121,8 @@ static char *Flag6Names[32]={ }; static char *Flag7Names[32]={ - "LIMITDDRAW", "DISABLEDISABLEALTTAB", "FIXCLIPPERAREA", "", - "", "", "", "", + "LIMITDDRAW", "DISABLEDISABLEALTTAB", "FIXCLIPPERAREA", "HOOKDIRECTSOUND", + "HOOKSMACKW32", "BLOCKPRIORITYCLASS", "", "", "", "", "", "", "", "", "", "", "", "", "", "", diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index c2aeac9..bce8911 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.61" +#define VERSION "2.03.62.fix2" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 3d602aecb2772ee3dd99801f46bdc7a52d53b4b7..d61afdae8909f973fb54f6a6d91691a6313f4b2f 100644 GIT binary patch delta 13632 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 vj4=9&fMOQ*GzECA|^wn+Z9KJF7OkRRkl*m4ol z@mFW16W?p&r5H+A>Dc|9bn5IKyZ~S=Zd_%|M>hvoOn1LCS&A`I$^L(YW1!W!C5uWe8*L+zdfrKx>HHP`a$KB z)}q)ls6xZC-GgeT-CF!sy6V27y4?Se4LYx=Xb{6YdH4T%p@X6`(TL)}3JQers`0^7 z*4x52^z&Qd|0Ygrvn-*h3rgvDDOZYz|+f3X)BD3BmCK0xDMI$oH_j`n&AU^db zyW0srL$Z<)nU8Rpmp#Su2$YWqE$3>&^~7sNWY!{8gzq6&2zU z#7sOq$G8peXypNn?oq*8e@6bzY%w*Czx1y1?+`u7yUv0ak*?q;#*7u9@kp3yrxP zMyK3$q|vau_eNVe=;$irE>7=#G*{ZNa&V1NZ^I*nMhSl52Zy=)VK>g5XSmazBpdp& z3T&!_eB5=X5kR@r$WE0o$=T~82K3s+Itf!*78+&NEKYQv;I7>Krx#fTkZQY(-rgAd a+M1At)hY?m_File.GetWindowText(path, MAX_PATH); GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitPath); if(!dirExists(path)) strcpy(path, ""); + // XP fix: path must end with '\.' + if(IsWinXP()) strcat(path, "."); CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); if( dlg.DoModal() == IDOK) { @@ -97,6 +108,8 @@ void CTabProgram::OnOpenLaunch() cTarget->m_File.GetWindowText(path, MAX_PATH); GetPrivateProfileString("window", "exepath", NULL, path, MAX_PATH, gInitPath); if(!dirExists(path)) strcpy(path, ""); + // XP fix: path must end with '\.' + if(IsWinXP()) strcat(path, "."); CFileDialog dlg( TRUE, "*.*", path, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Program (*.exe)|*.exe|All Files (*.*)|*.*||", this); if( dlg.DoModal() == IDOK) { diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index a63fa0e8c1a8f7a22f55a881496313a06de5eec0..582521cd893d278bf939a4726bd84fd569c6f350 100644 GIT binary patch delta 1582 zcmZvZQEZb{6vxlG{l2v>I&=!O-_|)}6NzbN8A>d1Dv2@1pb09W!*&HWun&aIv0y7M z0b}AGjDdWTzauUZ4JP_PFqw2sHnSKWcvyV!g*GTCpg>$;Q6y`!spsI6_v_Q|p5OW3 zbMO7WpQj?#(~-lSoI3K*!;dBIGc>Rv`&@DB-hu4??tE%petma-=dO_**}~wyk*?xU zcA)sy-hn&CaQ~qL-yGohd9GsoJipY|O?lc$yJ&=VP?icbNc&{nMMWAa-}58;Av3%d zpIzkVTmC<@ymXQ84%xE(GAG%R$X?-JY`6JWuG_BfH@~MV7sqOU>qVLv&GK688Y_U@NLMf zw{sCEnA_q6bDuVF*B$eOJ+Ip}kK69;2JX8CuDL0=_mu|jSOa&dfqOJ;p0w^#-XAun zn+*|?ttP=KY;HA=@JB}uwKWx)Xx8yhI-Yxjh%%_Ong_Xnn!qfC{R?5wO-N=8vHPVl zhqS;9t?>I+c?Z%KRZrMrkG zk$yljQ|MJhQBpV<7no-=epkkG-;wJ$sHr)g_dm>g?gwHvA+}P?;&yCUX*zfsy;AZm zloX#}T$}F|{Fe()yKACEFJM_4hY?>TsG>*FiJW2$Mip61C=!@a%;P6T3d;hsIE#+e za?C7xR*Q9zQ_NvhL6}gS#f-o#{fP@2J%eQ}7aep&|Jxar&@JQ?(->7OU_vp48HF6F zn8dQ;8sag*DfB3=Ag9=luVW^TV==RekL!A!yycGiejB%j^~2ozI^&;h9CM$NVj5{r zwnfpa_!uQYi24{ebCRGCQ4$qxZ9+}qpstC7{fxnWj)mWq83%Vuv0LI}^7|9$ZIhh* iY{edoE6$>#7(-1ljk>_C%J50V+hsYtmgp2V%JN?W_xauc delta 1944 zcmZ{lZD?C%6vv-)a`d7Zs*fVIs)F<}z_F75YJ#U?T;`I@emG6)n2BGFsfI&sprZ=YF{S?m55b zoafvZ?!A7&H-FKWZK7Ci%hsnNHLQ|Pc0WCQIF;;vwI$KKI}wW}j=h-a?d~6VC9~^z z-#{ue)O(^kIs95G`5-mar%b)@<%C(vL<{SoobHY*vr_NnPeED!jEsOD9Tl_*}Ug!Zn~Psyl&lk zT+PR>rsQgNY~a1dsS7V};0smQ7T|3Z!!rTiNgv49r;)xzPSAtAU=T&Y3d({k0yP>l zhzf=guS98qt`mHRykHqc!Q&`b5ZJ7vONa_45f|vMoxqQrpdI;2R1};+S9y&;cMQ;6#f-9uXN337sy$k*}#?npViQVrHaN{z#|b=~}kb7drq4x24K$stKK zk2#yh!pKT0iBU;KCY-8?Fs5~?dik7EYipbI@ebaw*{O;%Rx zOKuJ72L2zMKZ;=tN`sk&^#&)gKd2k{epzp@5eaE9eaHFYjvgw=-m2ww=R+dMK|K>b zx2PUjE!j($li;kZwCVr3vbZWMZNjXrQKuKT z$zqXyBt*6o-fx#ZwUpp{3C`*Ots!poEFB?SJEBvAAw6C{ehTrUc>XBWcv=6o&Q#)4 z65BeSmv}dY5UAJBWeQP26XJpokrw!n6YN1=(21hJkFwxx1i}vx6+{ph%pfhuASakc cUXVpmFom*)x1`^UORyXCX@85nB>VK~e>T;b&Hw-a diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 192026104c7ccc4b94e60bfe3131c4629ad1c79c..3636ab893175c1e325313dd78040b68276d1ec66 100644 GIT binary patch delta 31 pcmV+)0O0@f^al3y2Cy6glhg#HgT4Z{z5)Trwv$LNq?ahV0ZRM#4rKrU delta 33 mcmezNh3(T9whb~&(~ANa7d0PX+J1nE@x(STZ@SJdMlS#lBMztl diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index a848b05d2d13bb1d2edfcd8700771dcd5579904e..cbc9a0e4ce7b9fc10e0d13136115405434a368c2 100644 GIT binary patch delta 1881 zcmZvdYfMx}6vyY>y}Rt<%42y5xFRSb=t@>nz*2=p5dFT?V=iZ&TC zp(uNZPlR`nU2Cz;QVn&}7ft0qMkiYsYhd{-n{Cy+(Je&#wU(GRGF`wcN0YUQ*l%qa zaw+!67lSBPX1b^ZGv@W)R+!YKnOB8cr60TVi*zu>sy%Z&eqGJLPPE}8|E4%H(aHiV zz@*pf&4zyktOTq4S}yzs(0SRBnuGPWqh0Rr+Y4U`%KXnq;5UH^UV1O$SYxEtemUR7 zZ;mGzGFiIFbI}|_Giwx2w^5=xyJl@F?{-A;iwlA^*Fay$idA^K+(j{<0%xGiU*=pbbnO ztBmNsb=Yjj!akEbxQcJ<1?RvJ;HU2ns4FpAtGV}k1iwCF|=PjL&nlr zHEYBVM-4Xn`&kn4+o4YWYowjp`L*UKemgo2E$T^pp60?+M5-9uMls?eJ7tOc^J$)q zv1w^Fg0!lbVM3h2_FED^>4?H1hV}pBQN^hmdhxLNvGa>XpONg;%Ja_T@~{!7j8Bjq zyTc;d!Kd#9@lPK*r-HRT zRl3$c!xuHmukx7;fh;OgkX308kQM_1gJRL12j=><4F7YOo|{Z4kT=xjqG<`0EALJ% zBSx3dMt);ox)E7(KS;DLC0|7~<>0x3^ogZZteRxDwoOekokgdeM5~jEEOY>!GSZ@B zEv4wAPO@5GV=Ugk3Awq2K$fFqzb32nY#?nZ2z-D8?MkrBugS|2urxH}DoiBqrbYbc z0lRo)q|^L;SGhQzL-qPm6M0DYxag+QByURl)PD7*0y;{(?5tgE-ASj#gKZSagNJQ; z@;Zt$@+vJ&Pb;BL5>_+0baE4FxmUP0&>$~%6!X4rRWB){e&P)y>Bcg=d&cWPJH^Qw z+8{i&)J;BlmR$>ZLQlHx-bD_gTAj*iamdW&QK@3Q!~K~)SVhIk%sFL|IaLGP zoEBy1?R9j>A|4b_4c}po;e%#XxXsjf#X<_{N(i|~td61%-4#dYNu0~1IQjQ@YMlND DInC3g delta 1109 zcmYjQU2IfE6rS(y?A>k)OS{m_uh7O|;>*js3@EkWCL#lKQ)SuCv7EV>a| z3c2CQ1bkSAWct8EYpF*32^`zQ9@>FaPY#n6EZFgaL@5cvv( z>EqU{djdS~IF1N1vVUf?Xe)>cqu{E$j*d3Ul7n~*HDc&N zshjqUiK8QrT5oy>fJWV4!0^z&3H z^|+M_eC2ckNTHkTJ*U(%8HbR@dX2`wYrhd*Gq%wr0Y=c0BBdb^FAh zRhdNi)MR*_>d$UX9d{gMze{!-Ax2R96SQVJ!&d)fqb~j15t7?_ut}!&pm4RXsry5v zL7i3W!tk=Rz;K&ve;a;jG{bLAUEbu&BvyI1kmjv~e5P}?sJfQUBogD(9~6`i&$B7U zOJtuXd@}D7XK!5Qio!~K|IxeHR% z+9w)D>SeY9hWuhDDI!@x>%w1gj|?TzZnwXIgl1(Q{GfXky~4N{+PG3qXebU0Qvr)G zL6{^=5o|*KVrK=WI82`~YLlf4oa#=N5!73Nbo}^SY~IQevO#q=xB-lx#K zMx}EvJH#Sv4@=QxY&li0UxkJh^7uO_lQ(xEDa`=Z*lX5d1Ri#na{3nEdC?5rcv=-? zOxAax!8R)4;^GRgk?Cs0wf@Cid9NBTdZ3iL7QK24wfTJ}`_`j*E_ifF@FNPQn4MdX z7Oo#6k|Rrk=O~z@lTkE_D}fF6-%%7T6XTVY_QxFvLL4{Z^7L~!U}ty3gl!tQ>edx~ z$zl;Zy$vT}XPaQSRfA-43}d3pirA4Ca0)`ZXxL~4{bSC#Yz*4m^*`YgX6t|*>PCwu sjH;L{Z^BubjiXlb{b-S?Zg4sHGS0|VDO`G>c&$Nq^i&-x6h%zuR{D*?c7gB&fq)C7W%C!o047!@ zpmJ_7w?rg>5iBbJHt>t+gvl(DN?=nIC(o1Q<75OX1p)iXh5U+}#9f$Kg@HU#kZM*X gAS-TjrIZ)r diff --git a/proxy/d3d9.suo b/proxy/d3d9.suo index c67a246075bd51057d75750bfe6defaabe26c4d5..be9ce2e391b4b4f16ede82938a0ef8985b824dbb 100644 GIT binary patch delta 603 zcmZuvK~ED=5T4h4Z@1fSkrvoepj{Ra+7Jzxpd`|Sq}5c4sUQaqCW?tSqcN034C-n) zc<4pG#Gl|TgaU7R;uGUqSnc*HYDDh8i%d>8`i!HNQ(!l5N6syKFeLKr`u8%c; z_I{%h{xR>xj1?lh@x9blxxjj;^9c7)hLF*7S!dm%S(0A6hfT5W|d4Nlr3) z%gO?gn+s>NErDXLoW4X0{pThv(=}Q`kUPYoyP`HGi8jw!$2qvmZ@6ClASjdxg6~MYxE+h1a5lJ+GlgIpcz6!;aU8rG(x{?;`v^ L@J+(zR7?B^hm*8% delta 978 zcma)4O-~b16uoacGqgalE#)gBP{fKtwH>C=swe_BEtHg~3l{E-3!*zpB3i=7$_0sr zoA?vlxKWz8l>`@VjFR{hT)5H=CK40Ib6<;b;lejL@11+@oi}IRee3!4{Hvm=Y>t_| z4bSekPwnh{;w5w6YA2!w-j5COuHWQ`R?&(;3DuO4$v>?HvkeO0wg=bxK#n}m6PyMg z0L}n$;4Cl*oCD4SL%=YQ0HppR)?}SKSVsW29*<%jtMlXiFC)GJjMw#RMAct*!SG#z znT=SMZ~7;AH}Hht2Zwp$B)m7y+Dfc;*31WBUZgOj7LhCqEXONNvz7_w*JTGy^A_BB z0Uec_Kk}ZL;&QMgs})7v9ey2Xtv0tD7`z$Fb3U9Y*rXIPUwxRUjow->j7B2Q3mGK3 zjLh6q`J5hoMd8Mu_*f^!^U<;GNZFPyu)&Wa*jn5)Yriq5E+0l_Y=!M9sKtJ;FTBz^ zV^asHPsIKUV4Hv*DN5lqWzNwQP16lpr3!oP9jd|`eTB6ORp>GFBr++wPH9w)qED0P zNt&`?E;2512}F~~CBa7UjOx5Y4&HF^rm$6fGv$o9X*BV_j-o@(;a_L*rnA^pLC@!C zk(TH#+%M7tx(9w0{x@QUg_`q>cACMrYe>MC1CI_|%3n`w=NV+jwDTlpd2(7wL(QV* zZ|5BLCtRD*J+vGD6o2pAof*>|b#)eX-C<{QTEu2{*;PcOVAd8i_h1{{tA!4Mm#Cn<$lhEc z5`5xKN$gM${zgqc)$01-}~2SVxx&$vr(h- z_VwL+%Wvh)s4t?2VHnaweFOvA)dwu)mH=RaagOmP+-X?RX?AGPn2NI?RBVljD~zj@ z8SR!!#^(r5$$Hys)Xp$lrmAh5qfms)P=jl5i*+~5glw9VV(_BADOv%-@QDCqv9gx4 zUzq~fc>hv8Y@${E=x7ri2*@IvnWCa)yz7e)Ge|$JIZVlVq9P)f{#)-`k00R#%JinO zol3oruuN-qVzKWo?e)2fsVq4KZ##Jhu}1a&X$^g)4#vH>nord_vKX_^vLy-%?RbJ# z?16vgT6NPJfT>h|l{Qi@TJBc z1Mj0n&z%B&FU^>6ngc3P1*zKN>a*;O@oEDXhpDP%C`gWI=b7B(aD^JhgX)MNQHb#*`A#qF9TI{c@hiL7g5Kt_Fp;%H7 zEMCNX{{=5zB<6Xy5b)AV!Hc~}Zw1dnp`dXBE%iM<%=>;BX5LI=iyK?qsu^bM#_HkE zon5_Vl!C&M zy}>12AG)tXi>DQu&d7h#;3z82M|?>PHxqABa|UqL_qZRExjXITOXeS_pPxY|Hi=J( zEcUY=%Kkv;tc>(Ezks9EH+Y2