微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AccessViolationException 读取 Windows Server 2016 中的 MIME 类型

如何解决AccessViolationException 读取 Windows Server 2016 中的 MIME 类型

我的一些生产代码在从 Windows 2008R2 服务器转移到 Windows 2016 服务器时损坏了。该代码检查文件扩展名与文件中嵌入的 MIME 类型不匹配的文件

为了获得嵌入的 MIME 类型,我们使用了 FindMimeFromData function in Urlmon.dll。 (缓冲区是从正在扫描的文件中读取的内容。)

            public static string ScanBufferForMimeType(byte[] buffer)
            {
                uint mimeType = default(uint);
                FindMimeFromData(0,null,buffer,256,ref mimeType,0);
                IntPtr mimeTypePtr = new IntPtr(mimeType);
                string mime = Marshal.PtrToStringUni(mimeTypePtr); //AccessViolationException is thrown here.
                Marshal.FreeCoTaskMem(mimeTypePtr);  
                if (string.IsNullOrEmpty(mime))
                    mime = "application/octet-stream";
                return mime;
            }

我已验证 mimeType 设置为非零数字。 代码损坏的那个周末发生了两件事:

  1. 该应用程序已从 Windows Server 2008R2 计算机移至 Windows Server 2016。
  2. 我们从中下载文件的(外部控制的)网络服务已更新。

Windows 2016 安全是否以某种方式破坏了此功能?还有其他方法可以扫描嵌入的 MIME 类型吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。