Esempio n. 1
0
        private static void SetIOPriority(Stream stream, PRIORITY_HINT priority)
        {
            FileStream fileStream = (FileStream)stream;
            FieldInfo  field      = fileStream.GetType().GetField("_handle", BindingFlags.Instance | BindingFlags.NonPublic);
            SafeHandle fileHandle = (SafeHandle)field.GetValue(fileStream);

            FILE_IO_PRIORITY_HINT_INFO fi = new FILE_IO_PRIORITY_HINT_INFO();

            fi.PriorityHint = priority;

            bool reffed = false;
            bool f      = false;
            int  hrForLastWin32Error = 0;

            try
            {
                RuntimeHelpers.PrepareConstrainedRegions();
                try
                {
                }
                finally
                {
                    fileHandle.DangerousAddRef(ref reffed);
                }

                f = SetFileInformationByHandle(fileHandle.DangerousGetHandle(), FILE_INFO_BY_HANDLE_CLASS.FileIoPriorityHintInfo, ref fi, Marshal.SizeOf(fi));
                hrForLastWin32Error = Marshal.GetHRForLastWin32Error();
            }
            finally
            {
                if (reffed)
                {
                    fileHandle.DangerousRelease();
                }
            }

            if (!f)
            {
                Marshal.ThrowExceptionForHR(hrForLastWin32Error);
            }
        }
Esempio n. 2
0
 private static extern bool SetFileInformationByHandle(
     IntPtr hFile,
     FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
     [MarshalAs(UnmanagedType.Struct)] ref FILE_IO_PRIORITY_HINT_INFO lpFileInformation,
     int dwBufferSize);