From: Pierre Schweitzer Date: Wed, 3 Oct 2018 08:21:39 +0000 (+0200) Subject: [NTOSKRNL] Use faster internal helper to query name X-Git-Tag: 0.4.12-dev~635 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=a1401a75772f489bb59c895b33e1f192ebde5fc8;hp=1348f62f20075eb51eb4a1b4f50a67f82cccc087 [NTOSKRNL] Use faster internal helper to query name This only applies if we're called from kernel mode with a synchronous file. --- diff --git a/ntoskrnl/include/internal/io.h b/ntoskrnl/include/internal/io.h index 29ecb808f91..95e3607bb56 100644 --- a/ntoskrnl/include/internal/io.h +++ b/ntoskrnl/include/internal/io.h @@ -1276,6 +1276,16 @@ IoComputeDesiredAccessFileObject( IN PACCESS_MASK DesiredAccess ); +NTSTATUS +NTAPI +IopGetFileInformation( + IN PFILE_OBJECT FileObject, + IN ULONG Length, + IN FILE_INFORMATION_CLASS FileInfoClass, + OUT PVOID Buffer, + OUT PULONG ReturnedLength +); + // // I/O Timer Routines // diff --git a/ntoskrnl/io/iomgr/file.c b/ntoskrnl/io/iomgr/file.c index 4cbdb640a1a..e877888c74d 100644 --- a/ntoskrnl/io/iomgr/file.c +++ b/ntoskrnl/io/iomgr/file.c @@ -1941,11 +1941,23 @@ IopQueryNameInternal(IN PVOID ObjectBody, FIELD_OFFSET(FILE_NAME_INFORMATION, FileName); /* Query the File name */ - Status = IoQueryFileInformation(FileObject, - FileNameInformation, - LengthMismatch ? Length : FileLength, - LocalFileInfo, - &LocalReturnLength); + if (PreviousMode == KernelMode && + BooleanFlagOn(FileObject->Flags, FO_SYNCHRONOUS_IO)) + { + Status = IopGetFileInformation(FileObject, + LengthMismatch ? Length : FileLength, + FileNameInformation, + LocalFileInfo, + &LocalReturnLength); + } + else + { + Status = IoQueryFileInformation(FileObject, + FileNameInformation, + LengthMismatch ? Length : FileLength, + LocalFileInfo, + &LocalReturnLength); + } if (NT_ERROR(Status)) { /* Fail on errors only, allow warnings */