消费级显卡启用NvFBC

消费级显卡启用NvFBC

消费级显卡启用NvFBC

概述

NvFBC是英伟达提供的高效率截图功能,但根据其License,只能在部分专业级显卡中启用,消费级显卡例如gtx1080、rtx2080都是用不了的。

然而事实上nvidia官方的Geforce Experience或者Steam的远程串流模式,都使用了NvFBC。这些功能在消费级显卡上面跑得好好的。

因此利用一些手段是可以在消费级显卡上使用NvFBC的。

启用方式

GFE或者Steam,通过NvFBC的一个private data接口向NvFBC组件表明自己是友军,随后NvFBC的功能对其正常开放。另外还需要在注册表内添加相关项目。

privatedata的捕获方式可见https://github.com/CubicStone31/nvidia-patch/tree/master/win/nvfbcwrp

在此直接提供一个可用的private data,使用方式如下(关注最后三行即可)

        NvFBCCreateParams createParams;
        memset(&createParams, 0, sizeof(createParams));
        createParams.dwVersion = NVFBC_CREATE_PARAMS_VER;
        createParams.dwInterfaceType = type;
        createParams.pDevice = devicePtr;
        createParams.dwAdapterIdx = adapter;
        // private data to enable nvfbc on customer grade cards
        // fuck you nvidia
        DWORD default_magic[] = { 0xAEF57AC5, 0x401D1A39, 0x1B856BBE, 0x9ED0CEBA };
        createParams.pPrivateData = default_magic;
        createParams.dwPrivateDataSize = sizeof(default_magic);

注册表项目如下添加

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\nvlddmkm" /v NVFBCEnable /d 1 /t REG_DWORD /f

然后重启电脑。

NVFBC_ERROR_PROTECTED_CONTENT 问题

当系统中某些程序通过SetWindowDisplayAffinity设置自己不想被截图时,nvfbc的截图接口会返回NVFBC_ERROR_PROTECTED_CONTENT。

这个问题实际上是因为nvfbc库中的一个dll,会在运行时不断调用GetWindowDisplayAffinity,检查哪些窗口声明了反截图。因此Hook此API,返回api错误或者返回伪造的信息即可。

One thought on “消费级显卡启用NvFBC

  • https://github.com/keylase/nvidia-patch/tree/master/win/nvfbcwrp
    大佬,我在上面网址按照说明替换了这个两个dll,重启电脑之后NV的游戏内覆盖失效了,无法启动,但是系统依旧正常使用,我也无法判断NVFBC到底有没有生效。我不懂编程,只能看下简单使用方法和教程。网上找不到什么教程,要么就是太专业的教程,全是代码,完全看不懂。第一点 游戏内覆盖失效是否正常, 第二 如何验证NVFBC是否生效 ,请指教一下。

  • 发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注