mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 20:35:43 +00:00
[NTOSKRNL]
NtQueryInformationFile: Implement the FileModeInformation case according to 'File System Internals' page 485. svn path=/trunk/; revision=66319
This commit is contained in:
parent
8e230698ba
commit
723079bd61
1 changed files with 37 additions and 0 deletions
|
@ -865,6 +865,35 @@ IopOpenLinkOrRenameTarget(OUT PHANDLE Handle,
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
ULONG
|
||||||
|
IopGetFileMode(IN PFILE_OBJECT FileObject)
|
||||||
|
{
|
||||||
|
ULONG Mode = 0;
|
||||||
|
|
||||||
|
if (FileObject->Flags & FO_WRITE_THROUGH)
|
||||||
|
Mode |= FILE_WRITE_THROUGH;
|
||||||
|
|
||||||
|
if (FileObject->Flags & FO_SEQUENTIAL_ONLY)
|
||||||
|
Mode |= FILE_SEQUENTIAL_ONLY;
|
||||||
|
|
||||||
|
if (FileObject->Flags & FO_NO_INTERMEDIATE_BUFFERING)
|
||||||
|
Mode |= FILE_NO_INTERMEDIATE_BUFFERING;
|
||||||
|
|
||||||
|
if (FileObject->Flags & FO_SYNCHRONOUS_IO)
|
||||||
|
{
|
||||||
|
if (FileObject->Flags & FO_ALERTABLE_IO)
|
||||||
|
Mode |= FILE_SYNCHRONOUS_IO_ALERT;
|
||||||
|
else
|
||||||
|
Mode |= FILE_SYNCHRONOUS_IO_NONALERT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (FileObject->Flags & FO_DELETE_ON_CLOSE)
|
||||||
|
Mode |= FILE_DELETE_ON_CLOSE;
|
||||||
|
|
||||||
|
return Mode;
|
||||||
|
}
|
||||||
|
|
||||||
/* PUBLIC FUNCTIONS **********************************************************/
|
/* PUBLIC FUNCTIONS **********************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1865,6 +1894,7 @@ NtQueryInformationFile(IN HANDLE FileHandle,
|
||||||
IO_STATUS_BLOCK KernelIosb;
|
IO_STATUS_BLOCK KernelIosb;
|
||||||
BOOLEAN CallDriver = TRUE;
|
BOOLEAN CallDriver = TRUE;
|
||||||
PFILE_ACCESS_INFORMATION AccessBuffer;
|
PFILE_ACCESS_INFORMATION AccessBuffer;
|
||||||
|
PFILE_MODE_INFORMATION ModeBuffer;
|
||||||
PFILE_ALIGNMENT_INFORMATION AlignmentBuffer;
|
PFILE_ALIGNMENT_INFORMATION AlignmentBuffer;
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
|
IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
|
||||||
|
@ -2055,6 +2085,13 @@ NtQueryInformationFile(IN HANDLE FileHandle,
|
||||||
Irp->IoStatus.Information = sizeof(FILE_ACCESS_INFORMATION);
|
Irp->IoStatus.Information = sizeof(FILE_ACCESS_INFORMATION);
|
||||||
CallDriver = FALSE;
|
CallDriver = FALSE;
|
||||||
}
|
}
|
||||||
|
else if (FileInformationClass == FileModeInformation)
|
||||||
|
{
|
||||||
|
ModeBuffer = Irp->AssociatedIrp.SystemBuffer;
|
||||||
|
ModeBuffer->Mode = IopGetFileMode(FileObject);
|
||||||
|
Irp->IoStatus.Information = sizeof(FILE_MODE_INFORMATION);
|
||||||
|
CallDriver = FALSE;
|
||||||
|
}
|
||||||
else if (FileInformationClass == FileAlignmentInformation)
|
else if (FileInformationClass == FileAlignmentInformation)
|
||||||
{
|
{
|
||||||
AlignmentBuffer = Irp->AssociatedIrp.SystemBuffer;
|
AlignmentBuffer = Irp->AssociatedIrp.SystemBuffer;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue