如何解决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 设置为非零数字。 代码损坏的那个周末发生了两件事:
- 该应用程序已从 Windows Server 2008R2 计算机移至 Windows Server 2016。
- 我们从中下载文件的(外部控制的)网络服务已更新。
Windows 2016 安全是否以某种方式破坏了此功能?还有其他方法可以扫描嵌入的 MIME 类型吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。