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