Commit Graph

63 Commits

Author SHA1 Message Date
Mikkel Krautz
114495e59f overlay: add runtime checks for offset overflow in D3D9.
See also mumble-voip/mumble#1924
2015-11-24 23:08:17 +01:00
Kissaki
70451a60ce Fix #1637 application crashes on Mumble exit
* When unloading the overlay DLL freeD3D9Hook was called *after* unloading the DLL. This is incorrect.
** For applications that actually use D3D and we inject into, the DLL is
never unloaded because we hold a refernce to it ourselves. So in this case,
the problematic code is never executed.
** When not actually injecting, the DLL will be unloaded, and then the
function freeD3D9Hook is called which is from that DLL.
** As we’re executing code in undefined space which previously held the
function, this may or may not crash.
* Remove the freeD3D9Hook function
** The function freeD3D9Hook just resets some fields to NULL and a flag
to false. As the DLL is unloaded anyway, these are never used again.
Hence, we can just remove it altogether (rather than just calling it
before unloading).
2015-05-16 11:48:01 +02:00
Kissaki
f789386b67 Overlay: Introduce D3D call result logging
* Introduce return code checking and logging on failure to D3D API calls.
This should make logging more elaborative and may point to issues when
debugging/looking for issues.
2014-02-16 22:24:30 +01:00
Kissaki
71e6ab1133 Overlay: Resolve d3d9 hook TODO. Fix naming.
* Introduce commented constatns for vtable offsets of create methods.
* Fix variable naming
* Resolve TODO in HookCreateEx:
HardHook checks if it was already set up (baseaddr != NULL), and if it was
it ignores further setup calls. Hence, we can safely do a best-effort of
hooking create9 again.
We currently expect the IDirect3D9 and IDirect3D9Ex objects to be the
same object instance.
** If we wanted to support separate objects we would query both for
IUnknown to compare addresses, and potentially create yet another hook to
myCreateDevice for the create9 on d3d9ex.
2013-11-26 23:38:18 +01:00
Kissaki
cd4e8350a5 Overlay: Changes as per PR-comments
* Use sizeof() rather then size constant where possible
2013-11-24 23:18:29 +01:00
Kissaki
dfbc1b9279 Overlay: Changes as per PR-comments
* Make cpp-local functions static so they are local file/translation unit
scope.
* Remove unused variables uiAudioCount and bVideoHooked
* Comment extern declarations, where there definitions are located.
* Improve constant naming JUMPOP_OFFSET => JMP_OP_SIZE.
* Remove extern declaration from method definitions.
* Adjust type declaration formatting to typical formatting.
* Use voidFunc typedef to pass around function address pointers.
** C++-style casts instead of C-style raw casts.
* Other minor formatting (/whitespace) adjustments
* Fix log text.
* Improve log text.
* Consistent, improved varnaming in d3d9.cpp on address calculation;
naming fn and base.
2013-11-24 19:20:24 +01:00
Kissaki
250835e83b Overlay: Rework Code.
* Separate DXGI logic from D3D10 into a separate file dxgi.cpp
* Structure code and logic, introduce additional functions
* Introduce constants
* Code commenting
* d3d9.cpp:
** Access devMap via std::find rather than operator[]
** Introduce class Stash to temporarily set variable value and revert on
destruction
** Move logic to function findOriginalDevice
** Use widestring for modulename (consistency)
** Implement Hook for Direct3DCreate9Ex
** Move function IsFnInModule to common lib.cpp/.h
* opengl.cpp:
** Add whitespace to format code
** Fix logging scope prefix
** Remove static global variable
2013-11-22 19:27:52 +01:00
Stefan Hacker
3af16511c8 Fix warning due to implicit BOOL to bool conversion. 2013-10-23 19:06:03 +02:00
Stefan Hacker
07e055fff1 Fix overlay regression that in some cases prevented injection into devices in myCreateDevice(/Ex)
Incorrect checking for element existence in the std::map using the operator[]
caused interfaces to be added to the device map that weren't actually injected
to yet.

To minimize code impact before DX11 branch merge replace correct existence
checks triggering the bug with checks on whether there's a valid handle
(!= NULL) present for that device in the map. This way the default constructed
(and hence NULL) elements caused by the use of the operator[] are harmless.

For the future we'll have to decide whether we accept additional elements for
"simpler" coding or use the "logically cleaner" style of using find and
iterators.
2013-10-23 18:44:37 +02:00
Kissaki
1919b2cd71 Overlay: Less obtrusive logging.
* Present, AddRef and Release calls are not useful most of the time.
They were only logged in DEBUG builds, but as these methods are called very often heavily degrades performance.
Add define-guards so when one actually wants to debug and see them he can enable them.
Now, (normal) debug builds will not have the heavy performance loss any more.
2013-06-23 02:11:32 +02:00
Kissaki
9d0de38af1 Overlay: Pass on procname buffer 2013-06-17 00:14:45 +02:00
Kissaki
e64fa103fb Overlay: Use string var instead of hardcoded strings 2013-06-17 00:03:49 +02:00
Kissaki
b07053241a Overlay: Fix address offset 2013-06-17 00:03:20 +02:00
Kissaki
1182fc26cb Overlay: Introduce hook for ResetEx. Hook PresentEx.
* For D3D9Ex
** Hook PresentEx
** Hook ResetEx
2013-06-17 00:02:39 +02:00
Kissaki
123486b429 Overlay: Move logic to function, Varnaming, msgfix
- Move logic to new function IsFnInModule.
2013-06-17 00:02:11 +02:00
Kissaki
dfc863841d Overlay: Add myPresentEx function 2013-06-16 23:57:03 +02:00
Kissaki
3865e8cab0 Overlay: Code comments 2013-06-16 23:56:45 +02:00
Kissaki
04b344dc42 Overlay: Var init, comment, error loggin. 2013-06-16 14:34:44 +02:00
Kissaki
f8f4b0fdec refacs: more elaborative Varnaming; codeformatting 2013-06-11 23:03:30 +02:00
Kissaki
cab4a3d852 Extend Windows Overlay code and clean it up.
Extend to handle library freeing.
Codeformatting and -cleanup, robustness, and make debugoutput more consistent.

* Indroduce hook for freeing loaded DLLs.
This separates logic between loading and freeing, leading to adjustments to
the recently introduced checks for freed DLLs.
* In HardHook::reset() do a clean and complete reset rather than minimal.
* Memvarinitialisation in HardHook
* Remove logically unused variable bPresenting in d3d9.cpp (always false)
* In d3d10.cpp prefix debugoutput with D3D10 consistently; no more DXGI
which is ambiguous with a d3d11 file that also uses DXGI.
* Consistently use ods instead of fods in the overlay files.
Not in HardHook yet, as that class is used in the Mumble client as well atm
* Fix forwarded return value types (LONG to ULONG)
* TODOs for hook-call-logic in multiple places
* Commenting, formatting and scope / order adjustments
* Introduce variables with constant values (replacing magic/undescriptive constants/numbers)
2013-06-11 23:02:14 +02:00
Kissaki
f4c54b24e3 Explicitly mark childmethods as virtual
* Mark the childmethods overwriting the virtual Pipe methods as virtual explicitly
(effectively already were)
2013-06-04 22:38:00 +02:00
Kissaki
46fc3ccfc1 Commenting, formatting. Remove obsolete/wrong comment. 2013-06-04 22:37:40 +02:00
Kissaki
bb47083b9f Reduce varscopes and improve debugtext. 2013-06-04 22:37:39 +02:00
Kissaki
33069f82de comments. more elaborative debugoutput, consistent prefixing. 2013-06-04 22:37:37 +02:00
Wesley W. Terpstra
10b2d00043 Prevent overlay from disappearing on D3D DLL reloading.
This is confirmed to fix the missing overlay in Guild Wars 2.

When D3D was used by a process thus loading the DLL, but then unloaded we did not inject on subsequent loading of the D3D DLL (in the same exe). Guild Wars 2 did un- and reload the DLL when switching from their launcher to the game.
This commit introduces HardHook::reset() and checks for inactive hardhooks for a newly loaded DLL.

The changes were submitted on sourceforge
https://sourceforge.net/p/mumble/bugs/909/#bf9e
2013-06-04 22:37:36 +02:00
Mikkel Krautz
46d659d415 overlay/d3d9: pass through IDirect3DDevice9 AddRef/Release methods to originals on Windows 8.
We were getting unbalanced AddRef/Releases on Direct3D9 apps running on Windows 8 that ran
fine on Windows 7.  Windows 8 seems to be doing somthing funky with the internal ref count
of IDirect3DDevice9.

For now, piggyback on the orignal ref count methods to be able to determine when to release
ourselves. And cross our fingers that we won't be getting useless ref counts from some other
overlay.

This is a band-aid solution until we find something better.
2012-11-16 01:05:50 +01:00
Kissaki
9bd10b0001 refacs; initialization, var-scope reduction, replace c-style casts, rm unused
* DBus.h, AudioOutputSpeech.cpp: initialize uninitialized members,
* d3d10.cpp: actually use assigned results for a dbg output
* lib.cpp, link.cpp: c-style to c++-style casts
* SpeexMark.cpp, ResampMark.cpp: rm unused var
* AGC.cpp, ResampMark.cpp:
rm unused var (ineffective return statement after prior return;
thus removing unused code - but someone check if sth. was missed there)
2012-10-24 19:24:33 +02:00
Kissaki
e5101f2251 Fix debug output for overlay chain notice
The debug outputs were placed after the return statements, rendering them useless.
Place them in front, so they are executed.
2012-09-23 14:08:37 +02:00
Kissaki
ea29bd2415 initialize member variable DevState::initRefCount in constructor 2012-09-23 14:08:06 +02:00
Kissaki
5fe6801b1b handle some cppcheck-found issues:
* uninitialized membervars,
* AudioOutput.cpp: fix delete on array to delete[]
* OSS.cpp: close file descriptor in false data case
* OverlayEditorScene.cpp: rm duplicate logic
* fix ifndef to match usage of declared variable
* member var initializations
* check for null (ds in d3d9 as some lines above),
* lower scope of var decl.,
* swap bufsize check and array dereference so check is before! deref,
* initialize member vars in constr.
2011-10-09 14:01:58 +02:00
Thorvald Natvig
f3437a6ba7 Update copyright year ranges of dev team. 2011-03-18 05:52:51 +01:00
Thorvald Natvig
e1b24d25f0 Clean up a few compiler warnings. 2011-01-20 18:25:15 -08:00
Benjamin Jemlich
c644952f4e Fix a crash in the overlay if a_ucTexture is NULL 2010-11-17 18:28:11 +01:00
Stefan Hacker
6380a88687 Transmit fps more often and represent them as float 2010-04-29 15:53:43 +02:00
Stefan Hacker
d8f1ac1115 Add an optional FPS counter to the overlay 2010-04-28 20:22:28 +02:00
Thorvald Natvig
2b6bad6a23 Flash in browser workaround 2010-03-10 18:03:04 +01:00
Thorvald Natvig
9fa00c3c1c Use premultiplied alpha textures 2010-03-01 03:14:31 +01:00
Thorvald Natvig
9bd867fb04 Fix overlay crash in Killing Floor when IDirect3DDevice9::Reset() fails 2010-02-05 19:11:23 +01:00
Thorvald Natvig
debc396d5b Indent, changelog, submodule and language update 2010-02-01 11:48:13 +01:00
Thorvald Natvig
28641d2100 Fix texture in D3D9 after reset 2010-01-30 21:25:21 +01:00
Thorvald Natvig
c16b9b8e8f Indent, changelog, submodule and language update 2010-01-26 15:54:13 +01:00
Thorvald Natvig
036c6c3310 Remove dependence on sm.sm from Win32 overlay 2010-01-24 22:19:11 +01:00
Thorvald Natvig
0baf7589ad D3D9, D3D10 and OpenGL/Win32 pipe-based overlay 2010-01-24 17:17:35 +01:00
Thorvald Natvig
16339bfc91 Update license to 2010 2010-01-05 08:49:22 +01:00
Thorvald Natvig
ad845f599e Fix typo in debug mode for d3d9ex 2009-08-24 17:20:05 +02:00
Thorvald Natvig
d2a64ee619 Start of DXGI Hook 2009-08-24 17:16:30 +02:00
Thorvald Natvig
865cdabaed Precache support for d3d9ex 2009-08-22 19:03:12 +02:00
Thorvald Natvig
ac0b3cf4d4 Indenting 2009-03-04 16:32:43 +01:00
Thorvald Natvig
e3f271b553 Indenting update
git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@1458 05730e5d-ab1b-0410-a4ac-84af385074fa
2009-01-19 23:09:19 +00:00
Thorvald Natvig
1faac996b2 Support simultaneous overlay in multiple applications.
git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@1443 05730e5d-ab1b-0410-a4ac-84af385074fa
2009-01-17 02:55:59 +00:00