private static string GetEncodedFilename(IntPtr processHandle, ref MEMORY_BASIC_INFORMATION memoryBasicInformation) { var memData = BuffersPool.Allocate(2048); var pFilename = memData.Address; try { int stringLength; stringLength = GetMappedFileName(processHandle, memoryBasicInformation.BaseAddress.ToPointer(), pFilename, 2048); if (stringLength == 0) { return(null); } var foundRelevantFilename = false; foreach (var item in RelevantFilesPostFixes) { fixed(byte *pItem = item) { if (stringLength < item.Length || Memory.Compare(pItem, pFilename + stringLength - item.Length, item.Length) != 0) { continue; } foundRelevantFilename = true; break; } } if (foundRelevantFilename == false) { return(null); } return(Encodings.Utf8.GetString(pFilename, stringLength)); } finally { BuffersPool.Return(memData); } }