mirror of
https://gitlab.com/hashborgir/plugy.git
synced 2025-10-13 08:24:24 -05:00
added original source from http://plugy.free.fr
This commit is contained in:
BIN
PlugYRun/PlugY.ico
Normal file
BIN
PlugYRun/PlugY.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
BIN
PlugYRun/PlugY32.ico
Normal file
BIN
PlugYRun/PlugY32.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
BIN
PlugYRun/PlugY48.bmp
Normal file
BIN
PlugYRun/PlugY48.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
BIN
PlugYRun/PlugY64.bmp
Normal file
BIN
PlugYRun/PlugY64.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
BIN
PlugYRun/PlugYRun.aps
Normal file
BIN
PlugYRun/PlugYRun.aps
Normal file
Binary file not shown.
658
PlugYRun/PlugYRun.cpp
Normal file
658
PlugYRun/PlugYRun.cpp
Normal file
@@ -0,0 +1,658 @@
|
||||
/*
|
||||
File created by Yohann NICOLAS.
|
||||
*/
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <Psapi.h>
|
||||
//#using <mscorlib.dll>
|
||||
//#using <System.dll>
|
||||
//using namespace EnvDTE;
|
||||
//using namespace System;
|
||||
//using namespace System::Diagnostics;
|
||||
//using namespace System::ComponentModel;
|
||||
//using namespace System.Diagnostics;
|
||||
/*
|
||||
0012C458 00000000 |ModuleFileName = NULL
|
||||
0012C45C 0012C908 |CommandLine = ""C:\Jeux\Diablo II\Game.exe""
|
||||
0012C460 00000000 |pProcessSecurity = NULL
|
||||
0012C464 00000000 |pThreadSecurity = NULL
|
||||
0012C468 00000000 |InheritHandles = FALSE
|
||||
0012C46C 04000022 |CreationFlags = DEBUG_ONLY_THIS_PROCESS|NORMAL_PRIORITY_CLASS|CREATE_DEFAULT_ERROR_MODE
|
||||
0012C470 00000000 |pEnvironment = NULL
|
||||
0012C474 0012DF94 |CurrentDir = "C:\Jeux\Diablo II\"
|
||||
0012C478 0012C6BC |pStartupInfo = 0012C6BC
|
||||
0012C47C 0012C5CC \pProcessInfo = 0012C5CC
|
||||
$ ==> >44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D...............
|
||||
$+10 >1A 13 03 00 08 00 00 00 14 13 04 00 00 00 00 00 .........
|
||||
$+20 >01 00 00 00 0C C7 12 00 34 87 D1 77 81 00 00 00 ....<2E>.4<EFBFBD><EFBFBD>w<EFBFBD>...
|
||||
$+30 >0A 00 00 00 00 00 00 00 00 00 00 00 89 F6 D4 77 ............<2E><><EFBFBD>w
|
||||
$+40 >CD AB BA DC 00 00 00 00 ͫ<><CDAB>....
|
||||
|
||||
//0xE9,0x1C,0xD1,0xA8,0x6F
|
||||
*/
|
||||
|
||||
#define SUBKEY "Software\\Blizzard Entertainment\\Diablo II"
|
||||
#define GAMEFILE "\\Game.exe "
|
||||
#define INIFILE "\\PlugY.ini"
|
||||
#define LAUNCHING "LAUNCHING"
|
||||
#define LOD_VERSION "LodVersionFolder"
|
||||
#define PARAM "Param"
|
||||
#define LIBRARY_NAME "Library"
|
||||
|
||||
BYTE loadDll[]={
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
|
||||
0x50, //PUSH EAX
|
||||
0x68,0x80,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
|
||||
0xFF,0x15,0x40,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.LoadLibraryA>] ; kernel32.LoadLibraryA
|
||||
0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x2F, //JE SHORT d2gfx.6FA7BE37
|
||||
0x50, //PUSH EAX
|
||||
0x68,0x90,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE10 ;Init String
|
||||
0x50, //PUSH EAX
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x04, //JE SHORT d2gfx.6FA7BDC1
|
||||
0x6A,0x00, //PUSH 0
|
||||
0xEB,0x13, //JMP SHORT d2gfx.6FA7BDC1
|
||||
0x68,0x10,0x27,0x00,0x00, //PUSH 2710 ;Init Ordinal(10000)
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAddress>] ; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x02, //JE SHORT d2gfx.6FA7BDC1
|
||||
0xFF,0xD0, //CALL EAX
|
||||
0x58, //POP EAX
|
||||
0x58, //POP EAX
|
||||
0xC2,0x04,0x00, //RETN 4
|
||||
0x59, //POP ECX
|
||||
0xB9,0x80,0xBE,0xA7,0x6F, //MOV ECX,d2gfx.6FA7BE80 ; ASCII "PlugY.dll"
|
||||
0x83,0x04,0x24,0x10, //ADD DWORD PTR SS:[ESP],10
|
||||
0xC2,0x04,0x00, //RETN 4
|
||||
0x00,0x00,0x00,0x00}; //HANDLE var;
|
||||
|
||||
|
||||
BYTE freeDll[]={
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrary>] ; kernel32.FreeLibrary
|
||||
0x50, //PUSH EAX
|
||||
0xA1,0xFC,0xEF,0xA8,0x6F, //MOV EAX,DWORD PTR DS:[6FA8EFFC]
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x2D, //JE SHORT d2gfx.6FA7BE74
|
||||
0x50, //PUSH EAX
|
||||
0x68,0xA0,0xBE,0xA7,0x6F, //PUSH d2gfx.6FA7BE20 ;Release String
|
||||
0x50, //PUSH EAX
|
||||
//0x33,0xC0, //XOR EAX,EAX
|
||||
//0xA3,0xFC,0xEF,0xA8,0x6F, //MOV DWORD PTR DS:[6FA8EFFC],EAX
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x75,0x13, //JNZ SHORT d2gfx.6FA7BDEF
|
||||
0x68,0x11,0x27,0x00,0x00, //PUSH 2711 ;Release Ordinal(10001)
|
||||
0xFF,0x74,0x24,0x04, //PUSH DWORD PTR SS:[ESP+4]
|
||||
0xFF,0x15,0x3C,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
|
||||
0x85,0xC0, //TEST EAX,EAX
|
||||
0x74,0x02, //JE SHORT d2gfx.6FA7BDEF
|
||||
0xFF,0xD0, //CALL EAX
|
||||
0xFF,0x15,0x48,0xC0,0xA7,0x6F, //CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; kernel32.FreeLibrary
|
||||
0x58, //POP EAX
|
||||
0xC2,0x04,0x00}; //RETN 4
|
||||
|
||||
|
||||
//LPCSTR dllName = "PlugY.dll";
|
||||
LPCSTR initFctName = "_Init@4";
|
||||
LPCSTR releaseFctName = "_Release@0";
|
||||
static bool versionXP;
|
||||
|
||||
typedef int (__stdcall* tDebugActiveProcessStop)(DWORD);
|
||||
tDebugActiveProcessStop debugActiveProcessStop;
|
||||
|
||||
|
||||
void assertion(LPCSTR msg)
|
||||
{
|
||||
MessageBox(0, msg, "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
bool installPlugY(HANDLE h, DWORD addr, char* libraryName, int isAdd)
|
||||
{
|
||||
BYTE buf[200];
|
||||
DWORD pos=0;
|
||||
SIZE_T nb=0;
|
||||
DWORD version;
|
||||
int res;
|
||||
|
||||
// Get Version and needed addresses.
|
||||
res = ReadProcessMemory(h,(LPVOID)(addr+0x110),&version,4,&nb);//0x80
|
||||
if (!res || (nb!=4)) assertion("Read to get current d2gfx version in memory failed");
|
||||
|
||||
DWORD loadCallerAddr = addr;
|
||||
DWORD freeCallerAddr = addr;
|
||||
DWORD loadLibraryAddr = addr;
|
||||
DWORD freeLibraryAddr = addr;
|
||||
DWORD getProcAddressAddr = addr;
|
||||
// GET_VERSION(D2gfx, 110, 000054EB, 00001000, 0000C000, 42E6C22A, 43028B19);//110
|
||||
switch (version)
|
||||
{
|
||||
case 0x000054EB://1.09b 0x00949FA8:
|
||||
case 0x00001000://1.09d 0x018866A8:
|
||||
loadCallerAddr += 0x389B;
|
||||
freeCallerAddr += 0x3A8C;
|
||||
loadLibraryAddr += 0xC03C;
|
||||
freeLibraryAddr += 0xC044;
|
||||
getProcAddressAddr += 0xC038;
|
||||
break;
|
||||
case 0x0000C000://1.10 0x401526B2
|
||||
loadCallerAddr += 0x3870;
|
||||
freeCallerAddr += 0x3A6D;
|
||||
loadLibraryAddr += 0xC040;
|
||||
freeLibraryAddr += 0xC048;
|
||||
getProcAddressAddr += 0xC03C;
|
||||
break;
|
||||
case 0x42E6C22A://1.11 0x575C8A5E
|
||||
loadCallerAddr += 0x8B23;
|
||||
freeCallerAddr += 0x8ACA;
|
||||
loadLibraryAddr += 0xD11C;
|
||||
freeLibraryAddr += 0xD12C;
|
||||
getProcAddressAddr += 0xD120;
|
||||
break;
|
||||
case 0x43028B19://1.11b
|
||||
loadCallerAddr += 0xB423;
|
||||
freeCallerAddr += 0xB3CA;
|
||||
loadLibraryAddr += 0xD11C;
|
||||
freeLibraryAddr += 0xD12C;
|
||||
getProcAddressAddr += 0xD120;
|
||||
break;
|
||||
case 0x0A07010B://1.12a
|
||||
loadCallerAddr += 0x8F63;
|
||||
freeCallerAddr += 0x8F0A;
|
||||
loadLibraryAddr += 0xD11C;
|
||||
freeLibraryAddr += 0xD12C;
|
||||
getProcAddressAddr += 0xD120;
|
||||
break;
|
||||
case 0x00000000://1.13c
|
||||
loadCallerAddr += 0xB423;
|
||||
freeCallerAddr += 0xB3CA;
|
||||
loadLibraryAddr += 0xD11C;
|
||||
freeLibraryAddr += 0xD12C;
|
||||
getProcAddressAddr += 0xD120;
|
||||
break;
|
||||
default:
|
||||
assertion("Wrong version of the library D2gfx.dll");
|
||||
}
|
||||
|
||||
//Verify if memory are ok.
|
||||
bool alreadyInstalled = false;
|
||||
res = ReadProcessMemory(h,(LPVOID)loadCallerAddr,buf,6,&nb);
|
||||
if (!res || nb<6 ) assertion("Read memory failed for checking.");
|
||||
if (buf[0]!=0xFF || buf[1]!=0x15 || *(DWORD*)(buf+2) != loadLibraryAddr)
|
||||
if (buf[0]!=0xE8 /*|| buf[1]!=0xD8 || buf[2]!=0x19*/ || buf[3]!=0x00 || buf[4]!=0x00 || buf[5]!=0x90)
|
||||
assertion("Checking library memory check failed.");
|
||||
else
|
||||
alreadyInstalled = true;
|
||||
res = ReadProcessMemory(h,(LPVOID)freeCallerAddr,buf,6,&nb);
|
||||
if (!res || nb<6 ) assertion("Read memory failed for checking.");
|
||||
if (buf[0]!=0xFF || buf[1]!=0x15 || *(DWORD*)(buf+2) != freeLibraryAddr)
|
||||
if (buf[0]!=0xE8 /*|| buf[1]!=0x75 || buf[2]!=0x1A*/ || buf[3]!=0x00 || buf[4]!=0x00 || buf[5]!=0x90)
|
||||
if (!alreadyInstalled)
|
||||
assertion("Checking library memory failed.");
|
||||
|
||||
if (alreadyInstalled)
|
||||
return true;
|
||||
|
||||
//Alloc custom memory data.
|
||||
DWORD memory = (DWORD)VirtualAllocEx(h,NULL,200,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
|
||||
DWORD oldProtect=-1;
|
||||
if (!memory)
|
||||
{
|
||||
// MessageBox(0, "no memory", "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
|
||||
memory = addr + 0xBE00 + isAdd*0x1000;
|
||||
if( !VirtualProtectEx(h,(LPVOID)memory, 200, PAGE_EXECUTE_READWRITE, &oldProtect) )
|
||||
assertion("Failed to get memory pool for PlugY loading.");
|
||||
}
|
||||
|
||||
//Make memory data
|
||||
int len;
|
||||
pos=0;
|
||||
|
||||
//Dll name
|
||||
DWORD dllNameAddr = memory+pos;
|
||||
len = strlen(libraryName)+1;
|
||||
res = WriteProcessMemory(h,(LPVOID)dllNameAddr,libraryName,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//init name
|
||||
DWORD initNameAddr = memory+pos;
|
||||
len = strlen(initFctName)+1;
|
||||
res = WriteProcessMemory(h,(LPVOID)initNameAddr,initFctName,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//release name
|
||||
DWORD releaseNameAddr = memory+pos;
|
||||
len = strlen(releaseFctName)+1;
|
||||
res = WriteProcessMemory(h,(LPVOID)releaseNameAddr,releaseFctName,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//load fct
|
||||
DWORD loadDllAddr = memory+pos;
|
||||
DWORD handleAddr = loadDllAddr + sizeof(loadDll) - 4;
|
||||
*(DWORD*)&loadDll[6] = loadLibraryAddr;
|
||||
*(DWORD*)&loadDll[12] = dllNameAddr;
|
||||
*(DWORD*)&loadDll[18] = loadLibraryAddr;
|
||||
*(DWORD*)&loadDll[23] = handleAddr;
|
||||
*(DWORD*)&loadDll[33] = initNameAddr;
|
||||
*(DWORD*)&loadDll[40] = getProcAddressAddr;
|
||||
*(DWORD*)&loadDll[63] = getProcAddressAddr;
|
||||
*(DWORD*)&loadDll[80] = dllNameAddr;
|
||||
len = sizeof(loadDll);
|
||||
res = WriteProcessMemory(h,(LPVOID)loadDllAddr,loadDll,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
//free fct
|
||||
DWORD freeDllAddr = memory+pos;
|
||||
*(DWORD*)&freeDll[6] = freeLibraryAddr;
|
||||
*(DWORD*)&freeDll[12] = handleAddr;
|
||||
*(DWORD*)&freeDll[22] = releaseNameAddr;
|
||||
// *(DWORD*)&freeDll[30] = handleAddr;
|
||||
*(DWORD*)&freeDll[36-7] = getProcAddressAddr;
|
||||
*(DWORD*)&freeDll[55-7] = getProcAddressAddr;
|
||||
*(DWORD*)&freeDll[67-7] = freeLibraryAddr;
|
||||
len = sizeof(freeDll);
|
||||
res = WriteProcessMemory(h,(LPVOID)freeDllAddr,freeDll,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write custom data in memory failed");
|
||||
pos += pos%16 ? len + 16 - pos%16 : len;
|
||||
|
||||
|
||||
//Patch load library
|
||||
buf[0]=0x90;
|
||||
buf[1]=0xE8;
|
||||
*(DWORD*)(buf+2) = (DWORD)loadDllAddr - (DWORD)loadCallerAddr-6;
|
||||
len = 6;
|
||||
res = WriteProcessMemory(h,(LPVOID)loadCallerAddr,buf,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write load library in memory failed");
|
||||
|
||||
//Patch free library
|
||||
*(DWORD*)(buf+2) = (DWORD)freeDllAddr - (DWORD)freeCallerAddr-6;
|
||||
res = WriteProcessMemory(h,(LPVOID)freeCallerAddr,buf,len,&nb);
|
||||
if (!res || (nb!=len)) assertion("Write free library in memory failed");
|
||||
|
||||
// sprintf(tmp,"mem = %08X (read = %d)",buf[0],nbRead);
|
||||
// MessageBox(0, tmp, "RunPlugY.\n", MB_OK|MB_ICONASTERISK);
|
||||
// if (oldProtect != -1)
|
||||
// VirtualProtectEx(h,(LPVOID)memory, 200, oldProtect, &oldProtect);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//###########################################################################################//
|
||||
|
||||
|
||||
/*bool copyLodVersionFiles()
|
||||
{
|
||||
BYTE folder[MAX_PATH];
|
||||
if (!GetPrivateProfileString(LAUNCHING,LOD_VERSION,"",folder,MAX_PATH,INI_FILE))
|
||||
return true;
|
||||
strcat(folder,"\\*");
|
||||
WIN32_FIND_DATA FindFileData;
|
||||
HANDLE hFind = FindFirstFile(folder,&FindFileData);
|
||||
if (hFind==INVALID_HANDLE_VALUE)
|
||||
return true;
|
||||
|
||||
do {
|
||||
// CopyFile();
|
||||
} while (FindNextFile(hFind,&FindFileData);
|
||||
|
||||
FindClose(hFind);
|
||||
return true;
|
||||
}*/
|
||||
|
||||
|
||||
#define BUF_SIZE 0x300
|
||||
bool isD2gfx(HANDLE hProcess, LPVOID dllAdr)
|
||||
{
|
||||
SIZE_T nbRead;
|
||||
BYTE buf[BUF_SIZE];
|
||||
ReadProcessMemory(hProcess,dllAdr,buf,BUF_SIZE, &nbRead);
|
||||
if (nbRead < 0x40) return false;
|
||||
int offsetPESignature = *(DWORD*)(buf+0x3C);
|
||||
if (offsetPESignature+38 >= BUF_SIZE) return false;
|
||||
DWORD baseOfCode = *(DWORD*)(buf+offsetPESignature + 0x34);
|
||||
if ( ( baseOfCode != 0x6FA80000) && (baseOfCode != 0x6FA70000)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool getWinReg(char* buf, DWORD bufsize)
|
||||
{
|
||||
HKEY hKey;
|
||||
DWORD type;
|
||||
int res;
|
||||
if (RegOpenKeyEx(HKEY_CURRENT_USER, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
|
||||
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize);
|
||||
RegCloseKey(hKey);
|
||||
if (res!=ERROR_SUCCESS) return false;
|
||||
} else if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, SUBKEY, 0, KEY_READ, &hKey) == ERROR_SUCCESS) {
|
||||
res = RegQueryValueEx(hKey,"InstallPath",NULL,&type,(LPBYTE)buf,&bufsize);
|
||||
RegCloseKey(hKey);
|
||||
if (res!=ERROR_SUCCESS) return false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
strcat(buf, GAMEFILE);
|
||||
if (GetFileAttributes(buf) == INVALID_FILE_ATTRIBUTES)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool launchNormal(char* command, char* currentDirectory)
|
||||
{
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
return success?true:false;
|
||||
}
|
||||
|
||||
bool launchGame98(char* command, char* currentDirectory, char* libraryName)
|
||||
{
|
||||
// MessageBox(0, "LAUNCH 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
BOOL success = CreateProcess(0, command, 0, 0, false, 0, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
if (!success) return false;
|
||||
DWORD ret;
|
||||
// MessageBox(0, "LAUNCH 98 while", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
Sleep(10);
|
||||
while (true)
|
||||
{
|
||||
SuspendThread(pi.hThread);// == (DWORD)-1)
|
||||
//MessageBox(0, "Thread not suspended", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
|
||||
if (!GetExitCodeProcess(pi.hProcess,&ret) || (ret != STILL_ACTIVE))
|
||||
exit(0);
|
||||
if (isD2gfx(pi.hProcess,(LPVOID)0x6FA80000))
|
||||
{
|
||||
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, 0x6FA80000, libraryName, 1);
|
||||
ResumeThread(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
if (isD2gfx(pi.hProcess,(LPVOID)0x6FA70000))
|
||||
{
|
||||
// MessageBox(0, "INSTALL 98", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, 0x6FA70000, libraryName, 0);
|
||||
ResumeThread(pi.hThread);
|
||||
return true;
|
||||
}
|
||||
ResumeThread(pi.hThread);
|
||||
// Sleep(10);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool launchGameXP(char* command, char* currentDirectory, char* libraryName)
|
||||
{
|
||||
// MessageBox(0, "LAUNCH XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
si.cb = sizeof(si);
|
||||
ZeroMemory( &pi, sizeof(pi) );
|
||||
BOOL success = CreateProcess(0, command, 0, 0, false, DEBUG_PROCESS, 0, currentDirectory, &si, &pi);//DEBUG_ONLY_THIS_PROCESS
|
||||
if (!success) return false;
|
||||
DEBUG_EVENT DebugEvent;
|
||||
DWORD status;
|
||||
// MessageBox(0, "START WAITING", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
while (WaitForDebugEvent(&DebugEvent,INFINITE))
|
||||
{
|
||||
status = DBG_CONTINUE;
|
||||
switch(DebugEvent.dwDebugEventCode)
|
||||
{
|
||||
case CREATE_THREAD_DEBUG_EVENT:
|
||||
CloseHandle(DebugEvent.u.CreateThread.hThread);
|
||||
break;
|
||||
case CREATE_PROCESS_DEBUG_EVENT:
|
||||
break;
|
||||
case EXIT_PROCESS_DEBUG_EVENT:
|
||||
// MessageBox(0, "EXIT", "PlugY", MB_OK|MB_ICONASTERISK);
|
||||
exit(0);
|
||||
case EXCEPTION_DEBUG_EVENT:
|
||||
if (DebugEvent.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_ACCESS_VIOLATION)
|
||||
MessageBox(0, "EXCEPTION_ACCESS_VIOLATION", "PlugY", MB_OK|MB_ICONASTERISK);
|
||||
// status = DBG_EXCEPTION_NOT_HANDLED;
|
||||
break;
|
||||
case LOAD_DLL_DEBUG_EVENT:
|
||||
// if (!GetModuleBaseName(pi.hProcess,(HMODULE)DebugEvent.u.LoadDll.lpBaseOfDll,buf,100))
|
||||
// MessageBox(0, "ERROR", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
// sprintf(buf,"%08X : %d",DebugEvent.u.LoadDll.lpBaseOfDll,GetLastError());
|
||||
// MessageBox(0, buf, "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
// if (!strcmp(buf,"d2gfx.dll"))
|
||||
// if ((LPVOID)GetModuleHandle("D2gfx.dll") == DebugEvent.u.LoadDll.lpBaseOfDll)//pi.hProcess,,buf,bufSize);
|
||||
if(isD2gfx(pi.hProcess, DebugEvent.u.LoadDll.lpBaseOfDll))
|
||||
{
|
||||
// MessageBox(0, "INSTALL XP", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
installPlugY(pi.hProcess, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll, libraryName, (DWORD)DebugEvent.u.LoadDll.lpBaseOfDll == 0x6FA8000);
|
||||
CloseHandle(DebugEvent.u.LoadDll.hFile);
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
debugActiveProcessStop(DebugEvent.dwProcessId);
|
||||
// MessageBox(0, "INSTALL XP end", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
return true;
|
||||
} else
|
||||
CloseHandle(DebugEvent.u.LoadDll.hFile);
|
||||
break;
|
||||
}
|
||||
ContinueDebugEvent(DebugEvent.dwProcessId,DebugEvent.dwThreadId,status);
|
||||
}
|
||||
MessageBox(0, "ERROR : PlugY isn't installed", "PlugYRun", MB_OK|MB_ICONASTERISK);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
char currrentDirectory[MAX_PATH];
|
||||
char iniFileName[MAX_PATH];
|
||||
char command[MAX_PATH+50];
|
||||
|
||||
// MessageBox(NULL,"START","PlugYRun",MB_OK);
|
||||
//Get Current Directory.
|
||||
if (!GetCurrentDirectory(MAX_PATH-1,currrentDirectory))
|
||||
assertion("Current directory not found");
|
||||
|
||||
int len = strlen(currrentDirectory);
|
||||
if (len && currrentDirectory[len-1] != '\\')
|
||||
{
|
||||
currrentDirectory[len+1]=NULL;
|
||||
currrentDirectory[len]='\\';
|
||||
}
|
||||
|
||||
//Get ini full path name.
|
||||
strcpy(iniFileName,currrentDirectory);
|
||||
strcat(iniFileName,INIFILE);
|
||||
|
||||
//Get current directory.
|
||||
strcpy(command,currrentDirectory);
|
||||
strcat(command,GAMEFILE);
|
||||
if (GetFileAttributes(command) == INVALID_FILE_ATTRIBUTES)
|
||||
if (!getWinReg(command, MAX_PATH+50))
|
||||
return 1;
|
||||
|
||||
//Add params.
|
||||
strcat(command,lpCmdLine);
|
||||
len = strlen(command);
|
||||
GetPrivateProfileString(LAUNCHING,PARAM,"",&command[len],MAX_PATH-len,iniFileName);
|
||||
|
||||
//copyLodVersionFiles();
|
||||
|
||||
char libraryName[50];
|
||||
if (!GetPrivateProfileString(LAUNCHING,LIBRARY_NAME,"",libraryName,50,iniFileName) || !libraryName[0])
|
||||
return !launchNormal(command, currrentDirectory);
|
||||
|
||||
// MessageBox(NULL,command,"PlugYRun",MB_OK);
|
||||
HMODULE module = GetModuleHandle("Kernel32.dll");
|
||||
if (module)
|
||||
{
|
||||
debugActiveProcessStop = (tDebugActiveProcessStop) GetProcAddress(module,"DebugActiveProcessStop");
|
||||
if (debugActiveProcessStop)
|
||||
return !launchGameXP(command, currrentDirectory, libraryName);
|
||||
}
|
||||
return !launchGame98(command, currrentDirectory, libraryName);
|
||||
}
|
||||
|
||||
|
||||
/* else if (GetVersion() & 0x80000000)
|
||||
{
|
||||
versionXP=false;
|
||||
} else {
|
||||
versionXP=true;
|
||||
}*/
|
||||
//HINSTANCE
|
||||
// CreateProcessInternalA
|
||||
// HMODULE HPlugY = LoadLibrary("C:\\Jeux\\Diablo II\\PlugY.dll");
|
||||
// if (!HPlugY) return 0;
|
||||
// DuplicateHandle
|
||||
// GetCurrentProcess();
|
||||
/* typedef void* (__stdcall* Tinit)(LPSTR IniName);
|
||||
Tinit init = (Tinit)GetProcAddress(HPlugY,"_Init@4");
|
||||
if (!init) return 0;
|
||||
init(0);*/
|
||||
/*
|
||||
6FC2BD50 /$ 81EC 08010000 SUB ESP,108
|
||||
6FC2BD56 |. 53 PUSH EBX
|
||||
6FC2BD57 |. 8A9C24 1801000>MOV BL,BYTE PTR SS:[ESP+118]
|
||||
6FC2BD5E |. F6C3 10 TEST BL,10
|
||||
6FC2BD61 |. 55 PUSH EBP
|
||||
6FC2BD62 |. 56 PUSH ESI
|
||||
6FC2BD63 |. C707 00000000 MOV DWORD PTR DS:[EDI],0
|
||||
6FC2BD69 |. C74424 0C 0000>MOV DWORD PTR SS:[ESP+C],0
|
||||
6FC2BD71 |. BE F3030000 MOV ESI,3F3
|
||||
6FC2BD76 |. C64424 10 00 MOV BYTE PTR SS:[ESP+10],0
|
||||
6FC2BD7B |. 75 25 JNZ SHORT storm.6FC2BDA2
|
||||
6FC2BD7D |. F6C3 02 TEST BL,2
|
||||
6FC2BD80 |. 68 04010000 PUSH 104
|
||||
6FC2BD85 |. 74 0C JE SHORT storm.6FC2BD93
|
||||
6FC2BD87 |. 68 146AC36F PUSH storm.6FC36A14 ; ASCII "Software\Battle.net\"
|
||||
6FC2BD8C |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
|
||||
6FC2BD90 |. 50 PUSH EAX
|
||||
6FC2BD91 |. EB 0A JMP SHORT storm.6FC2BD9D
|
||||
6FC2BD93 |> 68 F069C36F PUSH storm.6FC369F0 ; ASCII "Software\Blizzard Entertainment\"
|
||||
6FC2BD98 |. 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18]
|
||||
6FC2BD9C |. 51 PUSH ECX
|
||||
6FC2BD9D |> E8 EE07FEFF CALL storm.#501
|
||||
6FC2BDA2 |> 8B9424 1801000>MOV EDX,DWORD PTR SS:[ESP+118]
|
||||
6FC2BDA9 |. 68 04010000 PUSH 104
|
||||
6FC2BDAE |. 52 PUSH EDX
|
||||
6FC2BDAF |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
|
||||
6FC2BDB3 |. 50 PUSH EAX
|
||||
6FC2BDB4 |. E8 6705FEFF CALL storm.#503
|
||||
6FC2BDB9 |. F6C3 04 TEST BL,4
|
||||
6FC2BDBC |. 8B2D 1030C36F MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegQuer>; advapi32.RegQueryValueExA
|
||||
6FC2BDC2 |. 75 5D JNZ SHORT storm.6FC2BE21
|
||||
6FC2BDC4 |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
|
||||
6FC2BDC8 |. 51 PUSH ECX ; /pHandle
|
||||
6FC2BDC9 |. 68 19000200 PUSH 20019 ; |Access = KEY_READ
|
||||
6FC2BDCE |. 6A 00 PUSH 0 ; |Reserved = 0
|
||||
6FC2BDD0 |. 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C] ; |
|
||||
6FC2BDD4 |. 52 PUSH EDX ; |Subkey
|
||||
6FC2BDD5 |. 68 01000080 PUSH 80000001 ; |hKey = HKEY_CURRENT_USER
|
||||
6FC2BDDA |. FF15 0830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
|
||||
002281A4 80000001 |hKey = HKEY_CURRENT_USER
|
||||
002281A8 002281C8 |Subkey = "Software\Blizzard Entertainment\Diablo II"
|
||||
002281AC 00000000 |Reserved = 0
|
||||
002281B0 00020019 |Access = KEY_READ
|
||||
002281B4 002281C4 \pHandle = 002281C4
|
||||
|
||||
|
||||
6FC2BDE0 |. 8BF0 MOV ESI,EAX
|
||||
6FC2BDE2 |. 85F6 TEST ESI,ESI
|
||||
6FC2BDE4 |. 75 3B JNZ SHORT storm.6FC2BE21
|
||||
6FC2BDE6 |. 8B8C24 2801000>MOV ECX,DWORD PTR SS:[ESP+128]
|
||||
6FC2BDED |. 8B9424 2401000>MOV EDX,DWORD PTR SS:[ESP+124]
|
||||
6FC2BDF4 |. 8B8424 2C01000>MOV EAX,DWORD PTR SS:[ESP+12C]
|
||||
6FC2BDFB |. 57 PUSH EDI ; /pBufSize
|
||||
6FC2BDFC |. 51 PUSH ECX ; |Buffer
|
||||
6FC2BDFD |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14] ; |
|
||||
6FC2BE01 |. 52 PUSH EDX ; |pValueType
|
||||
6FC2BE02 |. 8907 MOV DWORD PTR DS:[EDI],EAX ; |
|
||||
6FC2BE04 |. 8B8424 2801000>MOV EAX,DWORD PTR SS:[ESP+128] ; |
|
||||
6FC2BE0B |. 56 PUSH ESI ; |Reserved
|
||||
6FC2BE0C |. 50 PUSH EAX ; |ValueName
|
||||
6FC2BE0D |. 51 PUSH ECX ; |hKey
|
||||
6FC2BE0E |. FFD5 CALL EBP ; \RegQueryValueExA
|
||||
002281A0 00000124 |hKey = 124
|
||||
002281A4 6FF77B88 |ValueName = "InstallPath"
|
||||
002281A8 00000000 |Reserved = NULL
|
||||
002281AC 002282FC |pValueType = 002282FC
|
||||
002281B0 00228320 |Buffer = 00228320
|
||||
002281B4 00228300 \pBufSize = 00228300
|
||||
|
||||
|
||||
6FC2BE10 |. 8B5424 0C MOV EDX,DWORD PTR SS:[ESP+C]
|
||||
6FC2BE14 |. 52 PUSH EDX ; /hKey
|
||||
6FC2BE15 |. 8BF0 MOV ESI,EAX ; |
|
||||
6FC2BE17 |. FF15 1830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
|
||||
002281B4 00000124 \hKey = 00000124 (window)
|
||||
|
||||
6FC2BE1D |. 85F6 TEST ESI,ESI
|
||||
6FC2BE1F |. 74 62 JE SHORT storm.6FC2BE83
|
||||
6FC2BE21 |> F6C3 01 TEST BL,1
|
||||
6FC2BE24 |. 75 59 JNZ SHORT storm.6FC2BE7F
|
||||
6FC2BE26 |. 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
|
||||
6FC2BE2A |. 50 PUSH EAX ; /pHandle
|
||||
6FC2BE2B |. 68 19000200 PUSH 20019 ; |Access = KEY_READ
|
||||
6FC2BE30 |. 6A 00 PUSH 0 ; |Reserved = 0
|
||||
6FC2BE32 |. 8D4C24 1C LEA ECX,DWORD PTR SS:[ESP+1C] ; |
|
||||
6FC2BE36 |. 51 PUSH ECX ; |Subkey
|
||||
6FC2BE37 |. 68 02000080 PUSH 80000002 ; |hKey = HKEY_LOCAL_MACHINE
|
||||
6FC2BE3C |. FF15 0830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegOpenKey>; \RegOpenKeyExA
|
||||
6FC2BE42 |. 8BF0 MOV ESI,EAX
|
||||
6FC2BE44 |. 85F6 TEST ESI,ESI
|
||||
6FC2BE46 |. 75 4C JNZ SHORT storm.6FC2BE94
|
||||
6FC2BE48 |. 8B8424 2801000>MOV EAX,DWORD PTR SS:[ESP+128]
|
||||
6FC2BE4F |. 8B8C24 2401000>MOV ECX,DWORD PTR SS:[ESP+124]
|
||||
6FC2BE56 |. 8B9424 2C01000>MOV EDX,DWORD PTR SS:[ESP+12C]
|
||||
6FC2BE5D |. 57 PUSH EDI
|
||||
6FC2BE5E |. 50 PUSH EAX
|
||||
6FC2BE5F |. 8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
|
||||
6FC2BE63 |. 51 PUSH ECX
|
||||
6FC2BE64 |. 8917 MOV DWORD PTR DS:[EDI],EDX
|
||||
6FC2BE66 |. 8B9424 2801000>MOV EDX,DWORD PTR SS:[ESP+128]
|
||||
6FC2BE6D |. 56 PUSH ESI
|
||||
6FC2BE6E |. 52 PUSH EDX
|
||||
6FC2BE6F |. 50 PUSH EAX
|
||||
6FC2BE70 |. FFD5 CALL EBP
|
||||
6FC2BE72 |. 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
|
||||
6FC2BE76 |. 51 PUSH ECX ; /hKey
|
||||
6FC2BE77 |. 8BF0 MOV ESI,EAX ; |
|
||||
6FC2BE79 |. FF15 1830C36F CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
|
||||
6FC2BE7F |> 85F6 TEST ESI,ESI
|
||||
6FC2BE81 |. 75 11 JNZ SHORT storm.6FC2BE94
|
||||
6FC2BE83 |> 5E POP ESI
|
||||
6FC2BE84 |. 5D POP EBP
|
||||
6FC2BE85 |. B8 01000000 MOV EAX,1
|
||||
6FC2BE8A |. 5B POP EBX
|
||||
6FC2BE8B |. 81C4 08010000 ADD ESP,108
|
||||
6FC2BE91 |. C2 1800 RETN 18
|
||||
6FC2BE94 |> 56 PUSH ESI ; /Error
|
||||
6FC2BE95 |. FF15 2832C36F CALL DWORD PTR DS:[<&KERNEL32.SetLastErr>; \SetLastError
|
||||
6FC2BE9B |. 5E POP ESI
|
||||
6FC2BE9C |. 5D POP EBP
|
||||
6FC2BE9D |. 33C0 XOR EAX,EAX
|
||||
6FC2BE9F |. 5B POP EBX
|
||||
6FC2BEA0 |. 81C4 08010000 ADD ESP,108
|
||||
6FC2BEA6 \. C2 1800 RETN 18
|
||||
*/
|
||||
|
||||
///////////////////////// END OF FILE ///////////////////////
|
120
PlugYRun/PlugYRun.rc
Normal file
120
PlugYRun/PlugYRun.rc
Normal file
@@ -0,0 +1,120 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// French (France) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,3,0
|
||||
PRODUCTVERSION 1,0,3,0
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040c04b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Yohann NICOLAS"
|
||||
VALUE "FileVersion", "1.03"
|
||||
VALUE "OriginalFilename", "PlugY.exe"
|
||||
VALUE "ProductName", "PlugY launcher."
|
||||
VALUE "ProductVersion", "1.03"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x40c, 1200
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON "PlugY.ico"
|
||||
#endif // French (France) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
19
PlugYRun/PlugYRun.sln
Normal file
19
PlugYRun/PlugYRun.sln
Normal file
@@ -0,0 +1,19 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PlugYRun", "PlugYRun.vcproj", "{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
BIN
PlugYRun/PlugYRun.suo
Normal file
BIN
PlugYRun/PlugYRun.suo
Normal file
Binary file not shown.
218
PlugYRun/PlugYRun.vcproj
Normal file
218
PlugYRun/PlugYRun.vcproj
Normal file
@@ -0,0 +1,218 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Name="PlugYRun"
|
||||
ProjectGUID="{119E844E-4DF8-409D-8B12-DC5CDDB5E37C}"
|
||||
RootNamespace="PlugYRun"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC70.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="false"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/PlugYRun.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories=""
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/PlugYRun.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="copy $(TargetPath) "C:\Jeux\Diablo II\Lod111b\"
copy $(TargetPath) "C:\www\"
copy $(TargetPath) "C:\Jeux\Diablo II\_RELEASE\PlugY.exe"
"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC70.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
OmitFramePointers="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_DEPRECATE;_CRT_ NONSTDC_NO_DEPRECATE"
|
||||
StringPooling="true"
|
||||
RuntimeLibrary="0"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="false"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/PlugYRun.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="copy $(TargetPath) "..\PlugYInstaller\PlugY.exe""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
|
||||
>
|
||||
<File
|
||||
RelativePath="PlugYRun.cpp"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc"
|
||||
>
|
||||
<File
|
||||
RelativePath="resource.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
|
||||
>
|
||||
<File
|
||||
RelativePath="PlugY.ico"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="PlugYRun.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
65
PlugYRun/PlugYRun.vcproj.ATHLON64.Yohann.user
Normal file
65
PlugYRun/PlugYRun.vcproj.ATHLON64.Yohann.user
Normal file
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioUserFile
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
ShowAllFiles="false"
|
||||
>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<DebugSettings
|
||||
Command="$(TargetPath)"
|
||||
WorkingDirectory=""
|
||||
CommandArguments=""
|
||||
Attach="false"
|
||||
DebuggerType="3"
|
||||
Remote="1"
|
||||
RemoteMachine="ATHLON64"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<DebugSettings
|
||||
Command="$(TargetPath)"
|
||||
WorkingDirectory=""
|
||||
CommandArguments=""
|
||||
Attach="false"
|
||||
DebuggerType="3"
|
||||
Remote="1"
|
||||
RemoteMachine="ATHLON64"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
16
PlugYRun/resource.h
Normal file
16
PlugYRun/resource.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by PlugYRun.rc
|
||||
//
|
||||
#define IDI_ICON1 107
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 108
|
||||
#define _APS_NEXT_COMMAND_VALUE 40003
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
Reference in New Issue
Block a user