private void VerifyPriorityHint(SafeFileHandle fileHandle, Kernel32Types.PRIORITY_HINT priorityHint) { NTTypes.IO_STATUS_BLOCK statusBlock = new NTTypes.IO_STATUS_BLOCK(); NTTypes.FILE_IO_PRIORITY_HINT_INFORMATION ioPriorityHintInfo = new NTTypes.FILE_IO_PRIORITY_HINT_INFORMATION(); IntPtr ioPriorityHintInfoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(ioPriorityHintInfo)); IntPtr queryStatus = FabricFile.NtQueryInformationFile(fileHandle, ref statusBlock, ioPriorityHintInfoPtr, (uint)Marshal.SizeOf(ioPriorityHintInfo), NTTypes.FILE_INFORMATION_CLASS.FileIoPriorityHintInformation); bool isQuerySuccessful = (queryStatus == IntPtr.Zero) && (statusBlock.Status == 0); Assert.IsTrue(isQuerySuccessful); ioPriorityHintInfo = (NTTypes.FILE_IO_PRIORITY_HINT_INFORMATION)Marshal.PtrToStructure(ioPriorityHintInfoPtr, typeof(NTTypes.FILE_IO_PRIORITY_HINT_INFORMATION)); Assert.AreEqual <int>((int)ioPriorityHintInfo.PriorityHint, (int)priorityHint); }
internal static extern IntPtr NtQueryInformationFile( SafeHandle FileHandle, ref NTTypes.IO_STATUS_BLOCK IoStatusBlock, IntPtr pInfoBlock, uint length, NTTypes.FILE_INFORMATION_CLASS fileInformation);