ActivateObject 方法返回 “E_ACCESSDENIED General access denied error." 错误的解决方法

从 win10 商店安装了官方的 HEVC 扩展后,有些电脑上通过代码无法获取 HEVC 解码器。代码如下:(解决方法在最后)

#include <cstdio>
#include <iostream>
#include <Windows.h>

#include <mfapi.h>
#include <mfidl.h>


int main()
{
	HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
	if (SUCCEEDED(hr))
	{
		hr = MFStartup(MF_VERSION);
		if (SUCCEEDED(hr))
		{
			MFT_REGISTER_TYPE_INFO info = { MFMediaType_Video, MFVideoFormat_HEVC };
			UINT32 count = 0;
			IMFActivate** ppActivate = NULL;
			hr = MFTEnumEx(MFT_CATEGORY_VIDEO_DECODER, MFT_ENUM_FLAG_ALL, &info, NULL, &ppActivate, &count);
                        //count不为0,说明系统已经安装 HEVC 扩展
			IMFTransform* dec = NULL;
                        //下面这行返回错误
			hr = ppActivate[0]->ActivateObject(__uuidof(IMFTransform), (void**)& dec);

			printf("%x", hr);


			for (UINT32 i = 0; i < count; i++)
			{
				ppActivate[i]->Release();
			}
			CoTaskMemFree(ppActivate);

			E_ACCESSDENIED General access 

			MFShutdown();
		}
		CoUninitialize();
	}
	int a;
	std::cin >> a;
	return 0;
}

问题原因其实有点奇怪,是因为装的这个扩展的 dll 文件 Users 没有执行权限。。只要找到这个 dll 文件,把 Users 的执行的权限勾上即可解决。此例中 HEVC 的解码器文件应该是"C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtensions_1.0.20033.0_x64__8wekyb3d8bbwe\x64\mfh265enc.dll",可以用 everything搜一下文件名就有了。权限可能直接改不了,需要先更改拥有者,具体步骤我就不说了,搜一下就有。

原创文章 59 获赞 41 访问量 10万+

猜你喜欢

转载自blog.csdn.net/rzdyzx/article/details/88677248