From 5cb248c027709c730bec5443170c31ba1a1ccb3b Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 16 Oct 2007 14:59:09 +0000 Subject: [PATCH] Dmitry Gorbachev - NtSetInformationFile() could be done before asynchronously called NtWriteFile is completed. Fix this by sending the synchronous flag. - Check return status of the second NtSetInformationFile() call. See issue #2071 for more details. svn path=/trunk/; revision=29629 --- reactos/base/setup/usetup/filesup.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/reactos/base/setup/usetup/filesup.c b/reactos/base/setup/usetup/filesup.c index 2ace36405ff..2ec6fe12e3e 100644 --- a/reactos/base/setup/usetup/filesup.c +++ b/reactos/base/setup/usetup/filesup.c @@ -204,7 +204,9 @@ SetupCopyFile(PWCHAR SourceFileName, FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, - FILE_NO_INTERMEDIATE_BUFFERING | FILE_SEQUENTIAL_ONLY, + FILE_NO_INTERMEDIATE_BUFFERING | + FILE_SEQUENTIAL_ONLY | + FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0); if(!NT_SUCCESS(Status)) @@ -243,11 +245,17 @@ SetupCopyFile(PWCHAR SourceFileName, } /* shorten the file back to it's real size after completing the write */ - NtSetInformationFile(FileHandleDest, + Status = NtSetInformationFile(FileHandleDest, &IoStatusBlock, &FileStandard.EndOfFile, sizeof(FILE_END_OF_FILE_INFORMATION), FileEndOfFileInformation); + + if(!NT_SUCCESS(Status)) + { + DPRINT1("NtSetInformationFile failed: %x\n", Status); + } + closedest: NtClose(FileHandleDest); unmapsrcsec: