Alexandre Julliard : kernel32/tests: Add some tests for NtAreMappedFilesTheSame.
Alexandre Julliard
julliard at winehq.org
Mon Oct 18 13:36:57 CDT 2010
Module: wine
Branch: master
Commit: 971e9a2239caca8af1a0a7b4fda56b7b263dc4b8
URL: http://source.winehq.org/git/wine.git/?a=commit;h=971e9a2239caca8af1a0a7b4fda56b7b263dc4b8
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Oct 18 19:07:49 2010 +0200
kernel32/tests: Add some tests for NtAreMappedFilesTheSame.
---
dlls/kernel32/tests/virtual.c | 139 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 139 insertions(+), 0 deletions(-)
diff --git a/dlls/kernel32/tests/virtual.c b/dlls/kernel32/tests/virtual.c
index f95fdd9..d4c4827 100644
--- a/dlls/kernel32/tests/virtual.c
+++ b/dlls/kernel32/tests/virtual.c
@@ -21,8 +21,11 @@
#include <stdarg.h>
#include <stdio.h>
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
#include "windef.h"
#include "winbase.h"
+#include "winternl.h"
#include "winerror.h"
#include "wine/test.h"
@@ -34,6 +37,7 @@ static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD);
static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD);
static UINT (WINAPI *pGetWriteWatch)(DWORD,LPVOID,SIZE_T,LPVOID*,ULONG_PTR*,ULONG*);
static UINT (WINAPI *pResetWriteWatch)(LPVOID,SIZE_T);
+static NTSTATUS (WINAPI *pNtAreMappedFilesTheSame)(PVOID,PVOID);
/* ############################### */
@@ -832,6 +836,138 @@ static void test_NtMapViewOfSection(void)
CloseHandle(hProcess);
}
+static void test_NtAreMappedFilesTheSame(void)
+{
+ static const char testfile[] = "testfile.xxx";
+ HANDLE file, file2, mapping, map2;
+ void *ptr, *ptr2;
+ NTSTATUS status;
+ char path[MAX_PATH];
+
+ if (!pNtAreMappedFilesTheSame)
+ {
+ win_skip( "NtAreMappedFilesTheSame not available\n" );
+ return;
+ }
+
+ file = CreateFileA( testfile, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL, CREATE_ALWAYS, 0, 0 );
+ ok( file != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() );
+ SetFilePointer( file, 4096, NULL, FILE_BEGIN );
+ SetEndOfFile( file );
+
+ mapping = CreateFileMappingA( file, NULL, PAGE_READWRITE, 0, 4096, NULL );
+ ok( mapping != 0, "CreateFileMapping error %u\n", GetLastError() );
+
+ ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 );
+ ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() );
+
+ file2 = CreateFileA( testfile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE,
+ NULL, OPEN_EXISTING, 0, 0 );
+ ok( file2 != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() );
+
+ map2 = CreateFileMappingA( file2, NULL, PAGE_READONLY, 0, 4096, NULL );
+ ok( map2 != 0, "CreateFileMapping error %u\n", GetLastError() );
+ ptr2 = MapViewOfFile( map2, FILE_MAP_READ, 0, 0, 4096 );
+ ok( ptr2 != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() );
+ status = pNtAreMappedFilesTheSame( ptr, ptr2 );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+ UnmapViewOfFile( ptr2 );
+
+ ptr2 = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 );
+ ok( ptr2 != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() );
+ status = pNtAreMappedFilesTheSame( ptr, ptr2 );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+ UnmapViewOfFile( ptr2 );
+ CloseHandle( map2 );
+
+ map2 = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 4096, NULL );
+ ok( map2 != 0, "CreateFileMapping error %u\n", GetLastError() );
+ ptr2 = MapViewOfFile( map2, FILE_MAP_READ, 0, 0, 4096 );
+ ok( ptr2 != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() );
+ status = pNtAreMappedFilesTheSame( ptr, ptr2 );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+ UnmapViewOfFile( ptr2 );
+ CloseHandle( map2 );
+ CloseHandle( file2 );
+
+ status = pNtAreMappedFilesTheSame( ptr, ptr );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ status = pNtAreMappedFilesTheSame( ptr, (char *)ptr + 30 );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ status = pNtAreMappedFilesTheSame( ptr, GetModuleHandleA("kernel32.dll") );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ status = pNtAreMappedFilesTheSame( ptr, (void *)0xdeadbeef );
+ todo_wine
+ ok( status == STATUS_CONFLICTING_ADDRESSES || status == STATUS_INVALID_ADDRESS,
+ "NtAreMappedFilesTheSame returned %x\n", status );
+
+ status = pNtAreMappedFilesTheSame( ptr, NULL );
+ todo_wine
+ ok( status == STATUS_INVALID_ADDRESS, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ status = pNtAreMappedFilesTheSame( ptr, (void *)0x10000 );
+ todo_wine
+ ok( status == STATUS_CONFLICTING_ADDRESSES, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ status = pNtAreMappedFilesTheSame( NULL, NULL );
+ todo_wine
+ ok( status == STATUS_INVALID_ADDRESS, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ ptr2 = VirtualAlloc( NULL, 0x10000, MEM_COMMIT, PAGE_READWRITE );
+ ok( ptr2 != NULL, "VirtualAlloc error %u\n", GetLastError() );
+ status = pNtAreMappedFilesTheSame( ptr, ptr2 );
+ todo_wine
+ ok( status == STATUS_CONFLICTING_ADDRESSES, "NtAreMappedFilesTheSame returned %x\n", status );
+ VirtualFree( ptr2, 0, MEM_RELEASE );
+
+ UnmapViewOfFile( ptr );
+ CloseHandle( mapping );
+ CloseHandle( file );
+
+ status = pNtAreMappedFilesTheSame( GetModuleHandleA("ntdll.dll"),
+ GetModuleHandleA("kernel32.dll") );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+ status = pNtAreMappedFilesTheSame( GetModuleHandleA("kernel32.dll"),
+ GetModuleHandleA("kernel32.dll") );
+ todo_wine
+ ok( status == STATUS_SUCCESS, "NtAreMappedFilesTheSame returned %x\n", status );
+ status = pNtAreMappedFilesTheSame( GetModuleHandleA("kernel32.dll"),
+ (char *)GetModuleHandleA("kernel32.dll") + 4096 );
+ todo_wine
+ ok( status == STATUS_SUCCESS, "NtAreMappedFilesTheSame returned %x\n", status );
+
+ GetSystemDirectoryA( path, MAX_PATH );
+ strcat( path, "\\kernel32.dll" );
+ file = CreateFileA( path, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0 );
+ ok( file != INVALID_HANDLE_VALUE, "CreateFile error %u\n", GetLastError() );
+
+ mapping = CreateFileMappingA( file, NULL, PAGE_READONLY, 0, 4096, NULL );
+ ok( mapping != 0, "CreateFileMapping error %u\n", GetLastError() );
+ ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 4096 );
+ ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() );
+ status = pNtAreMappedFilesTheSame( ptr, GetModuleHandleA("kernel32.dll") );
+ ok( status == STATUS_NOT_SAME_DEVICE, "NtAreMappedFilesTheSame returned %x\n", status );
+ UnmapViewOfFile( ptr );
+ CloseHandle( mapping );
+
+ mapping = CreateFileMappingA( file, NULL, PAGE_READONLY | SEC_IMAGE, 0, 0, NULL );
+ ok( mapping != 0, "CreateFileMapping error %u\n", GetLastError() );
+ ptr = MapViewOfFile( mapping, FILE_MAP_READ, 0, 0, 0 );
+ ok( ptr != NULL, "MapViewOfFile FILE_MAP_READ error %u\n", GetLastError() );
+ status = pNtAreMappedFilesTheSame( ptr, GetModuleHandleA("kernel32.dll") );
+ todo_wine
+ ok( status == STATUS_SUCCESS, "NtAreMappedFilesTheSame returned %x\n", status );
+ UnmapViewOfFile( ptr );
+ CloseHandle( mapping );
+
+ CloseHandle( file );
+ DeleteFileA( testfile );
+}
+
static void test_CreateFileMapping(void)
{
HANDLE handle, handle2;
@@ -1271,11 +1407,14 @@ START_TEST(virtual)
pVirtualFreeEx = (void *) GetProcAddress(hkernel32, "VirtualFreeEx");
pGetWriteWatch = (void *) GetProcAddress(hkernel32, "GetWriteWatch");
pResetWriteWatch = (void *) GetProcAddress(hkernel32, "ResetWriteWatch");
+ pNtAreMappedFilesTheSame = (void *)GetProcAddress( GetModuleHandle("ntdll.dll"),
+ "NtAreMappedFilesTheSame" );
test_VirtualAllocEx();
test_VirtualAlloc();
test_MapViewOfFile();
test_NtMapViewOfSection();
+ test_NtAreMappedFilesTheSame();
test_CreateFileMapping();
test_IsBadReadPtr();
test_IsBadWritePtr();
More information about the wine-cvs
mailing list