为什么MFTEnumEx()会破坏堆栈?

时间:2016-01-29 09:30:02

标签: c++ winapi ms-media-foundation

在下面,您可以看到一些用于枚举可用多路复用器的虚拟代码。在我的系统上只有一个多路复用器(如预期的那样)。 当我调用MFTEnumEx()时,函数成功,但堆栈被破坏。这就是我添加64k缓冲区的原因。将在偏移量16处写入16个字节。我在两台具有相同结果的不同计算机上尝试了此代码(Windows 10)。有人可以解释一下吗?

    BYTE buff[ 65536 ];
    HRESULT hr;
    hr = CoInitialize( NULL );
    ATLASSERT( SUCCEEDED( hr ) );
    hr = MFStartup( MF_VERSION, MFSTARTUP_FULL );
    ATLASSERT( SUCCEEDED( hr ) );

    IMFActivate ** ppActivate = NULL;
    UINT numActivate = 0;

    hr = MFTEnumEx( MFT_CATEGORY_MULTIPLEXER,
                    MFT_ENUM_FLAG_SYNCMFT | MFT_ENUM_FLAG_ASYNCMFT | MFT_ENUM_FLAG_HARDWARE |
                    MFT_ENUM_FLAG_FIELDOFUSE | MFT_ENUM_FLAG_LOCALMFT | MFT_ENUM_FLAG_TRANSCODE_ONLY,
                    NULL,
                    NULL,
                    &ppActivate,
                    &numActivate );

0 个答案:

没有答案