/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
-* FILE: drivers/fs/np/mount.c
+* FILE: drivers/filesystems/npfs/npfs.c
* PURPOSE: Named pipe filesystem
* PROGRAMMER: David Welch <welch@cwcom.net>
*/
PNPFS_FCB Fcb;
NTSTATUS Status;
+ UNREFERENCED_PARAMETER(RegistryPath);
+
DPRINT("Named Pipe FSD 0.0.2\n");
ASSERT (sizeof(NPFS_CONTEXT) <= FIELD_OFFSET(IRP, Tail.Overlay.DriverContext));
NpfsQueryVolumeInformation;
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = NpfsCleanup;
DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = NpfsFlushBuffers;
- // DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] =
- // NpfsDirectoryControl;
+ DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] =
+ NpfsDirectoryControl;
DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] =
NpfsFileSystemControl;
// DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] =
Vcb->MaxQuota = 64 * PAGE_SIZE;
/* Create the device FCB */
- Fcb = ExAllocatePool(NonPagedPool, sizeof(NPFS_FCB));
+ Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(NPFS_FCB), TAG_NPFS_FCB);
+ if (!Fcb)
+ {
+ DPRINT1("Out of memory for device FCB!\n");
+ IoDeleteDevice(DeviceObject);
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
Fcb->Type = FCB_DEVICE;
Fcb->Vcb = Vcb;
+ Fcb->RefCount = 1;
Vcb->DeviceFcb = Fcb;
/* Create the root directory FCB */
- Fcb = ExAllocatePool(NonPagedPool, sizeof(NPFS_FCB));
+ Fcb = ExAllocatePoolWithTag(NonPagedPool, sizeof(NPFS_FCB), TAG_NPFS_FCB);
+ if (!Fcb)
+ {
+ DPRINT1("Out of memory for root FCB!\n");
+ IoDeleteDevice(DeviceObject);
+ ExFreePoolWithTag(Vcb->DeviceFcb, TAG_NPFS_FCB);
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
Fcb->Type = FCB_DIRECTORY;
Fcb->Vcb = Vcb;
+ Fcb->RefCount = 1;
Vcb->RootFcb = Fcb;
return STATUS_SUCCESS;
}
+
+FCB_TYPE
+NpfsGetFcb(PFILE_OBJECT FileObject,
+ PNPFS_FCB *Fcb)
+{
+ PNPFS_FCB LocalFcb = NULL;
+ FCB_TYPE FcbType = FCB_INVALID;
+
+ _SEH2_TRY
+ {
+ LocalFcb = (PNPFS_FCB)FileObject->FsContext;
+ FcbType = LocalFcb->Type;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ LocalFcb = NULL;
+ FcbType = FCB_INVALID;
+ }
+ _SEH2_END;
+
+ *Fcb = LocalFcb;
+
+ return FcbType;
+}
+
+
+CCB_TYPE
+NpfsGetCcb(PFILE_OBJECT FileObject,
+ PNPFS_CCB *Ccb)
+{
+ PNPFS_CCB LocalCcb = NULL;
+ CCB_TYPE CcbType = CCB_INVALID;
+
+ _SEH2_TRY
+ {
+ LocalCcb = (PNPFS_CCB)FileObject->FsContext2;
+ CcbType = LocalCcb->Type;
+ }
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+ {
+ LocalCcb = NULL;
+ CcbType = CCB_INVALID;
+ }
+ _SEH2_END;
+
+ *Ccb = LocalCcb;
+
+ return CcbType;
+}
+
/* EOF */