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:
parent
7ecfc7bc68
commit
1989a198cf
4 changed files with 29 additions and 15 deletions
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue