TMusic/Tool/Handle/SafeFileMappingHandle.cs

(完整代码) 1KB

using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Permissions;
using Microsoft.Win32.SafeHandles;

namespace TMusic.Tool
{
    internal sealed class SafeFileMappingHandle : SafeHandleZeroOrMinusOneIsInvalid
    {
        [SecurityCritical]
        internal SafeFileMappingHandle(IntPtr handle) : base(false)
        {
            SetHandle(handle);
        }

        [SecurityCritical, SecuritySafeCritical]
        internal SafeFileMappingHandle() : base(true)
        {
        }

        public override bool IsInvalid
        {
            [SecurityCritical, SecuritySafeCritical]
            get => handle == IntPtr.Zero;
        }

        [SecurityCritical, SecuritySafeCritical]
        protected override bool ReleaseHandle()
        {
            new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
            try
            {
                return CloseHandleNoThrow(new HandleRef(null, handle));
            }
            finally
            {
                CodeAccessPermission.RevertAssert();
            }
        }

        [SecurityCritical]
        public static bool CloseHandleNoThrow(HandleRef handle)
        {
            HandleCollector.Remove((IntPtr) handle, CommonHandles.Kernel);
            var result = InteropMethods.IntCloseHandle(handle);
            return result;
        }
    }
}

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。