コード例 #1
0
        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);
            }
        }