+/*
+ * PROJECT: ReactOS API Tests
+ * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
+ * PURPOSE: Test for NtMapViewOfSection
+ * PROGRAMMERS: Timo Kreuzer
+ */
#include <apitest.h>
-
+#include <strsafe.h>
#define WIN32_NO_STATUS
#include <ndk/ntndk.h>
-NTSYSAPI
-NTSTATUS
-NTAPI
-NtMapViewOfSection(
- HANDLE SectionHandle,
- HANDLE ProcessHandle,
- PVOID *BaseAddress,
- ULONG_PTR ZeroBits,
- SIZE_T CommitSize,
- PLARGE_INTEGER SectionOffset,
- PSIZE_T ViewSize,
- SECTION_INHERIT InheritDisposition,
- ULONG AllocationType,
- ULONG Protect);
-
void
Test_PageFileSection(void)
{
if (!NT_SUCCESS(Status))
return;
- ok(BaseAddress == UlongToPtr(0x40000000), "Invalid BaseAddress: %p", BaseAddress);
+ ok(BaseAddress == UlongToPtr(0x40000000), "Invalid BaseAddress: %p\n", BaseAddress);
BaseAddress = (PVOID)0x40080000;
SectionOffset.QuadPart = 0x10000;
PAGE_READWRITE);
ok_ntstatus(Status, STATUS_SUCCESS);
- ok(BaseAddress == (PVOID)0x40080000, "Invalid BaseAddress: %p", BaseAddress);
+ ok(BaseAddress == (PVOID)0x40080000, "Invalid BaseAddress: %p\n", BaseAddress);
/* Commit a page in the section */
BaseAddress = (PVOID)0x40000000;
_SEH2_END;
ok_ntstatus(Status, STATUS_SUCCESS);
- ok(*(PULONG)BaseAddress2 == 2, "Value in memory was wrong");
+ ok(*(PULONG)BaseAddress2 == 2, "Value in memory was wrong\n");
/* Close the mapping */
NtUnmapViewOfSection(NtCurrentProcess(), BaseAddress);
#else
/* WoW64 returns STATUS_INSUFFICIENT_RESOURCES */
ok((Status == STATUS_INSUFFICIENT_RESOURCES) || (Status == STATUS_SECTION_TOO_BIG),
- "got wrong Status: 0x%lx", Status);
+ "got wrong Status: 0x%lx\n", Status);
#endif
/* Try to create a even huger page file backed section, but only reserved */
#else
/* WoW64 returns STATUS_INVALID_PARAMETER_4 */
ok((Status == STATUS_INVALID_PARAMETER_4) || (Status == STATUS_INVALID_PARAMETER_3),
- "got wrong Status: 0x%lx", Status);
+ "got wrong Status: 0x%lx\n", Status);
#endif
/* Pass 0 region size */
#else
/* WoW64 returns STATUS_NO_MEMORY */
ok((Status == STATUS_NO_MEMORY) || (Status == STATUS_INVALID_VIEW_SIZE),
- "got wrong Status: 0x%lx", Status);
+ "got wrong Status: 0x%lx\n", Status);
ok(ViewSize == 0, "wrong ViewSize: 0x%Ix\n", ViewSize);
#endif
NTSTATUS Status;
OBJECT_ATTRIBUTES FileObjectAttributes;
IO_STATUS_BLOCK IoStatusBlock;
+ WCHAR TestDllPath[MAX_PATH];
HANDLE FileHandle, DataSectionHandle, ImageSectionHandle;
PVOID DataBase, ImageBase;
SIZE_T ViewSize;
- if (!RtlDosPathNameToNtPathName_U(L"testdata\\test.dll",
+ GetModuleFileNameW(NULL, TestDllPath, RTL_NUMBER_OF(TestDllPath));
+ wcsrchr(TestDllPath, L'\\')[1] = UNICODE_NULL;
+ StringCbCatW(TestDllPath, sizeof(TestDllPath), L"testdata\\test.dll");
+ if (!RtlDosPathNameToNtPathName_U(TestDllPath,
&FileName,
NULL,
NULL))
FILE_SHARE_READ,
FILE_SYNCHRONOUS_IO_NONALERT);
ok_ntstatus(Status, STATUS_SUCCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to open file\n");
+ return;
+ }
/* Create a data section with write access */
Status = NtCreateSection(&DataSectionHandle,
SEC_COMMIT, // AllocationAttributes
FileHandle);
ok_ntstatus(Status, STATUS_SUCCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to create data section\n");
+ NtClose(FileHandle);
+ return;
+ }
/* Map the data section as flat mapping */
DataBase = NULL;
PAGE_READWRITE);
ok_ntstatus(Status, STATUS_SUCCESS);
//ok(ViewSize == 0x3f95cc48, "ViewSize wrong: 0x%lx\n");
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to map view of data section\n");
+ NtClose(DataSectionHandle);
+ NtClose(FileHandle);
+ return;
+ }
/* Check the original data */
ok(*(ULONG*)DataBase == 0x00905a4d, "Header not ok\n");
SEC_IMAGE, // AllocationAttributes
FileHandle);
ok_ntstatus(Status, STATUS_INVALID_IMAGE_NOT_MZ);
+ if (NT_SUCCESS(Status)) NtClose(ImageSectionHandle);
/* Restore the original header */
*(ULONG*)DataBase = 0x00905a4d;
SEC_IMAGE, // AllocationAttributes
FileHandle);
ok_ntstatus(Status, STATUS_SUCCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to create image section\n");
+ NtClose(DataSectionHandle);
+ NtClose(FileHandle);
+ return;
+ }
/* Map the image section */
ImageBase = NULL;
#else
ok_ntstatus(Status, STATUS_IMAGE_MACHINE_TYPE_MISMATCH);
#endif
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to map view of image section\n");
+ NtClose(ImageSectionHandle);
+ NtClose(DataSectionHandle);
+ NtClose(FileHandle);
+ return;
+ }
/* Check the header */
ok(*(ULONG*)DataBase == 0x00905a4d, "Header not ok\n");
SEC_IMAGE, // AllocationAttributes
FileHandle);
ok_ntstatus(Status, STATUS_SUCCESS);
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to create image section\n");
+ NtClose(DataSectionHandle);
+ NtClose(FileHandle);
+ return;
+ }
/* Map the image section again */
ImageBase = NULL;
#else
ok_ntstatus(Status, STATUS_IMAGE_MACHINE_TYPE_MISMATCH);
#endif
+ if (!NT_SUCCESS(Status))
+ {
+ skip("Failed to map view of image section\n");
+ NtClose(ImageSectionHandle);
+ NtClose(DataSectionHandle);
+ NtClose(FileHandle);
+ return;
+ }
// This one doesn't always work, needs investigation
/* Check the .data section again */
Test_ImageSection();
Test_BasedSection();
}
-