Fixed some NT compatibility issues in Nt[Query/Set]InformationFile().
[reactos.git] / reactos / drivers / fs / np / fsctrl.c
1 /* $Id: fsctrl.c,v 1.4 2001/06/12 12:35:04 ekohl Exp $
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/fs/np/fsctrl.c
6 * PURPOSE: Named pipe filesystem
7 * PROGRAMMER: David Welch <welch@cwcom.net>
8 * Eric Kohl <ekohl@rz-online.de>
9 */
10
11 /* INCLUDES ******************************************************************/
12
13 #include <ddk/ntddk.h>
14 #include "npfs.h"
15
16 //#define NDEBUG
17 #include <debug.h>
18
19
20 /* FUNCTIONS *****************************************************************/
21
22 static NTSTATUS
23 NpfsConnectPipe(PNPFS_FCB Fcb)
24 {
25 NTSTATUS Status;
26
27 DPRINT("Waiting for connection...\n");
28
29 Status = KeWaitForSingleObject(&Fcb->ConnectEvent,
30 UserRequest,
31 KernelMode,
32 FALSE,
33 NULL);
34
35 DPRINT("Finished waiting! Status: %x\n", Status);
36
37 DPRINT("Client Fcb: %p\n", Fcb->OtherSide);
38
39
40 return STATUS_SUCCESS;
41 }
42
43
44 static NTSTATUS
45 NpfsDisconnectPipe(PNPFS_FCB Fcb)
46 {
47
48 return STATUS_SUCCESS;
49 }
50
51
52 static NTSTATUS
53 NpfsWaitPipe(PNPFS_FCB Fcb)
54 {
55
56 return STATUS_SUCCESS;
57 }
58
59
60 NTSTATUS STDCALL
61 NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject,
62 PIRP Irp)
63 {
64 PIO_STACK_LOCATION IoStack;
65 PFILE_OBJECT FileObject;
66 NTSTATUS Status;
67 PNPFS_DEVICE_EXTENSION DeviceExt;
68 PNPFS_PIPE Pipe;
69 PNPFS_FCB Fcb;
70
71 DPRINT("NpfsFileSystemContol(DeviceObject %p Irp %p)\n", DeviceObject, Irp);
72
73 DeviceExt = (PNPFS_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
74 IoStack = IoGetCurrentIrpStackLocation(Irp);
75 FileObject = IoStack->FileObject;
76 DPRINT("FileObject: %p\n", FileObject);
77 Fcb = FileObject->FsContext;
78 Pipe = Fcb->Pipe;
79
80 switch (IoStack->Parameters.FileSystemControl.IoControlCode)
81 {
82 case FSCTL_PIPE_LISTEN:
83 DPRINT("Connecting pipe %wZ\n", &Pipe->PipeName);
84 Status = NpfsConnectPipe(Fcb);
85 break;
86
87 case FSCTL_PIPE_DISCONNECT:
88 DPRINT("Disconnecting pipe %wZ\n", &Pipe->PipeName);
89 Status = NpfsDisconnectPipe(Fcb);
90 break;
91
92 case FSCTL_PIPE_WAIT:
93 DPRINT("Waiting for pipe %wZ\n", &Pipe->PipeName);
94 Status = NpfsWaitPipe(Fcb);
95 break;
96
97 default:
98 DPRINT("IoControlCode: %x\n", IoStack->Parameters.FileSystemControl.IoControlCode)
99 Status = STATUS_UNSUCCESSFUL;
100 }
101
102 Irp->IoStatus.Status = Status;
103 Irp->IoStatus.Information = 0;
104
105 IoCompleteRequest(Irp, IO_NO_INCREMENT);
106
107 return(Status);
108 }
109
110 /* EOF */