diff --git a/dlls/kernel32/tests/file.c b/dlls/kernel32/tests/file.c index 29620654bd..172bb1f637 100644 --- a/dlls/kernel32/tests/file.c +++ b/dlls/kernel32/tests/file.c @@ -33,6 +33,7 @@ #include "winerror.h" #include "winternl.h" #include "winnls.h" +#include "winuser.h" #include "fileapi.h" #undef DeleteFile /* needed for FILE_DISPOSITION_INFO */ @@ -1589,9 +1590,11 @@ static void test_CreateFileW(void) HANDLE hFile; WCHAR temp_path[MAX_PATH]; WCHAR filename[MAX_PATH]; + WCHAR temp_filename[MAX_PATH]; static const WCHAR emptyW[]={'\0'}; static const WCHAR prefix[] = {'p','f','x',0}; static const WCHAR bogus[] = { '\\', '\\', '.', '\\', 'B', 'O', 'G', 'U', 'S', 0 }; + static const WCHAR dir_fileW[] = {'%','s','\\','%','s',0}; DWORD ret; ret = GetTempPathW(MAX_PATH, temp_path); @@ -1639,6 +1642,12 @@ static void test_CreateFileW(void) CloseHandle(hFile); + wsprintfW(temp_filename, dir_fileW, filename, prefix); + hFile = CreateFileW(temp_filename, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_ALWAYS, FILE_FLAG_RANDOM_ACCESS, 0); + ok(hFile == INVALID_HANDLE_VALUE && (GetLastError() == ERROR_PATH_NOT_FOUND), + "hFile %p, last error %u\n", hFile, GetLastError()); + ret = DeleteFileW(filename); ok(ret, "DeleteFileW: error %d\n", GetLastError()); diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c index 9ca184a5d0..1492778119 100644 --- a/dlls/kernelbase/file.c +++ b/dlls/kernelbase/file.c @@ -602,6 +602,8 @@ HANDLE WINAPI DECLSPEC_HOTPATCH CreateFileW( LPCWSTR filename, DWORD access, DWO */ if (status == STATUS_OBJECT_NAME_COLLISION) SetLastError( ERROR_FILE_EXISTS ); + else if (status == STATUS_NOT_A_DIRECTORY) + SetLastError( ERROR_PATH_NOT_FOUND ); else SetLastError( RtlNtStatusToDosError(status) ); }