Sebastian Lackner : ntdll/tests: Add additional tests for calling NtOpenFile with file object as RootDirectory.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Aug 21 09:07:18 CDT 2015


Module: wine
Branch: master
Commit: 84d2610aafb3c8b49f5ff8da71f024dc0cea615a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=84d2610aafb3c8b49f5ff8da71f024dc0cea615a

Author: Sebastian Lackner <sebastian at fds-team.de>
Date:   Fri Aug 21 07:25:45 2015 +0200

ntdll/tests: Add additional tests for calling NtOpenFile with file object as RootDirectory.

---

 dlls/ntdll/tests/file.c | 47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index ad844b1..4f58788 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -297,7 +297,8 @@ static void create_file_test(void)
 
 static void open_file_test(void)
 {
-    static const WCHAR fooW[] = {'f','o','o',0};
+    static const char testdata[] = "Hello World";
+    static WCHAR fooW[] = {'f','o','o',0};
     NTSTATUS status;
     HANDLE dir, root, handle, file;
     WCHAR path[MAX_PATH], tmpfile[MAX_PATH];
@@ -306,7 +307,8 @@ static void open_file_test(void)
     IO_STATUS_BLOCK io;
     UNICODE_STRING nameW;
     UINT i, len;
-    BOOL restart = TRUE;
+    BOOL ret, restart = TRUE;
+    DWORD numbytes;
 
     len = GetWindowsDirectoryW( path, MAX_PATH );
     pRtlDosPathNameToNtPathName_U( path, &nameW, NULL, NULL );
@@ -432,6 +434,14 @@ static void open_file_test(void)
     GetTempFileNameW( path, fooW, 0, tmpfile );
     pRtlDosPathNameToNtPathName_U( tmpfile, &nameW, NULL, NULL );
 
+    file = CreateFileW( tmpfile, FILE_WRITE_DATA, 0, NULL, CREATE_ALWAYS, 0, 0 );
+    ok( file != INVALID_HANDLE_VALUE, "CreateFile error %d\n", GetLastError() );
+    numbytes = 0xdeadbeef;
+    ret = WriteFile( file, testdata, sizeof(testdata) - 1, &numbytes, NULL );
+    ok( ret, "WriteFile failed with error %u\n", GetLastError() );
+    ok( numbytes == sizeof(testdata) - 1, "failed to write all data\n" );
+    CloseHandle( file );
+
     attr.Length = sizeof(attr);
     attr.RootDirectory = 0;
     attr.ObjectName = &nameW;
@@ -443,6 +453,22 @@ static void open_file_test(void)
     ok( !status, "open %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status );
     pRtlFreeUnicodeString( &nameW );
 
+    numbytes = 0xdeadbeef;
+    memset( data, 0, sizeof(data) );
+    ret = ReadFile( file, data, sizeof(data), &numbytes, NULL );
+    ok( ret, "ReadFile failed with error %u\n", GetLastError() );
+    ok( numbytes == sizeof(testdata) - 1, "failed to read all data\n" );
+    ok( !memcmp( data, testdata, sizeof(testdata) - 1 ), "testdata doesn't match\n" );
+
+    nameW.Length = sizeof(fooW) - sizeof(WCHAR);
+    nameW.Buffer = fooW;
+    attr.RootDirectory = file;
+    attr.ObjectName = &nameW;
+    status = pNtOpenFile( &root, SYNCHRONIZE|FILE_LIST_DIRECTORY, &attr, &io,
+                         FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT );
+    todo_wine ok( status == STATUS_OBJECT_PATH_NOT_FOUND,
+                  "expected STATUS_OBJECT_PATH_NOT_FOUND, got %08x\n", status );
+
     nameW.Length = 0;
     nameW.Buffer = NULL;
     attr.RootDirectory = file;
@@ -451,6 +477,23 @@ static void open_file_test(void)
                           FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT );
     todo_wine ok( !status, "open %s failed %x\n", wine_dbgstr_w(tmpfile), status );
 
+    numbytes = SetFilePointer( file, 0, 0, FILE_CURRENT );
+    ok( numbytes == sizeof(testdata) - 1, "SetFilePointer returned %u\n", numbytes );
+    numbytes = SetFilePointer( root, 0, 0, FILE_CURRENT );
+    todo_wine ok( numbytes == 0, "SetFilePointer returned %u\n", numbytes );
+
+    numbytes = 0xdeadbeef;
+    memset( data, 0, sizeof(data) );
+    ret = ReadFile( root, data, sizeof(data), &numbytes, NULL );
+    todo_wine ok( ret, "ReadFile failed with error %u\n", GetLastError() );
+    todo_wine ok( numbytes == sizeof(testdata) - 1, "failed to read all data\n" );
+    todo_wine ok( !memcmp( data, testdata, sizeof(testdata) - 1 ), "testdata doesn't match\n" );
+
+    numbytes = SetFilePointer( file, 0, 0, FILE_CURRENT );
+    ok( numbytes == sizeof(testdata) - 1, "SetFilePointer returned %u\n", numbytes );
+    numbytes = SetFilePointer( root, 0, 0, FILE_CURRENT );
+    todo_wine ok( numbytes == sizeof(testdata) - 1, "SetFilePointer returned %u\n", numbytes );
+
     CloseHandle( file );
     CloseHandle( root );
     DeleteFileW( tmpfile );




More information about the wine-cvs mailing list