windows11上DirectDraw7调用GetCaps函数获取DDCAPS_OVERLAY总是0

很久以前使用过directdraw,前段时间看到了一个有趣的使用overlay的程序,执行了一下竟然不可用。
于是我做了如下的测试:

有两台电脑,执行一个叫OverlayDrawTest的例子程序。
win11检测到没有overlay能力
win10检测到有overlay能力

提示:DXERROR(0x88760104, "DDERR_NOOVERLAYHW", "Operation could not be carried out because there is no overlay hardware present or available.")

即便是win10上,使用相同代码
一个是旧项目做减法获得的console项目OverlayDraw,可以使用overlayer
一个是重新创建的console项目Direct12XApiTest,不可用overlayer  

能做的配置全部检查了,包括:
    检查显卡型号,重新安装显卡驱动。
    使用dxdiag检查directx能力
    打开NVIDIA 控制面板,开启三重缓冲
    按快捷键Alt + Z的键,打开覆盖层
    打开服务管理,开启NVIDIA Geforce Overlay程序服务
    更换window sdk版本
    添加::CoInitialize(NULL);
    把DirectDraw7接口换成DirectDraw2接口,GetCaps依然没有overlay标记。
    
所有这些努力,都无法改变结果。

代码如下:

#include <windows.h>
#include <atlbase.h>	// ATL CComPtr

#include <ddraw.h>
#include <uuids.h>
#pragma comment (lib, "dxguid")
#pragma comment (lib, "DDraw.lib")

#include <memory>
#include <iostream>

int main()
{
	::CoInitialize(NULL);

	CComPtr<IDirectDraw7> directDraw_;
	HRESULT ddrval = DirectDrawCreateEx(0, (void**)&directDraw_, IID_IDirectDraw7, 0); //创建DirectCraw对象
	if (ddrval != DD_OK){
		MessageBox(NULL, L"Failure Creating DirectDraw Object",L"", MB_OK);
		return 0;
	}

	DDCAPS helcaps;
	ZeroMemory(&helcaps, sizeof(helcaps));
	helcaps.dwSize = sizeof(helcaps);

	DDCAPS ddcaps;
	ZeroMemory(&ddcaps, sizeof(ddcaps));
	ddcaps.dwSize = sizeof(ddcaps);

	ddrval = directDraw_->GetCaps(&ddcaps, &helcaps);
	ATLASSERT(SUCCEEDED(ddrval));
	ATLASSERT(ddrval == DD_OK);DDCAPS_NOHARDWARE
	if (ddrval != DD_OK)return 0;  //

	bool b = (ddcaps.dwCaps & DDCAPS_OVERLAY);//false  ddraw.h  Display hardware can overlay (caps_.dwCaps & 0x00000800l)
	bool b1 = (helcaps.dwCaps & DDCAPS_OVERLAY);
	printf("OverlayManager,after CreatePrimarySurface before CreateOverlaySurface dwCaps=%d	%d
", b, b1);


	std::cout << "Hello World!
";
	char xxx[256];
	std::cin >> xxx;

	::CoUninitialize();

	return 0;
}

拿到overlay真的这么难用吗?不知道错误到底出在哪里。