From 3a8ce2cae5afe67a1886d17826dc6d2426212284 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Thu, 5 May 2016 12:06:07 +0000 Subject: [PATCH] [NTOSKRNL][NTDLL_APITEST] Fix error returned from NtCreateSection when opening an empty file. CORE-11166 svn path=/trunk/; revision=71261 --- reactos/ntoskrnl/mm/section.c | 2 +- rostests/apitests/ntdll/NtMapViewOfSection.c | 48 ++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index b7b64350fac..7ece609b110 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -2993,7 +2993,7 @@ MmCreateDataFileSection(PROS_SECTION_OBJECT *SectionObject, { ObDereferenceObject(Section); ObDereferenceObject(FileObject); - return STATUS_FILE_INVALID; + return STATUS_MAPPED_FILE_SIZE_ZERO; } } diff --git a/rostests/apitests/ntdll/NtMapViewOfSection.c b/rostests/apitests/ntdll/NtMapViewOfSection.c index f90400611f7..297915a966a 100644 --- a/rostests/apitests/ntdll/NtMapViewOfSection.c +++ b/rostests/apitests/ntdll/NtMapViewOfSection.c @@ -1351,6 +1351,53 @@ Test_NoLoadSection(BOOL Relocate) DeleteFileW(FileName); } +static void +Test_EmptyFile(VOID) +{ + NTSTATUS Status; + WCHAR TempPath[MAX_PATH]; + WCHAR FileName[MAX_PATH]; + HANDLE Handle; + HANDLE SectionHandle; + ULONG Length; + + Length = GetTempPathW(MAX_PATH, TempPath); + ok(Length != 0, "GetTempPathW failed with %lu\n", GetLastError()); + Length = GetTempFileNameW(TempPath, L"nta", 0, FileName); + ok(Length != 0, "GetTempFileNameW failed with %lu\n", GetLastError()); + Handle = CreateFileW(FileName, + FILE_ALL_ACCESS, + 0, + NULL, + CREATE_ALWAYS, + 0, + NULL); + if (Handle == INVALID_HANDLE_VALUE) + { + skip("Failed to create temp file %ls, error %lu\n", FileName, GetLastError()); + return; + } + + Status = NtCreateSection(&SectionHandle, + STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_READ, + 0, 0, PAGE_READONLY, SEC_COMMIT, Handle); + ok_ntstatus(Status, STATUS_MAPPED_FILE_SIZE_ZERO); + + if (NT_SUCCESS(Status)) + NtClose(SectionHandle); + + Status = NtCreateSection(&SectionHandle, + STANDARD_RIGHTS_REQUIRED | SECTION_QUERY | SECTION_MAP_READ, + 0, 0, PAGE_READONLY, SEC_IMAGE, Handle); + ok_ntstatus(Status, STATUS_INVALID_FILE_FOR_SECTION); + + if (NT_SUCCESS(Status)) + NtClose(SectionHandle); + + CloseHandle(Handle); + DeleteFileW(FileName); +} + START_TEST(NtMapViewOfSection) { Test_PageFileSection(); @@ -1358,4 +1405,5 @@ START_TEST(NtMapViewOfSection) Test_BasedSection(); Test_NoLoadSection(FALSE); Test_NoLoadSection(TRUE); + Test_EmptyFile(); }