From b666ebecdae284f079b9373fff870f2dcacb1947 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 16 Jul 2013 22:37:01 +0000 Subject: [PATCH] [NTOS] - Fix CcMdlReadComplete2 prototype. - Fix a bug in Dominique Cote's code: when performing FsRtlGetFileSize, the length of the buffer should be set accordingly to the information class asked for, that is - FILE_STANDARD_INFORMATION structure. Previous calculation formula makes no sense at all and leads to memory corruption (if filesystem driver is stupid enough) or inability to get file size (if filesystem driver is coded by good developers). svn path=/trunk/; revision=59495 --- reactos/ntoskrnl/cache/mdlsup.c | 4 ++-- reactos/ntoskrnl/cache/newcc.h | 4 ++-- reactos/ntoskrnl/cc/mdl.c | 7 ++++--- reactos/ntoskrnl/fsrtl/fastio.c | 4 ++-- reactos/ntoskrnl/include/internal/cc.h | 4 ++-- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/reactos/ntoskrnl/cache/mdlsup.c b/reactos/ntoskrnl/cache/mdlsup.c index 9f705b50b8b..884270a5294 100644 --- a/reactos/ntoskrnl/cache/mdlsup.c +++ b/reactos/ntoskrnl/cache/mdlsup.c @@ -80,8 +80,8 @@ CcMdlReadComplete(IN PFILE_OBJECT FileObject, VOID NTAPI -CcMdlReadComplete2(IN PMDL MdlChain, - IN PFILE_OBJECT FileObject) +CcMdlReadComplete2(IN PFILE_OBJECT FileObject, + IN PMDL MdlChain) { UNIMPLEMENTED } diff --git a/reactos/ntoskrnl/cache/newcc.h b/reactos/ntoskrnl/cache/newcc.h index 2e34a53ed3e..adbf1c5d926 100644 --- a/reactos/ntoskrnl/cache/newcc.h +++ b/reactos/ntoskrnl/cache/newcc.h @@ -44,8 +44,8 @@ CcPfInitializePrefetcher(VOID); VOID NTAPI -CcMdlReadComplete2(IN PMDL MemoryDescriptorList, - IN PFILE_OBJECT FileObject); +CcMdlReadComplete2(IN PFILE_OBJECT FileObject, + IN PMDL MemoryDescriptorList); VOID NTAPI diff --git a/reactos/ntoskrnl/cc/mdl.c b/reactos/ntoskrnl/cc/mdl.c index bcd50309555..ad8e73f70c9 100644 --- a/reactos/ntoskrnl/cc/mdl.c +++ b/reactos/ntoskrnl/cc/mdl.c @@ -51,8 +51,9 @@ CcMdlRead ( VOID NTAPI CcMdlReadComplete2 ( - IN PMDL MemoryDescriptorList, - IN PFILE_OBJECT FileObject) + IN PFILE_OBJECT FileObject, + IN PMDL MemoryDescriptorList +) { PMDL Mdl; @@ -104,7 +105,7 @@ CcMdlReadComplete ( } /* Use slow path */ - CcMdlReadComplete2(MdlChain, FileObject); + CcMdlReadComplete2(FileObject, MdlChain); } /* diff --git a/reactos/ntoskrnl/fsrtl/fastio.c b/reactos/ntoskrnl/fsrtl/fastio.c index 56f2925a9fa..76d1a2b908c 100644 --- a/reactos/ntoskrnl/fsrtl/fastio.c +++ b/reactos/ntoskrnl/fsrtl/fastio.c @@ -880,7 +880,7 @@ FsRtlGetFileSize(IN PFILE_OBJECT FileObject, IoStackLocation->FileObject = FileObject; IoStackLocation->DeviceObject = DeviceObject; IoStackLocation->Parameters.QueryFile.Length = - ALIGN_UP(sizeof(FILE_INFORMATION_CLASS), ULONG); + sizeof(FILE_STANDARD_INFORMATION); IoStackLocation->Parameters.QueryFile.FileInformationClass = FileStandardInformation; @@ -1019,7 +1019,7 @@ FsRtlMdlReadCompleteDev(IN PFILE_OBJECT FileObject, IN PDEVICE_OBJECT DeviceObject) { /* Call the Cache Manager */ - CcMdlReadComplete2(MemoryDescriptorList, FileObject); + CcMdlReadComplete2(FileObject, MemoryDescriptorList); return TRUE; } diff --git a/reactos/ntoskrnl/include/internal/cc.h b/reactos/ntoskrnl/include/internal/cc.h index de71f287951..17d2cacfbd7 100644 --- a/reactos/ntoskrnl/include/internal/cc.h +++ b/reactos/ntoskrnl/include/internal/cc.h @@ -172,8 +172,8 @@ CcPfInitializePrefetcher( VOID NTAPI CcMdlReadComplete2( - IN PMDL MemoryDescriptorList, - IN PFILE_OBJECT FileObject + IN PFILE_OBJECT FileObject, + IN PMDL MemoryDescriptorList ); VOID