我知道這已被問了很多次,但不幸的是我沒有找到解決我的問題,我正在使用urlmon.dll
從數組中找到MIME類型的字節,但我收到IIS進程崩潰w3wp.exe
「嘗試讀取或寫入受保護的內存」由urlmon.dll引起
試圖讀取或寫入受保護的內存。這通常表明其他內存已損壞。
代碼:
public static int MimeSampleSize = 256;
public static string DefaultMimeType = "application/octet-stream";
[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static uint FindMimeFromData(
uint pBC,
[MarshalAs(UnmanagedType.LPStr)] string pwzUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
uint cbSize,
[MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed,
uint dwMimeFlags,
out uint ppwzMimeOut,
uint dwReserverd
);
public static string GetMimeFromBytes(byte[] data)
{
try
{
uint mimeType;
FindMimeFromData(0, null, data, (uint)MimeSampleSize, null, 0, out mimeType, 0);
var mimePointer = new IntPtr(mimeType);
var mime = Marshal.PtrToStringUni(mimePointer); // <-- Crash happens here
Marshal.FreeCoTaskMem(mimePointer);
return mime ?? DefaultMimeType;
}
catch
{
return DefaultMimeType;
}
}
的崩潰發生對上以下行:
var mime = Marshal.PtrToStringUni(mimePointer);
我曾試圖取消,沒有運氣的 「Suppress JIT optimization on module load
」 選項。 也試圖將構建更改爲x86,而不是任何CPU沒有任何運氣。
注:我使用的是4.5框架,IIS 8
感謝您的解決方案。今天我不得不使用它,它完美地工作。 – Sheep 2015-02-18 17:02:07