http://bugs.winehq.org/show_bug.cgi?id=2508
Summary: CreateFile(directory_name,GENERIC_WRITE,...) returns STATUS_FILE_IS_A_DIRECTORY Product: Wine Version: 20040914 Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: wine-files AssignedTo: wine-bugs@winehq.org ReportedBy: shiva@sewingwitch.com
While testing the beta Tribes: Vengeance dedicated server, I found that it tests for a writable directory with this sequence:
000b:Call kernel32.CreateFileW(10415fc0 L"Z:\home\vengeance\Server\Program\Bin\",40000000,00000007,00000000,00000003,02000000,00000000) ret=1015b46d 000b:Call ntdll.RtlIsDosDeviceName_U(10415fc0 L"Z:\home\vengeance\Server\Program\Bin\") ret=554b4506 000b:Ret ntdll.RtlIsDosDeviceName_U() retval=00000000 ret=554b4506 000b:Call ntdll.RtlDosPathNameToNtPathName_U(10415fc0 L"Z:\home\vengeance\Server\Program\Bin\",559bebb0,00000000,00000000) ret=554b42c7 000b:Ret ntdll.RtlDosPathNameToNtPathName_U() retval=00000001 ret=554b42c7 000b:Call ntdll.NtCreateFile(559beba4,40000000,559bebb8,559beba8,00000000,00000000,00000007,00000001,00004010,00000000,00000000) ret=554b438f 000b:Ret ntdll.NtCreateFile() retval=c00000ba ret=554b438f 000b:Call ntdll.RtlNtStatusToDosError(c00000ba) ret=554b43bd 000b:Ret ntdll.RtlNtStatusToDosError() retval=00000005 ret=554b43bd 000b:Call ntdll.RtlFreeUnicodeString(559bebb0) ret=554b43cc 000b:Ret ntdll.RtlFreeUnicodeString() retval=00000001 ret=554b43cc 000b:Ret kernel32.CreateFileW() retval=ffffffff ret=1015b46d
As you can see, this fails in NtCreateFile() (create_file() in server/file.c).
Running the program in Win2k with strace, I see this and think it's the comparable call:
3169 2264 1668 NtCreateFile (0x40100080, {24, 0, 0x40, 0, 2288836, "??\K:\Games\tvserver\Server\Program\Bin"}, 0x0, 0, 7, 1, 16416, 0, 0, ... 124, {status=0x0, info=1}, ) == 0x0