diff --git a/reactos/dll/win32/kernel32/client/file/create.c b/reactos/dll/win32/kernel32/client/file/create.c index f823f1f8a14..a633f3795bf 100644 --- a/reactos/dll/win32/kernel32/client/file/create.c +++ b/reactos/dll/win32/kernel32/client/file/create.c @@ -104,6 +104,7 @@ HANDLE WINAPI CreateFileW (LPCWSTR lpFileName, ULONG FileAttributes, Flags = 0; PVOID EaBuffer = NULL; ULONG EaLength = 0; + BOOLEAN TrailingBackslash; if (!lpFileName || !lpFileName[0]) { @@ -220,6 +221,13 @@ HANDLE WINAPI CreateFileW (LPCWSTR lpFileName, } TRACE("NtPathU \'%wZ\'\n", &NtPathU); + + TrailingBackslash = FALSE; + if (NtPathU.Length >= sizeof(WCHAR) && + NtPathU.Buffer[NtPathU.Length / sizeof(WCHAR) - 1]) + { + TrailingBackslash = TRUE; + } if (hTemplateFile != NULL) { @@ -350,6 +358,11 @@ HANDLE WINAPI CreateFileW (LPCWSTR lpFileName, { SetLastError( ERROR_FILE_EXISTS ); } + else if (Status == STATUS_FILE_IS_A_DIRECTORY && + TrailingBackslash) + { + SetLastError(ERROR_PATH_NOT_FOUND); + } else { BaseSetLastNTError (Status);