- Fix error spotted by winetest: some status codes need to be normalized in CreateNamedPipeW - Fix some bugs in CreatePipe: use correct directory, use right access mask, use correct define name for blocking type, and use correct file sharing flags. Results of "kernel32_winetest pipe": 418 tests executed, 0 todo, 0 failures. (with NT NPFS, of course). Modified: trunk/reactos/lib/kernel32/file/npipe.c Modified: trunk/reactos/lib/kernel32/file/pipe.c _____
Modified: trunk/reactos/lib/kernel32/file/npipe.c --- trunk/reactos/lib/kernel32/file/npipe.c 2005-11-09 04:32:44 UTC (rev 19088) +++ trunk/reactos/lib/kernel32/file/npipe.c 2005-11-09 04:53:32 UTC (rev 19089) @@ -207,6 +207,13 @@
nOutBufferSize, &DefaultTimeOut);
+ /* Normalize special error codes */ + if ((Status == STATUS_INVALID_DEVICE_REQUEST) || + (Status == STATUS_NOT_SUPPORTED)) + { + Status = STATUS_OBJECT_NAME_INVALID; + } + /* Free the name */ RtlFreeUnicodeString(&NamedPipeName);
_____
Modified: trunk/reactos/lib/kernel32/file/pipe.c --- trunk/reactos/lib/kernel32/file/pipe.c 2005-11-09 04:32:44 UTC (rev 19088) +++ trunk/reactos/lib/kernel32/file/pipe.c 2005-11-09 04:53:32 UTC (rev 19089) @@ -54,7 +54,7 @@
/* Create the pipe name */ swprintf(Buffer, - L"\\.\PIPE\Win32Pipes.%08x.%08x", + L"\Device\NamedPipe\Win32Pipes.%08x.%08x", NtCurrentTeb()->Cid.UniqueProcess, PipeId); RtlInitUnicodeString(&PipeName, Buffer); @@ -81,15 +81,15 @@
/* Create the named pipe */ Status = NtCreateNamedPipeFile(&ReadPipeHandle, - FILE_GENERIC_READ |FILE_WRITE_ATTRIBUTES | SYNCHRONIZE, + GENERIC_READ |FILE_WRITE_ATTRIBUTES | SYNCHRONIZE, &ObjectAttributes, &StatusBlock, - FILE_SHARE_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_CREATE, FILE_SYNCHRONOUS_IO_NONALERT, FILE_PIPE_BYTE_STREAM_TYPE, FILE_PIPE_BYTE_STREAM_MODE, - FILE_PIPE_BYTE_STREAM_MODE, + FILE_PIPE_QUEUE_OPERATION, 1, nSize, nSize, @@ -97,6 +97,7 @@ if (!NT_SUCCESS(Status)) { /* Convert error and fail */ + DPRINT1("Status: %lx\n", Status); SetLastErrorByStatus(Status); return FALSE; } @@ -111,6 +112,7 @@ if (!NT_SUCCESS(Status)) { /* Convert error and fail */ + DPRINT1("Status: %lx\n", Status); NtClose(ReadPipeHandle); SetLastErrorByStatus(Status); return FALSE;