From 638ba1c9e4f11ddce9f2bb308e2d855a921dba78 Mon Sep 17 00:00:00 2001 From: jean Date: Thu, 11 Feb 1999 12:38:30 +0000 Subject: [PATCH] correct bug on CreateDirectory : crash if no template correct call to ZwCreateFile svn path=/trunk/; revision=225 --- reactos/lib/kernel32/file/dir.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/reactos/lib/kernel32/file/dir.c b/reactos/lib/kernel32/file/dir.c index edb30aa0194..59beca45bb9 100644 --- a/reactos/lib/kernel32/file/dir.c +++ b/reactos/lib/kernel32/file/dir.c @@ -35,9 +35,12 @@ WINBOOL STDCALL CreateDirectoryExA(LPCSTR lpTemplateDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes) { WCHAR TemplateDirectoryW[MAX_PATH]; + PWCHAR pTemplateDirectoryW; WCHAR NewDirectoryW[MAX_PATH]; ULONG i; i = 0; + if(lpTemplateDirectory) + { while ((*lpTemplateDirectory)!=0 && i < MAX_PATH) { TemplateDirectoryW[i] = *lpTemplateDirectory; @@ -45,6 +48,9 @@ WINBOOL STDCALL CreateDirectoryExA(LPCSTR lpTemplateDirectory, i++; } TemplateDirectoryW[i] = 0; + pTemplateDirectoryW=TemplateDirectoryW; + } + else pTemplateDirectoryW=NULL; i = 0; while ((*lpNewDirectory)!=0 && i < MAX_PATH) @@ -76,6 +82,7 @@ WINBOOL STDCALL CreateDirectoryExW(LPCWSTR lpTemplateDirectory, OBJECT_ATTRIBUTES ObjectAttributes; UNICODE_STRING DirectoryNameString; IO_STATUS_BLOCK IoStatusBlock; + WCHAR FileNameW[MAX_PATH]; if ( lpTemplateDirectory != NULL ) { @@ -84,6 +91,12 @@ WINBOOL STDCALL CreateDirectoryExW(LPCWSTR lpTemplateDirectory, return(FALSE); } + FileNameW[0] = '\\'; + FileNameW[1] = '?'; + FileNameW[2] = '?'; + FileNameW[3] = '\\'; + FileNameW[4] = 0; + wcscat(FileNameW,lpNewDirectory); DirectoryNameString.Length = lstrlenW(lpNewDirectory)*sizeof(WCHAR); DirectoryNameString.Buffer = (WCHAR *)lpNewDirectory; DirectoryNameString.MaximumLength = DirectoryNameString.Length+sizeof(WCHAR); @@ -100,10 +113,10 @@ WINBOOL STDCALL CreateDirectoryExW(LPCWSTR lpTemplateDirectory, &ObjectAttributes, &IoStatusBlock, NULL, - FILE_ATTRIBUTE_DIRECTORY, + FILE_ATTRIBUTE_NORMAL, 0, FILE_CREATE, - 0, + FILE_DIRECTORY_FILE, NULL, 0);