Implement FSCTL_PIPE_DISCONNECT in NtFsControlFile and make

DisconnectNamedPipe call it.
This commit is contained in:
Ivan Leo Puoti 2005-08-18 10:59:26 +00:00 committed by Alexandre Julliard
parent 7f6554b7d1
commit aab12f5f7c
2 changed files with 43 additions and 25 deletions

View file

@ -50,6 +50,7 @@
#include "winerror.h"
#include "winnls.h"
#include "winternl.h"
#include "winioctl.h"
#include "wine/server.h"
#include "wine/unicode.h"
@ -1357,22 +1358,28 @@ BOOL WINAPI ConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED overlapped)
/***********************************************************************
* DisconnectNamedPipe (KERNEL32.@)
*
* Disconnects from a named pipe
*
* Parameters
* hPipe: A handle to a named pipe returned by CreateNamedPipe
*
* Return values
* TRUE: Success
* FALSE: Failure, GetLastError can be called for further details
*/
BOOL WINAPI DisconnectNamedPipe(HANDLE hPipe)
{
BOOL ret;
NTSTATUS status;
IO_STATUS_BLOCK io_block;
TRACE("(%p)\n",hPipe);
SERVER_START_REQ( disconnect_named_pipe )
{
req->handle = hPipe;
ret = !wine_server_call_err( req );
if (ret && reply->fd != -1) close( reply->fd );
}
SERVER_END_REQ;
return ret;
status = NtFsControlFile(hPipe, 0, NULL, NULL, &io_block, FSCTL_PIPE_DISCONNECT,
NULL, 0, NULL, 0);
if (status == STATUS_SUCCESS) return TRUE;
SetLastError( RtlNtStatusToDosError(status) );
return FALSE;
}
/***********************************************************************

View file

@ -866,22 +866,33 @@ NTSTATUS WINAPI NtDeviceIoControlFile(HANDLE DeviceHandle, HANDLE hEvent,
* NtFsControlFile [NTDLL.@]
* ZwFsControlFile [NTDLL.@]
*/
NTSTATUS WINAPI NtFsControlFile(
IN HANDLE DeviceHandle,
IN HANDLE Event OPTIONAL,
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
IN PVOID ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG IoControlCode,
IN PVOID InputBuffer,
IN ULONG InputBufferSize,
OUT PVOID OutputBuffer,
IN ULONG OutputBufferSize)
NTSTATUS WINAPI NtFsControlFile(HANDLE DeviceHandle, HANDLE Event OPTIONAL, PIO_APC_ROUTINE ApcRoutine,
PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG IoControlCode,
PVOID InputBuffer, ULONG InputBufferSize, PVOID OutputBuffer, ULONG OutputBufferSize)
{
FIXME("(%p,%p,%p,%p,%p,0x%08lx,%p,0x%08lx,%p,0x%08lx): stub\n",
DeviceHandle,Event,ApcRoutine,ApcContext,IoStatusBlock,IoControlCode,
InputBuffer,InputBufferSize,OutputBuffer,OutputBufferSize);
return 0;
NTSTATUS ret;
TRACE("(%p,%p,%p,%p,%p,0x%08lx,%p,0x%08lx,%p,0x%08lx)\n",
DeviceHandle,Event,ApcRoutine,ApcContext,IoStatusBlock,IoControlCode,
InputBuffer,InputBufferSize,OutputBuffer,OutputBufferSize);
if(!IoStatusBlock) return STATUS_INVALID_PARAMETER;
switch(IoControlCode)
{
case FSCTL_PIPE_DISCONNECT :
SERVER_START_REQ(disconnect_named_pipe)
{
req->handle = DeviceHandle;
ret = wine_server_call(req);
if (!ret && reply->fd != -1) close(reply->fd);
}
SERVER_END_REQ;
return ret;
default :
FIXME("Unsupported IoControlCode %lx\n", IoControlCode);
return STATUS_NOT_SUPPORTED;
}
}
/******************************************************************************