我正在制作一个 C++/winRT GUI 应用程序,该应用程序使用 Microsoft Media Foundation 的 IMFVirtualCamera 接口来创建虚拟相机设备。
虚拟相机创建:
winrt::check_hresult(MFCreateVirtualCamera(
MFVirtualCameraType_SoftwareCameraSource,
MFVirtualCameraLifetime_Session,
MFVirtualCameraAccess_AllUsers,
cameraName,
L"{7B89B92E-FE71-42D0-8A41-E137D06EA184}",
nullptr,
0,
pVirtualCamera.put()
));
启动虚拟相机的代码:
try {
winrt::check_hresult(pVirtualCamera->Start(nullptr));
}
catch (winrt::hresult_error const& ex)
{
std::stringstream ss;
ss << winrt::to_string(ex.message()) << " - " << ex.code();
LOG(LogLevel::ERR, ss.str());
}
Start() 函数实际上会抛出一个错误,指出
"Access is denied"
。我尝试以管理员身份运行 Visual Studio,并将 UAC Execution Level
中的 Properties > Linker > Manifest File
设置为 requireAdministrator
。问题依然存在。
正如 Simon 的评论中所指出的,将
access
函数中的 MFCreateVirtualCamera
参数切换为 MFVirtualCameraAccess_CurrentUser
可以解决“访问被拒绝”错误,因为需要较低的权限。