diff --git a/win/nvfbcwrp/README.md b/win/nvfbcwrp/README.md index f5e305fdaa1953036c80726caca44a8b480bdbdc..ea1053f2567dd063548d64f5f83c44fa796b4245 100644 --- a/win/nvfbcwrp/README.md +++ b/win/nvfbcwrp/README.md @@ -5,8 +5,12 @@ Wrapper for `NvFBC64.dll` library which injects private keys into `NvFBC_CreateE ## Usage -1. Obtain `nvfbcwrp.dll` file. You may build it yourself with MSVS 2019 or download latest release [here](https://gist.github.com/Snawoot/1edfbda9b0e91c46b6cc3d5a0e1e55a4/raw/ee2e4647753a731ac7b333a0c9681dc07d3ee0a1/nvfbcwrp.dll). -2. Backup your `%WINDIR\system32\NvFBC64.dll` file. +1. Obtain `nvfbcwrp64.dll` and `nvfbcwrp32.dll` files. You may build them yourself with MSVS 2019 or download latest release here: [nvfbcwrp64.dll](https://gist.github.com/Snawoot/2d78c569b5ffb29080cf9bfca401adfa/raw/166c5e10f8301000c171d5f59cc2ae0b551cd1b3/nvfbcwrp64.dll), [nvfbcwrp32.dll](https://gist.github.com/Snawoot/2d78c569b5ffb29080cf9bfca401adfa/raw/166c5e10f8301000c171d5f59cc2ae0b551cd1b3/nvfbcwrp32.dll). +2. Backup your `%WINDIR\system32\NvFBC64.dll` and `%WINDIR\SysWOW64\NvFBC.dll` files. 3. Rename file `%WINDIR\system32\NvFBC64.dll` to `%WINDIR\system32\NvFBC64_.dll` -4. Put `nvfbcwrp.dll` to `%WINDIR\system32\NvFBC64.dll` (on the original place of renamed `NvFBC64.dll` library). -5. Restart any applications using this library. That's it. +4. Rename file `%WINDIR\SysWOW64\NvFBC.dll` to `%WINDIR\SysWOW64\NvFBC_.dll` +5. Rename `nvfbcwrp64.dll` and put it to `%WINDIR\system32\NvFBC64.dll` (on the original place of renamed `NvFBC64.dll` library). +6. Rename `nvfbcwrp32.dll` and put it to `%WINDIR\SysWOW64\NvFBC.dll` (on the original place of renamed `NvFBC.dll` library). +7. Restart any applications using this library. That's it. + +This procedure has to be repeated after any driver reinstall/update, so keep your copies of `nvfbcwrp64.dll` and `nvfbcwrp32.dll` files. diff --git a/win/nvfbcwrp/nvfbcbody.asm b/win/nvfbcwrp/nvfbcbody.asm index 69f0c476fbb47c3bbb32a351d0478767bc1d979b..3a20d91ce0fb85c5a864057b8d5d7950afb82070 100644 --- a/win/nvfbcwrp/nvfbcbody.asm +++ b/win/nvfbcwrp/nvfbcbody.asm @@ -1,37 +1,43 @@ +IFDEF RAX +ptrsz equ <qword> +ELSE +.486 +.model flat, c +ptrsz equ <dword> +ENDIF .data - -extern ORIG_NvFBC_Create : qword, ORIG_NvFBC_Enable : qword, - ORIG_NvFBC_GetSDKVersion : qword, ORIG_NvFBC_GetStatus : qword, - ORIG_NvFBC_GetStatusEx : qword, ORIG_NvFBC_SetGlobalFlags : qword, - ORIG_NvOptimusEnablement : qword +extern ORIG_NvFBC_Create : ptrsz, ORIG_NvFBC_Enable : ptrsz, + ORIG_NvFBC_GetSDKVersion : ptrsz, ORIG_NvFBC_GetStatus : ptrsz, + ORIG_NvFBC_GetStatusEx : ptrsz, ORIG_NvFBC_SetGlobalFlags : ptrsz, + ORIG_NvOptimusEnablement : ptrsz .code PROXY_NvFBC_Create proc -jmp qword ptr [ORIG_NvFBC_Create] +jmp ptrsz ptr [ORIG_NvFBC_Create] PROXY_NvFBC_Create endp PROXY_NvFBC_Enable proc -jmp qword ptr [ORIG_NvFBC_Enable] +jmp ptrsz ptr [ORIG_NvFBC_Enable] PROXY_NvFBC_Enable endp PROXY_NvFBC_GetSDKVersion proc -jmp qword ptr [ORIG_NvFBC_GetSDKVersion] +jmp ptrsz ptr [ORIG_NvFBC_GetSDKVersion] PROXY_NvFBC_GetSDKVersion endp PROXY_NvFBC_GetStatus proc -jmp qword ptr [ORIG_NvFBC_GetStatus] +jmp ptrsz ptr [ORIG_NvFBC_GetStatus] PROXY_NvFBC_GetStatus endp PROXY_NvFBC_GetStatusEx proc -jmp qword ptr [ORIG_NvFBC_GetStatusEx] +jmp ptrsz ptr [ORIG_NvFBC_GetStatusEx] PROXY_NvFBC_GetStatusEx endp PROXY_NvFBC_SetGlobalFlags proc -jmp qword ptr [ORIG_NvFBC_SetGlobalFlags] +jmp ptrsz ptr [ORIG_NvFBC_SetGlobalFlags] PROXY_NvFBC_SetGlobalFlags endp PROXY_NvOptimusEnablement proc -jmp qword ptr [ORIG_NvOptimusEnablement] +jmp ptrsz ptr [ORIG_NvOptimusEnablement] PROXY_NvOptimusEnablement endp end \ No newline at end of file diff --git a/win/nvfbcwrp/nvfbcwrp.vcxproj b/win/nvfbcwrp/nvfbcwrp.vcxproj index b3dd0daf836a906fc1ec5a885b5e6af5fa03fe8c..11372128c5b2bf145425d2f746dda7262cfe656b 100644 --- a/win/nvfbcwrp/nvfbcwrp.vcxproj +++ b/win/nvfbcwrp/nvfbcwrp.vcxproj @@ -30,14 +30,14 @@ <ConfigurationType>DynamicLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> - <CharacterSet>Unicode</CharacterSet> + <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v142</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> + <CharacterSet>MultiByte</CharacterSet> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>DynamicLibrary</ConfigurationType> @@ -97,6 +97,8 @@ <SubSystem>Windows</SubSystem> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableUAC>false</EnableUAC> + <ModuleDefinitionFile>nvfbcwrp.def</ModuleDefinitionFile> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> @@ -137,6 +139,8 @@ <OptimizeReferences>true</OptimizeReferences> <GenerateDebugInformation>true</GenerateDebugInformation> <EnableUAC>false</EnableUAC> + <ModuleDefinitionFile>nvfbcwrp.def</ModuleDefinitionFile> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> diff --git a/win/nvfbcwrp/nvfbcwrp_main.cpp b/win/nvfbcwrp/nvfbcwrp_main.cpp index 7e495f127e2f27c040f306a692a06a15fe27f11b..672f259b05a88ab7ce7eed404d9021c2ca83eb4c 100644 --- a/win/nvfbcwrp/nvfbcwrp_main.cpp +++ b/win/nvfbcwrp/nvfbcwrp_main.cpp @@ -2,6 +2,12 @@ #include "nvfbcdefs.h" #include <windows.h> +#ifdef _WIN64 +#define LIBNAME ".\\NvFBC64_.dll" +#else +#define LIBNAME ".\\NvFBC_.dll" +#endif + HINSTANCE hLThis = 0; extern "C" { FARPROC ORIG_NvFBC_Create, ORIG_NvFBC_Enable, ORIG_NvFBC_GetSDKVersion, @@ -16,7 +22,7 @@ BOOL WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID) if (reason == DLL_PROCESS_ATTACH) { //hLThis = hInst; - hL = LoadLibrary(".\\NvFBC64_.dll"); + hL = LoadLibrary(LIBNAME); if (!hL) return false; ORIG_NvFBC_Create = GetProcAddress(hL, "NvFBC_Create"); if (!ORIG_NvFBC_Create) return false;