mirror of
https://github.com/keylase/nvidia-patch.git
synced 2025-10-14 11:08:01 +00:00
win: fbc: implement wrapper for key injection
This commit is contained in:
65
win/nvfbcwrp/nvfbcwrp_main.cpp
Normal file
65
win/nvfbcwrp/nvfbcwrp_main.cpp
Normal file
@@ -0,0 +1,65 @@
|
||||
#include "pch.h"
|
||||
#include "nvfbcdefs.h"
|
||||
#include <windows.h>
|
||||
|
||||
HINSTANCE hLThis = 0;
|
||||
extern "C" {
|
||||
FARPROC ORIG_NvFBC_Create, ORIG_NvFBC_Enable, ORIG_NvFBC_GetSDKVersion,
|
||||
ORIG_NvFBC_GetStatus, ORIG_NvFBC_GetStatusEx, ORIG_NvFBC_SetGlobalFlags,
|
||||
ORIG_NvOptimusEnablement;
|
||||
}
|
||||
NvFBC_CreateFunctionExType ORIG_NvFBC_CreateEx;
|
||||
HINSTANCE hL = 0;
|
||||
|
||||
BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID)
|
||||
{
|
||||
if (reason == DLL_PROCESS_ATTACH)
|
||||
{
|
||||
//hLThis = hInst;
|
||||
hL = LoadLibrary(".\\NvFBC64_.dll");
|
||||
if (!hL) return false;
|
||||
ORIG_NvFBC_Create = GetProcAddress(hL, "NvFBC_Create");
|
||||
if (!ORIG_NvFBC_Create) return false;
|
||||
ORIG_NvFBC_CreateEx = (NvFBC_CreateFunctionExType)::GetProcAddress(hL, "NvFBC_CreateEx");
|
||||
if (!ORIG_NvFBC_CreateEx) return false;
|
||||
ORIG_NvFBC_Enable = GetProcAddress(hL, "NvFBC_Enable");
|
||||
if (!ORIG_NvFBC_Enable) return false;
|
||||
ORIG_NvFBC_GetSDKVersion = GetProcAddress(hL, "NvFBC_GetSDKVersion");
|
||||
if (!ORIG_NvFBC_GetSDKVersion) return false;
|
||||
ORIG_NvFBC_GetStatus = GetProcAddress(hL, "NvFBC_GetStatus");
|
||||
if (!ORIG_NvFBC_GetStatus) return false;
|
||||
ORIG_NvFBC_GetStatusEx = GetProcAddress(hL, "NvFBC_GetStatusEx");
|
||||
if (!ORIG_NvFBC_GetStatusEx) return false;
|
||||
ORIG_NvFBC_SetGlobalFlags = GetProcAddress(hL, "NvFBC_SetGlobalFlags");
|
||||
if (!ORIG_NvFBC_SetGlobalFlags) return false;
|
||||
ORIG_NvOptimusEnablement = GetProcAddress(hL, "NvOptimusEnablement");
|
||||
if (!ORIG_NvOptimusEnablement) return false;
|
||||
}
|
||||
if (reason == DLL_PROCESS_DETACH)
|
||||
{
|
||||
FreeLibrary(hL);
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
NVFBCRESULT NVFBCAPI PROXY_NvFBC_CreateEx(NvFBCCreateParams* params) {
|
||||
if (params->dwPrivateDataSize == 0 && params->pPrivateData == NULL) {
|
||||
//Backup old values
|
||||
void* bkp_privdata = params->pPrivateData;
|
||||
NvU32 bkp_privdatasize = params->dwPrivateDataSize;
|
||||
// Inject private keys into structure
|
||||
params->dwPrivateDataSize = sizeof(magic);
|
||||
params->pPrivateData = &magic;
|
||||
// Invoke original function
|
||||
NVFBCRESULT res = ORIG_NvFBC_CreateEx(params);
|
||||
// Rollback private data changes in params structure
|
||||
params->pPrivateData = bkp_privdata;
|
||||
params->dwPrivateDataSize = bkp_privdatasize;
|
||||
return res;
|
||||
}
|
||||
else {
|
||||
return ORIG_NvFBC_CreateEx((void*)params);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user