From c9e1b6fb575d0d591e0683e0c8825d741b60ba50 Mon Sep 17 00:00:00 2001 From: Jactry Zeng Date: Wed, 27 May 2015 11:12:53 +0800 Subject: [PATCH] ntdll/tests: Test opening a directory with NULL ObjectName. --- dlls/ntdll/tests/file.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c index fb31b3a2da..2df0edc284 100644 --- a/dlls/ntdll/tests/file.c +++ b/dlls/ntdll/tests/file.c @@ -297,9 +297,10 @@ static void create_file_test(void) static void open_file_test(void) { + static const WCHAR fooW[] = {'f','o','o',0}; NTSTATUS status; - HANDLE dir, root, handle; - WCHAR path[MAX_PATH]; + HANDLE dir, root, handle, file; + WCHAR path[MAX_PATH], tmpfile[MAX_PATH]; BYTE data[1024]; OBJECT_ATTRIBUTES attr; IO_STATUS_BLOCK io; @@ -426,6 +427,33 @@ static void open_file_test(void) CloseHandle( dir ); CloseHandle( root ); + + GetTempPathW( MAX_PATH, path ); + GetTempFileNameW( path, fooW, 0, tmpfile ); + pRtlDosPathNameToNtPathName_U( tmpfile, &nameW, NULL, NULL ); + + attr.Length = sizeof(attr); + attr.RootDirectory = 0; + attr.ObjectName = &nameW; + attr.Attributes = OBJ_CASE_INSENSITIVE; + attr.SecurityDescriptor = NULL; + attr.SecurityQualityOfService = NULL; + status = pNtOpenFile( &file, SYNCHRONIZE|FILE_LIST_DIRECTORY, &attr, &io, + FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT ); + ok( !status, "open %s failed %x\n", wine_dbgstr_w(nameW.Buffer), status ); + pRtlFreeUnicodeString( &nameW ); + + nameW.Length = 0; + nameW.Buffer = NULL; + 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, "open %s failed %x\n", wine_dbgstr_w(tmpfile), status ); + + CloseHandle( file ); + CloseHandle( root ); + DeleteFileW( tmpfile ); } static void delete_file_test(void)