mirror of
https://github.com/keylase/nvidia-patch.git
synced 2024-11-25 23:17:19 +00:00
win: fbc: implement wrapper for key injection
This commit is contained in:
parent
80b3f26f1d
commit
b5a8b02d75
32
win/nvfbcwrp/.gitignore
vendored
Normal file
32
win/nvfbcwrp/.gitignore
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# Prerequisites
|
||||||
|
*.d
|
||||||
|
|
||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
*.smod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
5
win/nvfbcwrp/framework.h
Normal file
5
win/nvfbcwrp/framework.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define WIN32_LEAN_AND_MEAN // Исключите редко используемые компоненты из заголовков Windows
|
||||||
|
// Файлы заголовков Windows
|
||||||
|
#include <windows.h>
|
37
win/nvfbcwrp/nvfbcbody.asm
Normal file
37
win/nvfbcwrp/nvfbcbody.asm
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
.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
|
||||||
|
|
||||||
|
.code
|
||||||
|
PROXY_NvFBC_Create proc
|
||||||
|
jmp qword ptr [ORIG_NvFBC_Create]
|
||||||
|
PROXY_NvFBC_Create endp
|
||||||
|
|
||||||
|
PROXY_NvFBC_Enable proc
|
||||||
|
jmp qword ptr [ORIG_NvFBC_Enable]
|
||||||
|
PROXY_NvFBC_Enable endp
|
||||||
|
|
||||||
|
PROXY_NvFBC_GetSDKVersion proc
|
||||||
|
jmp qword ptr [ORIG_NvFBC_GetSDKVersion]
|
||||||
|
PROXY_NvFBC_GetSDKVersion endp
|
||||||
|
|
||||||
|
PROXY_NvFBC_GetStatus proc
|
||||||
|
jmp qword ptr [ORIG_NvFBC_GetStatus]
|
||||||
|
PROXY_NvFBC_GetStatus endp
|
||||||
|
|
||||||
|
PROXY_NvFBC_GetStatusEx proc
|
||||||
|
jmp qword ptr [ORIG_NvFBC_GetStatusEx]
|
||||||
|
PROXY_NvFBC_GetStatusEx endp
|
||||||
|
|
||||||
|
PROXY_NvFBC_SetGlobalFlags proc
|
||||||
|
jmp qword ptr [ORIG_NvFBC_SetGlobalFlags]
|
||||||
|
PROXY_NvFBC_SetGlobalFlags endp
|
||||||
|
|
||||||
|
PROXY_NvOptimusEnablement proc
|
||||||
|
jmp qword ptr [ORIG_NvOptimusEnablement]
|
||||||
|
PROXY_NvOptimusEnablement endp
|
||||||
|
|
||||||
|
end
|
79
win/nvfbcwrp/nvfbcdefs.h
Normal file
79
win/nvfbcwrp/nvfbcdefs.h
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Magic code which is passed as pPrivateData and enables NvFBC to work on GeForce
|
||||||
|
int magic[] = { 0x0D7BC620, 0x4C17E142, 0x5E6B5997, 0x4B5A855B };
|
||||||
|
|
||||||
|
typedef unsigned long NvU32; /* 0 to 4294967295 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup NVFBC
|
||||||
|
* Macro to define the NVFBC API version corresponding to this distribution.
|
||||||
|
*/
|
||||||
|
#define NVFBC_DLL_VERSION 0x70
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup NVFBC
|
||||||
|
* Calling Convention
|
||||||
|
*/
|
||||||
|
#define NVFBCAPI __stdcall
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \ingroup NVFBC
|
||||||
|
* Macro to construct version numbers for parameter structs.
|
||||||
|
*/
|
||||||
|
#define NVFBC_STRUCT_VERSION(typeName, ver) (NvU32)(sizeof(typeName) | ((ver)<<16) | (NVFBC_DLL_VERSION << 24))
|
||||||
|
|
||||||
|
typedef enum _NVFBCRESULT
|
||||||
|
{
|
||||||
|
NVFBC_SUCCESS = 0,
|
||||||
|
NVFBC_ERROR_GENERIC = -1, /**< Unexpected failure in NVFBC. */
|
||||||
|
NVFBC_ERROR_INVALID_PARAM = -2, /**< One or more of the paramteres passed to NvFBC are invalid [This include NULL pointers]. */
|
||||||
|
NVFBC_ERROR_INVALIDATED_SESSION = -3, /**< NvFBC session is invalid. Client needs to recreate session. */
|
||||||
|
NVFBC_ERROR_PROTECTED_CONTENT = -4, /**< Protected content detected. Capture failed. */
|
||||||
|
NVFBC_ERROR_DRIVER_FAILURE = -5, /**< GPU driver returned failure to process NvFBC command. */
|
||||||
|
NVFBC_ERROR_CUDA_FAILURE = -6, /**< CUDA driver returned failure to process NvFBC command. */
|
||||||
|
NVFBC_ERROR_UNSUPPORTED = -7, /**< API Unsupported on this version of NvFBC. */
|
||||||
|
NVFBC_ERROR_HW_ENC_FAILURE = -8, /**< HW Encoder returned failure to process NVFBC command. */
|
||||||
|
NVFBC_ERROR_INCOMPATIBLE_DRIVER = -9, /**< NVFBC is not compatible with this version of the GPU driver. */
|
||||||
|
NVFBC_ERROR_UNSUPPORTED_PLATFORM = -10, /**< NVFBC is not supported on this platform. */
|
||||||
|
NVFBC_ERROR_OUT_OF_MEMORY = -11, /**< Failed to allocate memory. */
|
||||||
|
NVFBC_ERROR_INVALID_PTR = -12, /**< A NULL pointer was passed. */
|
||||||
|
NVFBC_ERROR_INCOMPATIBLE_VERSION = -13, /**< An API was called with a parameter struct that has an incompatible version. Check dwVersion field of paramter struct. */
|
||||||
|
NVFBC_ERROR_OPT_CAPTURE_FAILURE = -14, /**< Desktop Capture failed. */
|
||||||
|
NVFBC_ERROR_INSUFFICIENT_PRIVILEGES = -15, /**< User doesn't have appropriate previlages. */
|
||||||
|
NVFBC_ERROR_INVALID_CALL = -16, /**< NVFBC APIs called in wrong sequence. */
|
||||||
|
NVFBC_ERROR_SYSTEM_ERROR = -17, /**< Win32 error. */
|
||||||
|
NVFBC_ERROR_INVALID_TARGET = -18, /**< The target adapter idx can not be used for NVFBC capture. It may not correspond to an NVIDIA GPU, or may not be attached to desktop. */
|
||||||
|
NVFBC_ERROR_NVAPI_FAILURE = -19, /**< NvAPI Error */
|
||||||
|
NVFBC_ERROR_DYNAMIC_DISABLE = -20, /**< NvFBC is dynamically disabled. Cannot continue to capture */
|
||||||
|
NVFBC_ERROR_IPC_FAILURE = -21, /**< NVFBC encountered an error in state management */
|
||||||
|
NVFBC_ERROR_CURSOR_CAPTURE_FAILURE = -22, /**< Hardware cursor capture failed */
|
||||||
|
} NVFBCRESULT;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _NvFBCCreateParams
|
||||||
|
{
|
||||||
|
NvU32 dwVersion; /**< [in] Struct version. Set to NVFBC_CREATE_PARAMS_VER. */
|
||||||
|
NvU32 dwInterfaceType; /**< [in] ID of the NVFBC interface Type being requested. */
|
||||||
|
NvU32 dwMaxDisplayWidth; /**< [out] Max. display width allowed. */
|
||||||
|
NvU32 dwMaxDisplayHeight; /**< [out] Max. display height allowed. */
|
||||||
|
void* pDevice; /**< [in] Device pointer. */
|
||||||
|
void* pPrivateData; /**< [in] Private data [optional]. */
|
||||||
|
NvU32 dwPrivateDataSize; /**< [in] Size of private data. */
|
||||||
|
NvU32 dwInterfaceVersion; /**< [in] Version of the capture interface. */
|
||||||
|
void* pNvFBC; /**< [out] A pointer to the requested NVFBC object. */
|
||||||
|
NvU32 dwAdapterIdx; /**< [in] Adapter Ordinal corresponding to the display to be grabbed. If pDevice is set, this parameter is ignored. */
|
||||||
|
NvU32 dwNvFBCVersion; /**< [out] Indicates the highest NvFBC interface version supported by the loaded NVFBC library. */
|
||||||
|
void* cudaCtx; /**< [in] CUDA context created using cuD3D9CtxCreate with the D3D9 device passed as pDevice. Only used for NvFBCCuda interface.
|
||||||
|
It is mandatory to pass a valid D3D9 device if cudaCtx is passed. The call will fail otherwise.
|
||||||
|
Client must release NvFBCCuda object before destroying the cudaCtx. */
|
||||||
|
void* pPrivateData2; /**< [in] Private data [optional]. */
|
||||||
|
NvU32 dwPrivateData2Size; /**< [in] Size of private data. */
|
||||||
|
NvU32 dwReserved[55]; /**< [in] Reserved. Should be set to 0. */
|
||||||
|
void* pReserved[27]; /**< [in] Reserved. Should be set to NULL. */
|
||||||
|
}NvFBCCreateParams;
|
||||||
|
#define NVFBC_CREATE_PARAMS_VER_1 NVFBC_STRUCT_VERSION(NvFBCCreateParams, 1)
|
||||||
|
#define NVFBC_CREATE_PARAMS_VER_2 NVFBC_STRUCT_VERSION(NvFBCCreateParams, 2)
|
||||||
|
#define NVFBC_CREATE_PARAMS_VER NVFBC_CREATE_PARAMS_VER_2
|
||||||
|
|
||||||
|
typedef NVFBCRESULT(NVFBCAPI* NvFBC_CreateFunctionExType) (void* pCreateParams);
|
10
win/nvfbcwrp/nvfbcwrp.def
Normal file
10
win/nvfbcwrp/nvfbcwrp.def
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
LIBRARY nvfbcwrp
|
||||||
|
EXPORTS
|
||||||
|
NvFBC_Create=PROXY_NvFBC_Create @1
|
||||||
|
NvFBC_CreateEx=PROXY_NvFBC_CreateEx @2
|
||||||
|
NvFBC_Enable=PROXY_NvFBC_Enable @3
|
||||||
|
NvFBC_GetSDKVersion=PROXY_NvFBC_GetSDKVersion @4
|
||||||
|
NvFBC_GetStatus=PROXY_NvFBC_GetStatus @5
|
||||||
|
NvFBC_GetStatusEx=PROXY_NvFBC_GetStatusEx @6
|
||||||
|
NvFBC_SetGlobalFlags=PROXY_NvFBC_SetGlobalFlags @7
|
||||||
|
NvOptimusEnablement=PROXY_NvOptimusEnablement @8
|
31
win/nvfbcwrp/nvfbcwrp.sln
Normal file
31
win/nvfbcwrp/nvfbcwrp.sln
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio Version 16
|
||||||
|
VisualStudioVersion = 16.0.29519.87
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nvfbcwrp", "nvfbcwrp.vcxproj", "{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x64 = Debug|x64
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x64 = Release|x64
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x64.Build.0 = Release|x64
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}.Release|x86.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
SolutionGuid = {8A014521-63BA-4C47-A9A0-D97C80423FA4}
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
187
win/nvfbcwrp/nvfbcwrp.vcxproj
Normal file
187
win/nvfbcwrp/nvfbcwrp.vcxproj
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<VCProjectVersion>16.0</VCProjectVersion>
|
||||||
|
<ProjectGuid>{F2E7530B-BA35-4592-A0A9-CBE9CAD9A3CB}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>nvfbcwrp</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</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>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v142</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="Shared">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<ModuleDefinitionFile>nvfbcwrp.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
<ProjectReference>
|
||||||
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;NVFBCWRP_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<ConformanceMode>true</ConformanceMode>
|
||||||
|
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableUAC>false</EnableUAC>
|
||||||
|
<ModuleDefinitionFile>nvfbcwrp.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="framework.h" />
|
||||||
|
<ClInclude Include="nvfbcdefs.h" />
|
||||||
|
<ClInclude Include="pch.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="nvfbcwrp_main.cpp" />
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="nvfbcbody.asm" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="nvfbcwrp.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
46
win/nvfbcwrp/nvfbcwrp.vcxproj.filters
Normal file
46
win/nvfbcwrp/nvfbcwrp.vcxproj.filters
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Исходные файлы">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Файлы заголовков">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Файлы ресурсов">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="framework.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="pch.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="nvfbcdefs.h">
|
||||||
|
<Filter>Файлы заголовков</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="pch.cpp">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="nvfbcwrp_main.cpp">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<MASM Include="nvfbcbody.asm">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</MASM>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="nvfbcwrp.def">
|
||||||
|
<Filter>Исходные файлы</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
4
win/nvfbcwrp/nvfbcwrp.vcxproj.user
Normal file
4
win/nvfbcwrp/nvfbcwrp.vcxproj.user
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup />
|
||||||
|
</Project>
|
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);
|
||||||
|
}
|
||||||
|
}
|
5
win/nvfbcwrp/pch.cpp
Normal file
5
win/nvfbcwrp/pch.cpp
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// pch.cpp: файл исходного кода, соответствующий предварительно скомпилированному заголовочному файлу
|
||||||
|
|
||||||
|
#include "pch.h"
|
||||||
|
|
||||||
|
// При использовании предварительно скомпилированных заголовочных файлов необходим следующий файл исходного кода для выполнения сборки.
|
13
win/nvfbcwrp/pch.h
Normal file
13
win/nvfbcwrp/pch.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// pch.h: это предварительно скомпилированный заголовочный файл.
|
||||||
|
// Перечисленные ниже файлы компилируются только один раз, что ускоряет последующие сборки.
|
||||||
|
// Это также влияет на работу IntelliSense, включая многие функции просмотра и завершения кода.
|
||||||
|
// Однако изменение любого из приведенных здесь файлов между операциями сборки приведет к повторной компиляции всех(!) этих файлов.
|
||||||
|
// Не добавляйте сюда файлы, которые планируете часто изменять, так как в этом случае выигрыша в производительности не будет.
|
||||||
|
|
||||||
|
#ifndef PCH_H
|
||||||
|
#define PCH_H
|
||||||
|
|
||||||
|
// Добавьте сюда заголовочные файлы для предварительной компиляции
|
||||||
|
#include "framework.h"
|
||||||
|
|
||||||
|
#endif //PCH_H
|
Loading…
Reference in New Issue
Block a user