你目前正处于脱机状态,正在等待 Internet 重新连接

DirectShow 筛选器无法连接到 Windows 8 和 Windows 7 SP1 中的 KB 2670838 上下游的筛选器

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 2841589
症状
您正在使用的 DirectShow 筛选器不会安装 KB 2670838 后连接到 Windows 8 和 Windows 7 SP1 上下游的筛选器。KB 2670838 在安装之前 Windows 7 SP1 上不发生此问题。
  • 在调用时CBasePin.ReceiveConnection 函数返回的值是 VFW_E_INVALIDMEDIATYPE (0x80040200)

原因
已在 Windows 8 的 DirectShow 基类添加新视频媒体类型的检查。这些检查可能拒绝错误或未知的媒体类型。这些检查还增加了以保护系统不受缓冲区溢出和缓冲区溢出的威胁。

KB 2670838 的 Windows 7 SP1 更新 DirectShow 子系统相同的更改。
解决方案
以下是建议,可以帮助确保您的代码通过的新的安全检查:

  • 请验证 AM_MEDIA_TYPE 无效值的结构。此结构描述媒体示例的格式。
  • 在调用时 CMediaType.AllocFormatBuffer 若要为格式块分配内存,请确保要传递的格式模块所需的正确大小。

    请注意: 此方法更新 cbFormatpbFormat 中的成员 AM_MEDIA_TYPE 结构。
  • 请验证为无效值的 BITMAPINFOHEADER 结构
    • 请确保 biSize 相当于 sizeof(BITMAPINFOHEADER)
    • 请验证 biSizeImage 对于错误值 (即 1> 0x40000000)
    • 请验证 biClrUsed 对于错误值 (即 1> 256)
更多信息
要重现此问题,使用 GraphEdit 的步骤如下:

GraphEdit 可在 Microsoft Windows 软件开发工具包 (SDK) (http://go.microsoft.com/fwlink/p/?linkid=62332).

第 1 步。转到Bin文件夹的 Windows SDK 并运行graphedt.exe

第 2 步。关系图菜单上,单击插入筛选器。对话框中将显示与您的系统,按类别筛选器上的筛选器的列表。

第 3 步。插入筛选器按钮找到您在相应的类别 (通常在DirectShow 筛选器类别下找到),然后单击下的筛选器。如果您的筛选器不是源筛选器,然后,请确保您已经为其添加所需的源筛选器。

第 4 步。插入所需的下游筛选器。

第 5 步。添加筛选器之后,您可以通过将鼠标从一个筛选器输出插针拖到另一个筛选器输入插针连接两个筛选器。如果针脚接受连接,GraphEdit 将绘制箭头连接它们。您与下游的筛选器的筛选器尝试此操作。您将看到的
  • 输入插针和输出插针将连接而无需在 Windows 7 SP1 上的任何错误。
  • 在 Windows 8 和 KB 2670838 安装与 Windows 7 SP1,GraphEdit 将显示错误消息。
本文中使用的术语:

缓冲区溢出:

当我们试着比已分配的缓冲区容纳更多数据时,就会发生缓冲区溢出。缓冲区溢出可以用于在系统中执行恶意代码。

缓冲区溢出:

一个缓冲区溢出实质上是由未选中,外部输入视为可信赖的数据引起的。将复制该数据,并使用运算 (例如 CopyMemory、 strcat、 strcpy 或 wcscpy act可以创建未预料到的结果,它允许系统损坏。

相关的链接:

CBasePin.ReceiveConnection 方法

http://msdn.microsoft.com/en-us/library/windows/desktop/dd368737 (v=vs.85).aspx

CMediaType 类
http://msdn.microsoft.com/en-us/library/windows/desktop/dd374727 (v=vs.85).aspx

CMediaType.AllocFormatBuffer 方法
http://msdn.microsoft.com/en-us/library/windows/desktop/dd374728 (v=vs.85).aspx

AM_MEDIA_TYPE 结构
http://msdn.microsoft.com/en-us/library/windows/desktop/dd373477 (v=vs.85).aspx

BITMAPINFOHEADER 结构
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183376 (v=vs.85).aspx

使用 GraphEdit
http://msdn.microsoft.com/en-us/library/windows/desktop/dd407274 (v=vs.85).aspx

DirectShow KB 2670838,ReceiveConnection, VFW_E_INVALIDMEDIATYPE 0x80040200,AllocFormatBuffer,BITMAPINFOHEADER

警告:本文已自动翻译

属性

文章 ID:2841589 - 上次审阅时间:04/24/2013 17:42:00 - 修订版本: 1.0

Windows 8, Windows 8 Enterprise, Windows 8 Pro, Windows 7 Enterprise, Windows 7 Ultimate, Windows 7 Professional, Windows 7 Home Premium, Windows 7 Home Basic, Windows 7 Service Pack 1

  • kbmt KB2841589 KbMtzh
反馈