Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThorvald Natvig <slicer@users.sourceforge.net>2010-01-25 00:18:56 +0300
committerThorvald Natvig <slicer@users.sourceforge.net>2010-01-25 00:19:11 +0300
commit036c6c33103f3c1afaf9f9ae7b9981f32dea794d (patch)
tree8ba64342e646e07ec8803722929a83b2a7efefad /overlay
parent59b0d54c35f7bef6d0891cf7eceed72549ae525d (diff)
Remove dependence on sm.sm from Win32 overlay
Diffstat (limited to 'overlay')
-rw-r--r--overlay/d3d10.cpp5
-rw-r--r--overlay/d3d9.cpp15
-rw-r--r--overlay/lib.cpp74
-rw-r--r--overlay/lib.h6
-rw-r--r--overlay/opengl.cpp2
5 files changed, 36 insertions, 66 deletions
diff --git a/overlay/d3d10.cpp b/overlay/d3d10.cpp
index 96efbb9d0..d99e43c08 100644
--- a/overlay/d3d10.cpp
+++ b/overlay/d3d10.cpp
@@ -33,7 +33,7 @@
#include <d3d10.h>
#include <d3dx10.h>
-DXGIData *dxgi;
+DXGIData *dxgi = NULL;
static bool bHooked = false;
static bool bChaining = false;
@@ -561,6 +561,9 @@ void checkDXGIHook(bool preonly) {
}
extern "C" __declspec(dllexport) void __cdecl PrepareDXGI() {
+ if (! dxgi)
+ return;
+
ods("Preparing static data for DXGI Injection");
HMODULE hD3D10 = LoadLibrary("D3D10.DLL");
diff --git a/overlay/d3d9.cpp b/overlay/d3d9.cpp
index 2910f9433..327a14462 100644
--- a/overlay/d3d9.cpp
+++ b/overlay/d3d9.cpp
@@ -31,7 +31,7 @@
#include "lib.h"
#include <d3d9.h>
-Direct3D9Data *d3dd;
+Direct3D9Data *d3dd = NULL;
typedef IDirect3D9*(WINAPI *pDirect3DCreate9)(UINT SDKVersion) ;
typedef HRESULT(WINAPI *pDirect3DCreate9Ex)(UINT SDKVersion, IDirect3D9Ex **ppD3D) ;
@@ -40,7 +40,7 @@ struct D3DTLVERTEX {
float x, y, z, rhw; // Position
float tu, tv; // Texture coordinates
};
-const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1;
+static const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1;
class DevState : protected Pipe {
public:
@@ -265,7 +265,7 @@ static HardHook hhSwapPresent;
static void doPresent(IDirect3DDevice9 *idd) {
DevState *ds = devMap[idd];
- if (ds && sm->bShow) {
+ if (ds) {
DWORD dwOldThread = ds->dwMyThread;
if (dwOldThread)
ods("doPresent from other thread");
@@ -278,7 +278,6 @@ static void doPresent(IDirect3DDevice9 *idd) {
ods("D3D9: doPresent Back %p RenderT %p",pTarget,pRenderTarget);
-
IDirect3DStateBlock9* pStateBlock = NULL;
idd->CreateStateBlock(D3DSBT_ALL, &pStateBlock);
pStateBlock->Capture();
@@ -288,11 +287,6 @@ static void doPresent(IDirect3DDevice9 *idd) {
if (pTarget != pRenderTarget)
idd->SetRenderTarget(0, pTarget);
- if (sm->bReset) {
- sm->bReset = false;
- ds->releaseData();
- }
-
idd->BeginScene();
ds->draw();
idd->EndScene();
@@ -620,6 +614,9 @@ void checkD3D9Hook(bool preonly) {
}
extern "C" __declspec(dllexport) void __cdecl PrepareD3D9() {
+ if (! d3dd)
+ return;
+
ods("Preparing static data for D3D9 Injection");
char buffb[2048];
diff --git a/overlay/lib.cpp b/overlay/lib.cpp
index 632f118d5..0e7a0d701 100644
--- a/overlay/lib.cpp
+++ b/overlay/lib.cpp
@@ -34,8 +34,6 @@ static HANDLE hMapObject = NULL;
static HANDLE hHookMutex = NULL;
static HHOOK hhookWnd = 0;
-SharedMem *sm = NULL;
-HANDLE hSharedMutex = NULL;
HMODULE hSelf = NULL;
static BOOL bMumble = FALSE;
static BOOL bDebug = FALSE;
@@ -45,6 +43,8 @@ static HardHook hhLoadW;
void *HardHook::pCode = NULL;
unsigned int HardHook::uiCode = 0;
+static SharedData *sd;
+
HardHook::HardHook() {
int i;
baseptr = NULL;
@@ -372,7 +372,7 @@ void __cdecl fods(const char *format, ...) {
void __cdecl ods(const char *format, ...) {
#ifndef DEBUG
- if (!bDebug && (!sm || ! sm->bDebug))
+ if (!bDebug)
return;
#endif
char buf[4096], *p = buf;
@@ -649,23 +649,21 @@ static LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) {
extern "C" __declspec(dllexport) void __cdecl RemoveHooks() {
DWORD dwWaitResult = WaitForSingleObject(hHookMutex, 1000L);
if (dwWaitResult == WAIT_OBJECT_0) {
- if (sm->bHooked) {
+ if (sd->bHooked) {
if (hhookWnd) {
UnhookWindowsHookEx(hhookWnd);
hhookWnd = NULL;
}
- sm->bHooked = false;
+ sd->bHooked = false;
}
ReleaseMutex(hHookMutex);
}
}
extern "C" __declspec(dllexport) void __cdecl InstallHooks() {
- sm->lastAppAlive = GetTickCount();
-
DWORD dwWaitResult = WaitForSingleObject(hHookMutex, 1000L);
if (dwWaitResult == WAIT_OBJECT_0) {
- if (! sm->bHooked) {
+ if (! sd->bHooked) {
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (char *) &InstallHooks, &hSelf);
if (hSelf == NULL) {
ods("Lib: Failed to find myself");
@@ -675,7 +673,7 @@ extern "C" __declspec(dllexport) void __cdecl InstallHooks() {
ods("Lib: Failed to insert WNDProc hook");
}
- sm->bHooked = true;
+ sd->bHooked = true;
}
ReleaseMutex(hHookMutex);
}
@@ -685,12 +683,7 @@ extern "C" __declspec(dllexport) unsigned int __cdecl GetOverlayMagicVersion() {
return OVERLAY_MAGIC_NUMBER;
}
-extern "C" __declspec(dllexport) SharedMem * __cdecl GetSharedMemory() {
- return sm;
-}
-
extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) {
-
char procname[1024+64];
GetModuleFileName(NULL, procname, 1024);
@@ -731,57 +724,36 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) {
ods("Lib: ProcAttach: %s", procname);
- hSharedMutex = CreateMutex(NULL, false, "MumbleSharedMutex");
hHookMutex = CreateMutex(NULL, false, "MumbleHookMutex");
- if ((hSharedMutex == NULL) || (hHookMutex == NULL)) {
+ if (hHookMutex == NULL) {
ods("Lib: CreateMutex failed");
return TRUE;
}
- DWORD dwWaitResult = WaitForSingleObject(hSharedMutex, 1000L);
- if (dwWaitResult != WAIT_OBJECT_0) {
- ods("Lib: WaitForMutex failed");
- return TRUE;
- }
-
- DWORD dwSharedSize = sizeof(SharedMem) + sizeof(Direct3D9Data) + sizeof(DXGIData);
+ DWORD dwSharedSize = sizeof(SharedData) + sizeof(Direct3D9Data) + sizeof(DXGIData);
- hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, dwSharedSize, "MumbleSharedMemory");
+ hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, dwSharedSize, "MumbleOverlayPrivate");
if (hMapObject == NULL) {
ods("Lib: CreateFileMapping failed");
- ReleaseMutex(hSharedMutex);
return TRUE;
}
bool bInit = (GetLastError() != ERROR_ALREADY_EXISTS);
- sm = (SharedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, dwSharedSize);
+ sd = (SharedData *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, dwSharedSize);
- if (sm == NULL) {
+ if (sd == NULL) {
ods("MapViewOfFile Failed");
- ReleaseMutex(hSharedMutex);
return TRUE;
}
- unsigned char *raw = (unsigned char *) sm;
- d3dd = (Direct3D9Data *)(raw + sizeof(SharedMem));
- dxgi = (DXGIData *)(raw + sizeof(SharedMem) + sizeof(Direct3D9Data));
-
- if (bInit) {
- memset(sm, 0, sizeof(SharedMem) + sizeof(Direct3D9Data) + sizeof(DXGIData));
- sm->lastAppAlive = 0;
- sm->bHooked = false;
- sm->bDebug = false;
- sm->bShow = true;
- sm->bReset = false;
- sm->fX = sm->fY = 1.0;
- sm->bTop = false;
- sm->bBottom = true;
- sm->bLeft = true;
- sm->bRight = false;
- sm->fFontSize = 72;
- }
- ReleaseMutex(hSharedMutex);
+ if (bInit)
+ memset(sd, 0, dwSharedSize);
+
+ unsigned char *raw = (unsigned char *) sd;
+ d3dd = (Direct3D9Data *)(raw + sizeof(SharedData));
+ dxgi = (DXGIData *)(raw + sizeof(SharedData) + sizeof(Direct3D9Data));
+
if (! bMumble) {
hhLoad.setup(reinterpret_cast<voidFunc>(LoadLibraryA), reinterpret_cast<voidFunc>(MyLoadLibrary));
@@ -801,19 +773,17 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) {
ods("Lib: ProcDetach: %s", procname);
hhLoad.restore(true);
hhLoadW.restore(true);
- if (sm)
- UnmapViewOfFile(sm);
+ if (sd)
+ UnmapViewOfFile(sd);
if (hMapObject)
CloseHandle(hMapObject);
- if (hSharedMutex)
- CloseHandle(hSharedMutex);
if (hHookMutex)
CloseHandle(hHookMutex);
}
break;
case DLL_THREAD_ATTACH: {
static bool bTriedHook = false;
- if (sm && ! bTriedHook && ! bMumble) {
+ if (sd && ! bTriedHook && ! bMumble) {
bTriedHook = true;
checkD3D9Hook();
checkDXGIHook();
diff --git a/overlay/lib.h b/overlay/lib.h
index 243f32213..5412469d8 100644
--- a/overlay/lib.h
+++ b/overlay/lib.h
@@ -87,6 +87,10 @@ struct DXGIData {
wchar_t wcD3D10FileName[2048];
};
+struct SharedData {
+ bool bHooked;
+};
+
struct FakeInterface {
typedef ULONG(FakeInterface::* voidMemberFunc)();
void **vtbl;
@@ -133,10 +137,8 @@ extern void checkDXGIHook(bool preonly = false);
extern void checkD3D9Hook(bool preonly = false);
extern void checkOpenGLHook();
-extern SharedMem *sm;
extern Direct3D9Data *d3dd;
extern DXGIData *dxgi;
-extern HANDLE hSharedMutex;
extern HMODULE hSelf;
extern unsigned int uiAudioCount;
extern bool bVideoHooked;
diff --git a/overlay/opengl.cpp b/overlay/opengl.cpp
index 33e3011f3..053001911 100644
--- a/overlay/opengl.cpp
+++ b/overlay/opengl.cpp
@@ -236,8 +236,6 @@ void Context::newTexture(unsigned int width, unsigned int height) {
}
void Context::draw(HDC hdc) {
- sm->bHooked = true;
-
// DEBUG
// sm->bDebug = true;