- 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).

svn path=/trunk/; revision=19089
This commit is contained in:
Alex Ionescu 2005-11-09 04:53:32 +00:00
parent 2300542dbc
commit a1713a521f
2 changed files with 13 additions and 4 deletions

View file

@ -207,6 +207,13 @@ CreateNamedPipeW(LPCWSTR lpName,
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);

View file

@ -54,7 +54,7 @@ CreatePipe(PHANDLE hReadPipe,
/* 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 @@ CreatePipe(PHANDLE hReadPipe,
/* 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 @@ CreatePipe(PHANDLE hReadPipe,
if (!NT_SUCCESS(Status))
{
/* Convert error and fail */
DPRINT1("Status: %lx\n", Status);
SetLastErrorByStatus(Status);
return FALSE;
}
@ -111,6 +112,7 @@ CreatePipe(PHANDLE hReadPipe,
if (!NT_SUCCESS(Status))
{
/* Convert error and fail */
DPRINT1("Status: %lx\n", Status);
NtClose(ReadPipeHandle);
SetLastErrorByStatus(Status);
return FALSE;