0
0
Fork 0
mirror of https://github.com/mumble-voip/mumble.git synced 2025-03-15 21:14:59 +00:00

Add overlay magic number and check memory size

This commit is contained in:
Thorvald Natvig 2009-10-02 16:24:45 +02:00
parent 7ecfc7bc68
commit 1989a198cf
4 changed files with 29 additions and 15 deletions

View file

@ -34,7 +34,7 @@ static HANDLE hMapObject = NULL;
static HANDLE hHookMutex = NULL;
static HHOOK hhookWnd = 0;
SharedMem *sm;
SharedMem *sm = NULL;
HANDLE hSharedMutex = NULL;
HMODULE hSelf = NULL;
static BOOL bMumble = FALSE;
@ -481,6 +481,10 @@ extern "C" __declspec(dllexport) void __cdecl InstallHooks() {
}
}
extern "C" __declspec(dllexport) unsigned int __cdecl GetOverlayMagicVersion() {
return OVERLAY_MAGIC_NUMBER;
}
extern "C" __declspec(dllexport) SharedMem * __cdecl GetSharedMemory() {
return sm;
}
@ -548,19 +552,20 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) {
bool bInit = (GetLastError() != ERROR_ALREADY_EXISTS);
sm = (SharedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, 0);
unsigned char *raw = (unsigned char *) sm;
d3dd = (Direct3D9Data *)(raw + sizeof(SharedMem));
dxgi = (DXGIData *)(raw + sizeof(SharedMem) + sizeof(Direct3D9Data));
sm = (SharedMem *) MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(SharedMem) + sizeof(Direct3D9Data) + sizeof(DXGIData));
if (sm == 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));
memset(sm, 0, sizeof(SharedMem) + sizeof(Direct3D9Data) + sizeof(DXGIData));
sm->lastAppAlive = 0;
sm->bHooked = false;
sm->bDebug = false;
@ -603,7 +608,7 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE, DWORD fdwReason, LPVOID) {
break;
case DLL_THREAD_ATTACH: {
static bool bTriedHook = false;
if (! bTriedHook && ! bMumble) {
if (sm && ! bTriedHook && ! bMumble) {
bTriedHook = true;
checkD3D9Hook();
checkDXGIHook();

View file

@ -31,6 +31,8 @@
#ifndef _INTERNAL_OVERLAY_H
#define _INTERNAL_OVERLAY_H
#define OVERLAY_MAGIC_NUMBER 0x00000005
#define TEXT_WIDTH 600
#define TEXT_HEIGHT 60
#define NUM_TEXTS 32

View file

@ -170,8 +170,7 @@ Overlay::Overlay() : QObject() {
if (! qlOverlay->load()) {
QMessageBox::critical(NULL, tr("Mumble"), tr("Failed to load overlay library. This means either that:\n"
"- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from\n"
"- you're on an OS earlier than WinXP SP2\n"
"- you do not have the June 2007 updated version of DX9.0c"), QMessageBox::Ok, QMessageBox::NoButton);
"- you're on an OS earlier than WinXP SP2"), QMessageBox::Ok, QMessageBox::NoButton);
qWarning("Overlay failure");
} else {
sm.resolve(qlOverlay);
@ -180,15 +179,15 @@ Overlay::Overlay() : QObject() {
sm.resolve(qlOverlay);
#endif
if (! sm.sm) {
QMessageBox::warning(NULL, tr("Mumble"), tr("Failed to initialize overlay memory. This usually means that the shared memory is "
"locked by the OS, and you need to reboot to release it."), QMessageBox::Ok, QMessageBox::NoButton);
} else {
#ifndef QT_NO_DEBUG
if (sm.sm)
sm.sm->bDebug = true;
#else
if (sm.sm)
sm.sm->bDebug = false;
#endif
if (sm.sm) {
sm.sm->version[0] = OVERLAY_VERSION_MAJ;
sm.sm->version[1] = OVERLAY_VERSION_MIN;
sm.sm->version[2] = OVERLAY_VERSION_PATCH;

View file

@ -36,6 +36,7 @@
typedef void (__cdecl *HooksProc)();
typedef SharedMem * (__cdecl *GetSharedMemProc)();
typedef unsigned int (__cdecl *GetOverlayMagicVersionProc)();
typedef void (__cdecl *PrepProc)();
typedef void (__cdecl *PrepDXGIProc)();
@ -56,6 +57,13 @@ SharedMemory::~SharedMemory() {
}
void SharedMemory::resolve(QLibrary *lib) {
GetOverlayMagicVersionProc gompvp = (GetOverlayMagicVersionProc)lib->resolve("GetOverlayMagicVersion");
if (! gompvp)
return;
if (gompvp() != OVERLAY_MAGIC_NUMBER)
return;
GetSharedMemProc gsmp = (GetSharedMemProc)lib->resolve("GetSharedMemory");
if (gsmp)
sm=gsmp();