NVDA Helper
In-process and lite high-speed utilities for NVDA
injection.cpp File Reference
#include <string>
#include <sstream>
#include <set>
#include <map>
#include <windows.h>
#include <shlwapi.h>
#include <sddl.h>
#include <common/log.h>
#include <common/apiHook.h>
#include <remote/nvdaController.h>
#include <remote/nvdaControllerInternal.h>
#include <common/lock.h>
#include <common/winIPCUtils.h>
#include "dllmain.h"
#include "nvdaHelperRemote.h"
#include "inProcess.h"
#include "rpcSrv.h"

Go to the source code of this file.

Macros

#define WIN32_LEAN_AND_MEAN
 

Typedefs

typedef HHOOK(WINAPI * SetWindowsHookEx_funcType) (int, HOOKPROC, HINSTANCE, DWORD)
 

Functions

void CALLBACK inproc_winEventCallback (HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, long objectID, long childID, DWORD threadID, DWORD time)
 
HHOOK WINAPI fake_SetWindowsHookExA (int IdHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId)
 
void killRunningWindowsHooks ()
 
DWORD WINAPI inprocMgrThreadFunc (LPVOID data)
 
bool initInprocManagerThreadIfNeeded ()
 
void CALLBACK injection_winEventCallback (HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, long objectID, long childID, DWORD threadID, DWORD time)
 
DWORD WINAPI outprocMgrThreadFunc (LPVOID data)
 
BOOL injection_initialize ()
 Initializes the out-of-process code for NVDAHelper.
 
BOOL injection_terminate ()
 Terminates nvdaHelperRemote, allowing it to uninject from any processes.
 
BOOL WINAPI DllMain (HINSTANCE hModule, DWORD reason, LPVOID lpReserved)
 

Variables

HINSTANCE dllHandle =NULL
 
wchar_t dllDirectory [MAX_PATH]
 
wchar_t desktopSpecificNamespace [64]
 
LockableObject inprocThreadsLock
 
HANDLE inprocMgrThreadHandle =NULL
 
HWINEVENTHOOK inprocWinEventHookID =0
 
map< long, HHOOK > callWndProcHooksByThread
 
map< long, HHOOK > getMessageHooksByThread
 
long tlsIndex_inThreadInjectionID =0
 
bool isProcessExiting =false
 
SetWindowsHookEx_funcType real_SetWindowsHookExA =NULL
 
HANDLE outprocMgrThreadHandle =NULL
 
DWORD outprocMgrThreadID =0
 
BOOL outprocInitialized =FALSE
 

Macro Definition Documentation

◆ WIN32_LEAN_AND_MEAN

#define WIN32_LEAN_AND_MEAN

Typedef Documentation

◆ SetWindowsHookEx_funcType

typedef HHOOK(WINAPI * SetWindowsHookEx_funcType) (int, HOOKPROC, HINSTANCE, DWORD)

Function Documentation

◆ inproc_winEventCallback()

◆ fake_SetWindowsHookExA()

HHOOK WINAPI fake_SetWindowsHookExA ( int IdHook,
HOOKPROC lpfn,
HINSTANCE hMod,
DWORD dwThreadId )

◆ killRunningWindowsHooks()

void killRunningWindowsHooks ( )

◆ inprocMgrThreadFunc()

◆ initInprocManagerThreadIfNeeded()

◆ injection_winEventCallback()

void CALLBACK injection_winEventCallback ( HWINEVENTHOOK hookID,
DWORD eventID,
HWND hwnd,
long objectID,
long childID,
DWORD threadID,
DWORD time )

◆ outprocMgrThreadFunc()

DWORD WINAPI outprocMgrThreadFunc ( LPVOID data)

◆ injection_initialize()

BOOL injection_initialize ( )

Initializes the out-of-process code for NVDAHelper.

Initializes nvdaHelperRemote, and allows it to inject in to processes.

References dllHandle, nhAssert, outprocInitialized, outprocMgrThreadFunc(), outprocMgrThreadHandle, and outprocMgrThreadID.

Referenced by WinMain().

◆ injection_terminate()

BOOL injection_terminate ( )

Terminates nvdaHelperRemote, allowing it to uninject from any processes.

References outprocInitialized, outprocMgrThreadHandle, and outprocMgrThreadID.

Referenced by WinMain().

◆ DllMain()

Variable Documentation

◆ dllHandle

◆ dllDirectory

wchar_t dllDirectory[MAX_PATH]

Referenced by DllMain(), and registerCOMProxy().

◆ desktopSpecificNamespace

wchar_t desktopSpecificNamespace[64]

Referenced by DllMain(), and startServer().

◆ inprocThreadsLock

◆ inprocMgrThreadHandle

◆ inprocWinEventHookID

HWINEVENTHOOK inprocWinEventHookID =0

◆ callWndProcHooksByThread

map<long,HHOOK> callWndProcHooksByThread

◆ getMessageHooksByThread

map<long,HHOOK> getMessageHooksByThread

◆ tlsIndex_inThreadInjectionID

long tlsIndex_inThreadInjectionID =0

Referenced by DllMain(), and inproc_winEventCallback().

◆ isProcessExiting

bool isProcessExiting =false

◆ real_SetWindowsHookExA

SetWindowsHookEx_funcType real_SetWindowsHookExA =NULL

◆ outprocMgrThreadHandle

HANDLE outprocMgrThreadHandle =NULL

◆ outprocMgrThreadID

DWORD outprocMgrThreadID =0

◆ outprocInitialized

BOOL outprocInitialized =FALSE