CoInitializeSecurity() 和媒体基础编码器之间的奇怪连接

Weird connection between CoInitializeSecurity() and Media Foundation Encoders

此问题与this question有关。

取此代码:

CoInitializeSecurity(0, -1, 0, NULL, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_ANONYMOUS, 0, EOAC_NONE, NULL);
UINT32 count = 0;
IMFActivate** ppActivate = NULL;    // Array of activation objects.
MFTEnumEx(
    MFT_CATEGORY_VIDEO_ENCODER,
    MFT_ENUM_FLAG_ALL,
    0,      // Input type
    0,       // Output type
    &ppActivate,
    &count
);
CoTaskMemFree(ppActivate);

没有 CoInitializeSecurity,我的系统中计数为 9。当使用 RPC_C_IMP_LEVEL_ANONYMOUS 调用 CoInitializeSecurity 时,某些编解码器不再可用。

问题是我需要将安全设置为匿名才能加载远程插件。无论如何要覆盖这种行为?

如果不是,有没有办法在尝试使用其中一种 MF 编码器时逆转 CoInitializeSecurity 的影响?

MFTEnumEx 需要比 ANONYMOUS 级别更高的令牌。此问题的解决方法是您可以为匿名创建另一个线程并像往常一样在主线程中实现和使用默认级别。

关于这个问题的详细说明,您也可以参考下面的link:

Media Foundation API primitive styling of WinRT windows.mediaCodec