From 1e8566300a067d2579d94e7dea9341578ec91961 Mon Sep 17 00:00:00 2001 From: gho tik Date: Mon, 7 Jan 2013 11:38:05 -0500 Subject: [PATCH] v2_02_25_src Former-commit-id: 173807aaa1600e77d30c5fd3c2290db1e5f5c0a3 --- Include/dxwnd.h | 1 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 28 ++-- build/readme-relnotes.txt | 14 +- dll/dxhook.cpp | 23 ++- dll/dxwnd.cpp | 3 +- dll/dxwnd.vs2008.suo | Bin 86016 -> 96256 bytes dll/hddraw.cpp | 37 ++-- host/KillProc.cpp | 316 +++++++++++++++++++++++++++++++++++ host/MainFrm.cpp | 9 + host/Resource.h | 4 +- host/TabCompat.cpp | 1 + host/TargetDlg.cpp | 1 + host/TargetDlg.h | 1 + host/dxwnd.ini | 28 ---- host/dxwndhost.aps | Bin 161140 -> 161336 bytes host/dxwndhost.rc | 9 +- host/dxwndhost.vs2008.suo | Bin 249344 -> 265728 bytes host/dxwndhost.vs2008.vcproj | 4 + host/dxwndhostView.cpp | 51 +++++- host/dxwndhostView.h | 1 + release/.gitattributes | 1 - release/dxwnd.dll | 3 - 24 files changed, 461 insertions(+), 82 deletions(-) create mode 100644 host/KillProc.cpp delete mode 100644 host/dxwnd.ini delete mode 100644 release/.gitattributes delete mode 100644 release/dxwnd.dll diff --git a/Include/dxwnd.h b/Include/dxwnd.h index e2b557b..1f2bd14 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -87,6 +87,7 @@ #define FORCE16BPP 0x00000040 // Forces 16BPP desktop color depth #define BLACKWHITE 0x00000080 // Simulate a B&W screen monitor mapping colors to grayscales #define SAVECAPS 0x00000100 // Saves and restores original surface flags & capabilities +#define SINGLEPROCAFFINITY 0x00000200 // Set Process Affinity to a single core // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index d80fa58..c1a51bc 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bce7a60e60155037cd12e0c1383f1078103923d7ba43a349e368606025bec75a -size 343040 +oid sha256:89c569d050fd740aedc07bce2d7c3708b13aa127300a83332e8a0d1dde02fdb1 +size 344064 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index c180623..e11abce 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:920bc90915cbde2b59ef55c17b59fe4b741720c68c65491186044fa50ebb4985 -size 521216 +oid sha256:62dacd099414e7a8a4cfa4a1623aa5d55f7728bab0c61ea2a5ab5dfe1c7a43c2 +size 524800 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index 31c7dea..7525d57 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -870,8 +870,8 @@ title51=Daikatana path51=D:\Games\Daikatana\daikatana.exe module51= ver51=12 -flag51=806486530 -flagg51=131585 +flag51=806429218 +flagg51=537002496 tflag51=2 initx51=0 inity51=0 @@ -1632,12 +1632,12 @@ posy95=50 sizx95=800 sizy95=600 title96=Grand Prix World -path96=D:\Games\Grand Prix World\gpwxp3.exe +path96=D:\Games\Grand Prix World\gpwxp2.exe module96= ver96=0 -flag96=-2011168605 -flagg96=134217856 -tflag96=258 +flag96=-2011037534 +flagg96=134217864 +tflag96=259 initx96=0 inity96=0 minx96=0 @@ -4540,8 +4540,8 @@ flagh38=0 flagi38=0 flagh39=0 flagi39=0 -flagh40=-842150435 -flagi40=-842150451 +flagh40=221 +flagi40=0 flagh41=0 flagi41=0 flagh42=0 @@ -4652,7 +4652,7 @@ flagh94=0 flagi94=0 flagh95=0 flagi95=0 -flagh96=93 +flagh96=92 flagi96=0 flagh97=0 flagi97=0 @@ -5401,7 +5401,7 @@ coord227=0 coord228=0 coord229=0 coord230=0 -coord231=1 +coord231=0 coord232=0 coord233=0 coord234=0 @@ -5682,7 +5682,7 @@ sizy246=600 maxfps246=0 initts246=0 [window] -posx=934 -posy=634 -sizx=400 -sizy=300 +posx=-32008 +posy=-32050 +sizx=16 +sizy=58 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 34428c1..5ed2651 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -139,5 +139,15 @@ Improved the primary emulation capacity to handle 3D games Added the "preserve surface capabilities" flag Fixed an hooking bug for user32.dll -v2.02.23/24.fix1 -Fixed a few things to make Grand Prix World playable in emulation mode - sorry, no movies! +v2.02.25 +CORE: +Added 'Single CPU Process Affinity' flag to let old games run on a single CPU core. +Fixed bug causing possible crash using 'preserve surface caps' flag +Switched lpDDSBack reference when backbuffer is upgraded through QueryInterface +Eliminated lpDDSBack clearing when refcount is zero - why is this working better? Needs further investigation +Added DDSCAPS_3DDEVICE capability when in EMULATED mode +GUI: +Added Kill process by name functionality (right click menu on program's list) +Fixed GUI initial position: now checks for desktop size to fit GUI within visible borders +Added single cpu process affinity checkbox in compatibility tab + diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 53987ea..f713702 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -53,8 +53,8 @@ static char *Flag2Names[32]={ static char *Flag3Names[32]={ "FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT", "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE", - "SAVECAPS", "", "", "", - "", "", "", "", + "SAVECAPS", "SINGLEPROCAFFINITY", "Flag3:11", "Flag3:12", + "Flag3:13", "Flag3:14", "Flag3:15", "Flag3:16", "", "", "", "", "", "", "", "", "", "", "", "", @@ -1256,6 +1256,24 @@ void DisableIME() #endif } +void SetSingleProcessAffinity(void) +{ + int i; + DWORD ProcessAffinityMask, SystemAffinityMask; + if(!GetProcessAffinityMask(GetCurrentProcess(), &ProcessAffinityMask, &SystemAffinityMask)) + OutTraceE("GetProcessAffinityMask: ERROR err=%d\n", GetLastError()); + OutTraceD("Process affinity=%x\n", ProcessAffinityMask); + for (i=0; i<(8 * sizeof(DWORD)); i++){ + if (ProcessAffinityMask & 0x1) break; + ProcessAffinityMask >>= 1; + } + OutTraceD("First process affinity bit=%d\n", i); + ProcessAffinityMask &= 0x1; + for (; i; i--) ProcessAffinityMask <<= 1; + OutTraceD("Process affinity=%x\n", ProcessAffinityMask); + if (!SetProcessAffinityMask(GetCurrentProcess(), ProcessAffinityMask)) + OutTraceE("SetProcessAffinityMask: ERROR err=%d\n", GetLastError()); +} int HookInit(TARGETMAP *target, HWND hwnd) { @@ -1291,6 +1309,7 @@ int HookInit(TARGETMAP *target, HWND hwnd) } base=GetModuleHandle(NULL); + if(dxw.dwFlags3 & SINGLEPROCAFFINITY) SetSingleProcessAffinity(); if(dxw.dwFlags1 & HANDLEEXCEPTIONS) HookExceptionHandler(); if (dxw.dwTFlags & OUTIMPORTTABLE) DumpImportTable(base); //if(dxw.dwFlags2 & SUPPRESSIME) DisableIME(); diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index bdd0bb7..faf6f89 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -24,7 +24,7 @@ along with this program. If not, see . #include "dxwnd.h" #include "dxwcore.hpp" -#define VERSION "2.02.24.f1" +#define VERSION "2.02.25" LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam); @@ -209,7 +209,6 @@ void InjectHook() if(!strncmp(name, pMapping[i].path, strlen(name))){ if (pMapping[i].flags2 & STARTDEBUG){ OutTrace("InjectHook: task[%d]=\"%s\" hooked\n", i, pMapping[i].path); - dxw.InitTarget(&pMapping[i]); HookInit(&pMapping[i],NULL); } break; diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index f2948802df84eb60754c40ac1f1485541d414ec5..f6042ca626a1d04bad14ada29d98ea786262caac 100644 GIT binary patch delta 5773 zcmai&30PKD8pqH1HV{79L(jPi!bzM%O-Qc{y7Vm z2Ha;aTCPsyoCdbYQ>MGjZD#K-GSduen)pGkSw5`wHa-ny0%9zcSm7pwQ*7HU*(9^0A3FyfT zQLB<0iuAK}&-uuFwbmJdG5M`CQ&ko^tZ8U)waRf#R10#wwJf`|soFY+db%Y>z2Wjx zDXs-_hRX4d>K|#F#|LpYmIhaKIPH43%Wg5+(cR5bsvuWzdsBcMgEvB>AGk4oP&~R( zENaCR{c205mr0uSY3t8O6;qd}F0Bbr*&Dmn=WBMWC$u2d-cqkBTyg4fqh0kidCMR* zz9CaN8hlj#rlkkl{MA354%~jI3T&d*Yh2^J#-sI8asA20pgys`d#c;zb8x?jLj$2; zUL|VO%FW~T`U7*L&Jan1W_9sHpe8SZ=n7T$D>ZW#_54EXF)2^0+%+IWMz~ znpd}*^z4rua$%)i2ztyaFeuE|b(bOO(pCTCAn0 zD5r6?^`MiTe(JlqF*4;^_06ch#Z!F;-td0usZRD(cL$~V)&h1~sBxj5(Mr_kO(81e zz*rUF3eW=lWTaMMmxVVar%XsqOQ$iQG-<~!;|kc3+jnVq_{(TJ+PStyX&r-P>YyY{ zw)qe*H_>WC?hLKkE>njt!sM*QAA(9WVmi`bQS41dV27ys&F$)h9<8FaPFbd3y&z53 zCLq?$5ha+rOYv8M%W2jpLbMtPF%IE9nR*?rEP2s1%~Z$cP~~^P?j>-?29cunxJG*7 zKMa%2GH2Z(U)2+z^mCKdCPY@(m?f$wF!-5+GC}%W#0_Y9!Z?NgHSXwL4wLRU-6q{1 zVkl@}MnWI)u>8PmEZC3CD)GX}FBY0fFCS?kvq;#r%<7pHfh}it4>JnPdzo!Pj_x?n zp<=X4!(WP=Zb9qx&19>Ujr6!!OjOzTDMv4rO3TEe5MRCG-7oDnITdaN#?-uAZWGja zmS=wUUfvgI`SYWfALgg8mo?i_xe3|~wLuh>TcKKLAJm7g>_ol`+70c2+93tq2knK( zhqNE|{m=pE0q8-fQ(I}0BQrFZk3)|^6ckTDPeO;Gr=Z_Mw7onH(dI!DrhivfJ&B>R z??}xsxz8fMm7UrZi)^vojDe{ZTC-J_$ufF6t=B5sj_{3rt|@IN(>RR%v-gG?J_*kOi_rHpmMqhXz4DkS|0_!C=S_@`nPTKqv?r0tG`up%7>o6bgkw!=Vun z?Nm2G;ZOt=V-|Bf!4r+bNQgQUi+mI`8j6Ex`x*r* zNW17G9kZsv%7U_?94HscgYuyQXgX8~&47xaVyFZvg{U`WoL3;f1*)X-o|;1UA{fh{ z#n7El9kc|x3t9@%#r4RSLo1+_&?;y(P5gxg746Xa+`qtP-8OHgs(AO9dj_vG)8SA= zGXUw=%*bBI><(rW_lwzH!a0tof^165n1#WvXV$AzKgfR1Gow*DNi!n? z#!CYnyV&s@Giopa-r>j-kyDwDlW((M6*J=NVAG8^Fr)L;EZCGzGNWnn5;J!XLvlFB z@H{hW@IBb`kiXB2_TdZc*MGQJ0M>uF2*<`x*HMaqO(~XH4D1xxgwqW+8}k=ECW17{ zfcOYP5HefIjBdP&*%QoY06v2~9QhZ_DD+rk|{T?x8eVLz5U&9;|S!T5(1 ziJaIXD2iD;vof#*X2r}X=t`K)WEM-;!$$0jJDE{HE`v=!57aY50J}vM3Y6LyE`Ys- z*@FYvL(C2{qo{ulb|msHW*cBX#eV0R(Zl=&b`A1(m{G^Rfjx#cqbm$=2fP5AlGV=` zg%z-Euqg#Iqt$LGGY2!eNj&T*_iJKQkKsXJOAl zew;vp~jv0`6o7s70w76d|m|J|na5mtF?D#!18rDA8^eJUU1W}nf7zmr*VK6iL zl=^|M4QJ*Ai-1ijp4ocX3Ct#YSRQ_A0-VCIh#eP$6*HTQ+*s{!T4%Oq02A~J9j5eH ZRoW7ys^g`A* delta 1899 zcma)64NTQl6u;;H#RDFX$Ky$+FN6meL=nn|3?KM-g7|?z#)LUFX*f%nmOYX^+jx%g zky(ky`R`*Evqm2@6aFaF%IRWeHibaTRxNU~uMKPRaAeIZW6V9E`J`si8h$|>2^xX>)CSYMlAK6djBb=M zD3}(IN^4ViIx-o(*=6|IH;eJF>@s-{E!@NH(7U7u+xOTtS5C9&5*Prj@I``+aIrJf z_Q&LnDb9CU82f_2O=j|)q@QLuxwJ?DJIM~+v8yZ;=979SfPkwU`_1XfZGo{)0eyL^ z<+-#zkDJSHl9Z`Uf8kWm8 zvO-qRD%nm}gHy|kxO?;#4k(a9?wooYMdfl7X*RBfe@K#9&k@_+E7Q_eEC$VA91xWr zS~+3Xd}~%khO%T*rsLKE8_X8mQtZH+bxw?HnRm#eU_Oc0D5x`ac1&-Q(6QX2oqw_~ zO!YhptMP)@j_rMM;KH+4;?ZBX8+X?`gL(PuY+CEHH$`Kk72mk5pwhg5wr>+&@SVc$ zJu%qPyuJH5SBNkOT7F|c;4P1ZLP!sq^RruDw_N@Jls-?@2g>Wyw47Ea94ej zak7HP>#b^q8Lk~`jfAauv_2lIu5@4_<-wo8q$&tFvNr~|3_XChp)_?M32d7GwUtir z1WOtCgesd$rEzgp3w&B8D&Qu4O;Goq9gvh@*;WP3z2`1NzP|GL0pZj#@KdS3tP@1K ze{KBYN>JSo!T0DGtWm2ThQi+dG;qnsz7{$%!PGrc0#a_r_BgHlr!lj_meMIjy4M?J z3KWyNEa*CL<4BaW==Zz}I2dI=c?@loQ(( z!I(_*Gre^R{0I$~jL$+88z7mFuMDn&UlPd{ zl6ljJGB{qK31jbkooirTA|0ggk!%T23~n27#RgYNGye`mu?Go? z-Y0(L0kCLxQG8nn;}*5lKsZI?#E!89IA1%aH7SHr;3RbvL+w;JEp-i1l902a;&?d~T^YJ(F# zn3>zAhJ$AP4e@u1B$v|6-_y*7ev9-_x-kBnX7b&1gJ%i%{fEyd+f4-Cbnn=cyp`}9 zox#VLey%-uV89@4^kHZp#ddpfPixelFormat.dwRBitMask, lpddsd->ddpfPixelFormat.dwGBitMask, lpddsd->ddpfPixelFormat.dwBBitMask, lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask); OutTrace("\n"); } - i = (DWORD)lpdds % CAPSHASHSIZE; + i = ((DWORD)lpdds >> 3) % CAPSHASHSIZE; if(CapsHash[i].lpdds && (CapsHash[i].lpdds != lpdds)) { char sMsg[80]; sprintf(sMsg, "PushCaps CONFLICT %x:%x\n", lpdds, CapsHash[i].lpdds); @@ -329,8 +330,7 @@ static void PushCaps(LPDDSURFACEDESC2 lpddsd, LPDIRECTDRAWSURFACE lpdds) static int PopCaps(LPDDSURFACEDESC2 lpddsd, LPDIRECTDRAWSURFACE lpdds) { int i; - //DWORD Flags; - i = (DWORD)lpdds % 100; + i = ((DWORD)lpdds >> 3) % CAPSHASHSIZE; if(lpdds != CapsHash[i].lpdds){ char sMsg[80]; sprintf(sMsg, "PopCaps MISMATCH %x:%x\n", lpdds, CapsHash[i].lpdds); @@ -338,13 +338,11 @@ static int PopCaps(LPDDSURFACEDESC2 lpddsd, LPDIRECTDRAWSURFACE lpdds) if (IsAssertEnabled) MessageBox(0, sMsg, "PopCaps", MB_OK | MB_ICONEXCLAMATION); return FALSE; } - //Flags = lpddsd->ddpfPixelFormat.dwFlags; if (lpddsd->dwSize > (DWORD)&((LPDDSURFACEDESC2)NULL)->dwFlags) lpddsd->dwFlags = CapsHash[i].Flags; if (lpddsd->dwSize > (DWORD)&((LPDDSURFACEDESC2)NULL)->ddsCaps.dwCaps) lpddsd->ddsCaps.dwCaps = CapsHash[i].Caps; if ((lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->dwSize > (DWORD)&((LPDDSURFACEDESC2)NULL)->ddpfPixelFormat)) memcpy(&(lpddsd->ddpfPixelFormat), (void *)&CapsHash[i].PixelFormat, sizeof(DDPIXELFORMAT)); - //lpddsd->ddpfPixelFormat.dwFlags = Flags; - + if(IsDebug){ OutTrace("PopCaps: lpdds=%x dwFlags=%x dwCaps=%x", lpdds, lpddsd->dwFlags, lpddsd->ddsCaps.dwCaps); if (lpddsd->dwFlags & DDSD_PIXELFORMAT) OutTrace(" PF.dwFlags=%x PF.dwFourCC=%x PF.dwRGBBitCount=%x RGBA=(%x,%x,%x,%x)", @@ -1532,6 +1530,8 @@ HRESULT WINAPI extQueryInterfaceS(void *lpdds, REFIID riid, LPVOID *obp) DDSURFACEDESC2 ddsd; if (PopCaps(&ddsd, (LPDIRECTDRAWSURFACE)lpdds)) PushCaps(&ddsd, (LPDIRECTDRAWSURFACE)*obp); } + + if(lpdds == lpDDSBack) lpDDSBack = (LPDIRECTDRAWSURFACE)*obp; return 0; } @@ -3112,12 +3112,15 @@ HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) HRESULT WINAPI extReleaseDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR hdc) { HRESULT res; + BOOL IsPrim; POINT p = {0, 0}; RECT client; // this must cope with the action policy of GetDC. - OutTraceD("ReleaseDC: lpdds=%x hdc=%x\n",lpdds, hdc); + IsPrim=dxw.IsAPrimarySurface(lpdds); + OutTraceD("ReleaseDC: lpdss=%x%s hdc=%x\n",lpdds, IsPrim?"(PRIM)":"", hdc); + res=(*pReleaseDC)(lpdds,hdc); if (res==DD_OK) return res; @@ -3438,10 +3441,10 @@ HRESULT WINAPI extReleaseS(LPDIRECTDRAWSURFACE lpdds) // if primary, clean primay surface list if(IsPrim) dxw.UnmarkPrimarySurface(lpdds); // service surfaces cleanup - //if(lpdds==lpDDSBack) { // v2.02.24fixed: to be investigated - // OutTraceD("Release(S): Clearing lpDDSBack pointer\n"); - // lpDDSBack=NULL; - //} + if(lpdds==lpDDSBack) { + OutTraceD("Release(S): NOT Clearing lpDDSBack pointer\n"); + //lpDDSBack=NULL; + } if (dxw.dwFlags1 & EMULATESURFACE) { if(lpdds==lpDDSEmu_Prim) { OutTraceD("Release(S): Clearing lpDDSEmu_Prim pointer\n"); @@ -3782,9 +3785,9 @@ HRESULT WINAPI extGetSurfaceDesc(GetSurfaceDesc_Type pGetSurfaceDesc, LPDIRECTDR if (PopCaps((LPDDSURFACEDESC2)lpddsd, lpdds)) IsFixed=TRUE; if (lpddsd->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM; } - - lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE; - + + if(dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_3DDEVICE; + if(IsFixed) DumpSurfaceAttributes(lpddsd, "GetSurfaceDesc [FIXED]", __LINE__); return DD_OK; } diff --git a/host/KillProc.cpp b/host/KillProc.cpp new file mode 100644 index 0000000..d864119 --- /dev/null +++ b/host/KillProc.cpp @@ -0,0 +1,316 @@ +// Exam28.cpp +// 9/21/2000 (rk) +// Last modified: 3/10/2002 (RK) +// test the routine KILL_PROC_BY_NAME to terminate a process + +#include "stdafx.h" +#include +#include + +int KillProcByName(char *szToTerminate) +// Created: 6/23/2000 (RK) +// Last modified: 3/10/2002 (RK) +// Please report any problems or bugs to kochhar@physiology.wisc.edu +// The latest version of this routine can be found at: +// http://www.neurophys.wisc.edu/ravi/software/killproc/ +// Terminate the process "szToTerminate" if it is currently running +// This works for Win/95/98/ME and also Win/NT/2000/XP +// The process name is case-insensitive, i.e. "notepad.exe" and "NOTEPAD.EXE" +// will both work (for szToTerminate) +// Return codes are as follows: +// 0 = Process was successfully terminated +// 603 = Process was not currently running +// 604 = No permission to terminate process +// 605 = Unable to load PSAPI.DLL +// 602 = Unable to terminate process for some other reason +// 606 = Unable to identify system type +// 607 = Unsupported OS +// 632 = Invalid process name +// 700 = Unable to get procedure address from PSAPI.DLL +// 701 = Unable to get process list, EnumProcesses failed +// 702 = Unable to load KERNEL32.DLL +// 703 = Unable to get procedure address from KERNEL32.DLL +// 704 = CreateToolhelp32Snapshot failed +// Change history: +// modified 3/8/2002 - Borland-C compatible if BORLANDC is defined as +// suggested by Bob Christensen +// modified 3/10/2002 - Removed memory leaks as suggested by +// Jonathan Richard-Brochu (handles to Proc and Snapshot +// were not getting closed properly in some cases) +{ + BOOL bResult,bResultm; + DWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0; + DWORD iCbneeded,i,iFound=0; + char szName[MAX_PATH],szToTermUpper[MAX_PATH]; + HANDLE hProc,hSnapShot,hSnapShotm; + OSVERSIONINFO osvi; + HINSTANCE hInstLib; + int iLen,iLenP,indx; + HMODULE hMod; + PROCESSENTRY32 procentry; + MODULEENTRY32 modentry; + + // Transfer Process name into "szToTermUpper" and + // convert it to upper case + iLenP=strlen(szToTerminate); + if(iLenP<1 || iLenP>MAX_PATH) return 632; + for(indx=0;indx=VER_PLATFORM_WIN32_NT) + { + // Win/NT or 2000 or XP or greater + + // Load library and get the procedures explicitly. We do + // this so that we don't have to worry about modules using + // this code failing to load under Windows 9x, because + // it can't resolve references to the PSAPI.DLL. + hInstLib = LoadLibraryA("PSAPI.DLL"); + if(hInstLib == NULL) + return 605; + + // Get procedure addresses. + lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*)) + GetProcAddress( hInstLib, "EnumProcesses" ) ; + lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *, + DWORD, LPDWORD)) GetProcAddress( hInstLib, + "EnumProcessModules" ) ; + lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE, + LPTSTR, DWORD )) GetProcAddress( hInstLib, + "GetModuleBaseNameA" ) ; + + if(lpfEnumProcesses == NULL || + lpfEnumProcessModules == NULL || + lpfGetModuleBaseName == NULL) + { + FreeLibrary(hInstLib); + return 700; + } + + bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded); + if(!bResult) + { + // Unable to get process list, EnumProcesses failed + FreeLibrary(hInstLib); + return 701; + } + + // How many processes are there? + iNumProc=iCbneeded/sizeof(DWORD); + + // Get and match the name of each process + for(i=0;i DesktopRect.right) cs.x = DesktopRect.right - cs.cx; + if(cs.y+cs.cy > DesktopRect.bottom) cs.y = DesktopRect.bottom - cs.cy; + if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; return TRUE; diff --git a/host/Resource.h b/host/Resource.h index 4ce4f12..ff8da71 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -152,6 +152,7 @@ #define IDC_TIMESLIDER 1108 #define IDC_BLACKWHITE 1109 #define IDC_SAVECAPS 1110 +#define IDC_SINGLEPROCAFFINITY 1111 #define ID_MODIFY 32771 #define ID_DELETE 32772 #define ID_ADD 32773 @@ -192,6 +193,7 @@ #define ID_FILE_IMPORT 32820 #define ID_INDEX0_EXPORT 32821 #define ID_PEXPORT 32822 +#define ID_PKILL 32823 // Next default values for new objects // @@ -199,7 +201,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 156 -#define _APS_NEXT_COMMAND_VALUE 32823 +#define _APS_NEXT_COMMAND_VALUE 32825 #define _APS_NEXT_CONTROL_VALUE 1091 #define _APS_NEXT_SYMED_VALUE 101 #endif diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 5ca314a..a3b4a45 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -29,6 +29,7 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) CTargetDlg *cTarget = ((CTargetDlg *)(this->GetParent()->GetParent())); DDX_Check(pDX, IDC_FAKEVERSION, cTarget->m_FakeVersion); DDX_LBIndex(pDX, IDC_LISTFAKE, cTarget->m_FakeVersionId); + DDX_Check(pDX, IDC_SINGLEPROCAFFINITY, cTarget->m_SingleProcAffinity); DDX_Check(pDX, IDC_HANDLEEXCEPTIONS, cTarget->m_HandleExceptions); DDX_Check(pDX, IDC_LIMITRESOURCES, cTarget->m_LimitResources); DDX_Check(pDX, IDC_SUPPRESSIME, cTarget->m_SuppressIME); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index dcb1bb8..53f4136 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -39,6 +39,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_SuppressD3DExt = FALSE; m_SetCompatibility = FALSE; m_SaveCaps = FALSE; + m_SingleProcAffinity = FALSE; m_LimitResources = FALSE; m_UnNotify = FALSE; m_Windowize = TRUE; // default true !! diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 001bf6c..4d90060 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -105,6 +105,7 @@ public: BOOL m_SuppressIME; BOOL m_SetCompatibility; BOOL m_SaveCaps; + BOOL m_SingleProcAffinity; BOOL m_WireFrame; BOOL m_BlackWhite; BOOL m_SuppressD3DExt; diff --git a/host/dxwnd.ini b/host/dxwnd.ini deleted file mode 100644 index 74f0945..0000000 --- a/host/dxwnd.ini +++ /dev/null @@ -1,28 +0,0 @@ -[window] -posx=1104 -posy=310 -sizx=303 -sizy=138 -[target] -title0=speeddemo.exe -path0=D:\Games\Need For Speed Underground Demo\speeddemo.exe -module0= -opengllib0= -ver0=0 -flag0=0 -flagg0=134217728 -flagh0=-842150435 -flagi0=-842150451 -tflag0=0 -initx0=0 -inity0=0 -minx0=0 -miny0=0 -maxx0=0 -maxy0=0 -posx0=0 -posy0=0 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index b41bdaf835c7f582059328fac0bfa7316376fcdf..0e02844460b7bc006c066d1370336cdbcdaf174f 100644 GIT binary patch delta 1751 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 diff --git a/host/dxwndhost.vs2008.vcproj b/host/dxwndhost.vs2008.vcproj index 905ef70..55d6fb4 100644 --- a/host/dxwndhost.vs2008.vcproj +++ b/host/dxwndhost.vs2008.vcproj @@ -311,6 +311,10 @@ RelativePath=".\Inject.cpp" > + + diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 5b1fd4e..8827038 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -28,6 +28,7 @@ extern UINT m_StartToTray; extern UINT m_InitialState; extern char m_ConfigFileName[20+1]; extern BOOL Inject(DWORD, const char *); +extern int KillProcByName(char *); PRIVATEMAP *pTitles; // global ptr: get rid of it!! TARGETMAP *pTargets; // idem. @@ -49,6 +50,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView) ON_COMMAND(ID_ADD, OnAdd) ON_COMMAND(ID_MODIFY, OnModify) ON_COMMAND(ID_PEXPORT, OnExport) + ON_COMMAND(ID_PKILL, OnProcessKill) ON_COMMAND(ID_FILE_IMPORT, OnImport) ON_COMMAND(ID_DELETE, OnDelete) ON_COMMAND(ID_FILE_SORTPROGRAMSLIST, OnSort) @@ -525,6 +527,7 @@ void CDxwndhostView::OnModify() dlg.m_SuppressD3DExt = TargetMaps[i].flags3 & SUPPRESSD3DEXT ? 1 : 0; dlg.m_SetCompatibility = TargetMaps[i].flags2 & SETCOMPATIBILITY ? 1 : 0; dlg.m_SaveCaps = TargetMaps[i].flags3 & SAVECAPS ? 1 : 0; + dlg.m_SingleProcAffinity = TargetMaps[i].flags3 & SINGLEPROCAFFINITY ? 1 : 0; dlg.m_LimitResources = TargetMaps[i].flags2 & LIMITRESOURCES ? 1 : 0; dlg.m_SaveLoad = TargetMaps[i].flags & SAVELOAD ? 1 : 0; dlg.m_SlowDown = TargetMaps[i].flags & SLOWDOWN ? 1 : 0; @@ -646,6 +649,7 @@ void CDxwndhostView::OnModify() if(dlg.m_SuppressD3DExt) TargetMaps[i].flags3 |= SUPPRESSD3DEXT; if(dlg.m_SetCompatibility) TargetMaps[i].flags2 |= SETCOMPATIBILITY; if(dlg.m_SaveCaps) TargetMaps[i].flags3 |= SAVECAPS; + if(dlg.m_SingleProcAffinity) TargetMaps[i].flags3 |= SINGLEPROCAFFINITY; if(dlg.m_SaveLoad) TargetMaps[i].flags |= SAVELOAD; if(dlg.m_SlowDown) TargetMaps[i].flags |= SLOWDOWN; if(dlg.m_BlitFromBackBuffer) TargetMaps[i].flags |= BLITFROMBACKBUFFER; @@ -922,7 +926,6 @@ void CDxwndhostView::OnResume() { CTargetDlg dlg; HRESULT res; - HANDLE TargetHandle; char sMsg[128+1]; DXWNDSTATUS DxWndStatus; if ((GetHookStatus(&DxWndStatus) != DXW_RUNNING) || (DxWndStatus.hWnd==NULL)) { @@ -970,6 +973,34 @@ void CDxwndhostView::OnKill() RevertScreenChanges(&this->InitDevMode); } +void CDxwndhostView::OnProcessKill() +{ + int i; + POSITION pos; + CListCtrl& listctrl = GetListCtrl(); + char FilePath[MAX_PATH+1]; + char *lpProcName, *lpNext; + HRESULT res; + char sMsg[128+1]; + + if(!listctrl.GetSelectedCount()) return ; + pos = listctrl.GetFirstSelectedItemPosition(); + i = listctrl.GetNextSelectedItem(pos); + + strncpy(FilePath,TargetMaps[i].path,MAX_PATH); + sprintf_s(sMsg, 128, "Do you want to kill \nthe \"%s\" task?", TitleMaps[i].title); + res=MessageBoxEx(0, sMsg, "Warning", MB_YESNO | MB_ICONQUESTION, NULL); + if(res!=IDYES) return; + + lpProcName=FilePath; + while (lpNext=strchr(lpProcName,'\\')) lpProcName=lpNext+1; + + KillProcByName(lpProcName); + + ClipCursor(NULL); + RevertScreenChanges(&this->InitDevMode); +} + void CDxwndhostView::OnAdd() { // TODO: Please add a command handler code here. @@ -1037,6 +1068,7 @@ void CDxwndhostView::OnAdd() if(dlg.m_SuppressD3DExt) TargetMaps[i].flags3 |= SUPPRESSD3DEXT; if(dlg.m_SetCompatibility) TargetMaps[i].flags2 |= SETCOMPATIBILITY; if(dlg.m_SaveCaps) TargetMaps[i].flags3 |= SAVECAPS; + if(dlg.m_SingleProcAffinity) TargetMaps[i].flags3 |= SINGLEPROCAFFINITY; if(dlg.m_LimitResources) TargetMaps[i].flags2 |= LIMITRESOURCES; if(dlg.m_SaveLoad) TargetMaps[i].flags |= SAVELOAD; if(dlg.m_SlowDown) TargetMaps[i].flags |= SLOWDOWN; @@ -1390,6 +1422,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point) case ID_TASK_KILL: OnKill(); break; + case ID_PKILL: + OnProcessKill(); + break; case ID_TASK_PAUSE: OnPause(); break; @@ -1475,11 +1510,17 @@ DWORD WINAPI StartDebug(void *p) li->hFile, GetFileNameFromHandle(li->hFile)); res=MessageBoxEx(0, DebugMessage, "Continue stepping?", MB_YESNO | MB_ICONQUESTION, NULL); if(res!=IDYES) step=FALSE; - if(!Inject(pinfo.dwProcessId, path)){ - sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, path); - MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); - } + } + //li=(LOAD_DLL_DEBUG_INFO *)&debug_event.u; + //if(strstr(GetFileNameFromHandle(li->hFile), "ddraw.dll")){ + // res=MessageBoxEx(0, GetFileNameFromHandle(li->hFile), "ddraw.dll intercepted", MB_OK, NULL); + // GetFullPathName("dxwnd.dll", MAX_PATH, path, NULL); + // if(!Inject(pinfo.dwProcessId, path)){ + // sprintf(DebugMessage,"Injection error: pid=%x dll=%s", pinfo.dwProcessId, path); + // MessageBoxEx(0, DebugMessage, "Injection", MB_ICONEXCLAMATION, NULL); + // } + //} break; case UNLOAD_DLL_DEBUG_EVENT: SetWindowText(Ghwnd, "UNLOAD DLL"); diff --git a/host/dxwndhostView.h b/host/dxwndhostView.h index 346b784..c689f3d 100644 --- a/host/dxwndhostView.h +++ b/host/dxwndhostView.h @@ -67,6 +67,7 @@ protected: afx_msg void OnDelete(); afx_msg void OnExplore(); afx_msg void OnKill(); + afx_msg void OnProcessKill(); afx_msg void OnPause(); afx_msg void OnResume(); afx_msg void OnSort(); 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 d80fa58..0000000 --- a/release/dxwnd.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bce7a60e60155037cd12e0c1383f1078103923d7ba43a349e368606025bec75a -size 343040