mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
94 lines
2.7 KiB
C
94 lines
2.7 KiB
C
/**
|
|
* @file sys/create.c
|
|
*
|
|
* @copyright 2015 Bill Zissimopoulos
|
|
*/
|
|
|
|
#include <sys/driver.h>
|
|
|
|
static NTSTATUS FspFsctlCreate(
|
|
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
|
|
static NTSTATUS FspFsvrtCreate(
|
|
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
|
|
static NTSTATUS FspFsvolCreate(
|
|
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
|
|
DRIVER_DISPATCH FspCreate;
|
|
FSP_IOCOMPLETION_DISPATCH FspCreateComplete;
|
|
|
|
#ifdef ALLOC_PRAGMA
|
|
#pragma alloc_text(PAGE, FspFsctlCreate)
|
|
#pragma alloc_text(PAGE, FspFsvrtCreate)
|
|
#pragma alloc_text(PAGE, FspFsvolCreate)
|
|
#pragma alloc_text(PAGE, FspCreate)
|
|
#pragma alloc_text(PAGE, FspCreateComplete)
|
|
#endif
|
|
|
|
static NTSTATUS FspFsctlCreate(
|
|
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
|
|
{
|
|
NTSTATUS Result = STATUS_SUCCESS;
|
|
Irp->IoStatus.Information = FILE_OPENED;
|
|
return Result;
|
|
}
|
|
|
|
static NTSTATUS FspFsvrtCreate(
|
|
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
|
|
{
|
|
NTSTATUS Result = STATUS_SUCCESS;
|
|
Irp->IoStatus.Information = FILE_OPENED;
|
|
return Result;
|
|
}
|
|
|
|
static NTSTATUS FspFsvolCreate(
|
|
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp)
|
|
{
|
|
return STATUS_INVALID_DEVICE_REQUEST;
|
|
}
|
|
|
|
NTSTATUS
|
|
FspCreate(
|
|
_In_ PDEVICE_OBJECT DeviceObject,
|
|
_In_ PIRP Irp)
|
|
{
|
|
FSP_ENTER_MJ(PAGED_CODE());
|
|
|
|
ASSERT(IRP_MJ_CREATE == IrpSp->MajorFunction);
|
|
|
|
switch (FspDeviceExtension(DeviceObject)->Kind)
|
|
{
|
|
case FspFsvolDeviceExtensionKind:
|
|
FSP_RETURN(Result = FspFsvolCreate(DeviceObject, Irp, IrpSp));
|
|
case FspFsvrtDeviceExtensionKind:
|
|
FSP_RETURN(Result = FspFsvrtCreate(DeviceObject, Irp, IrpSp));
|
|
case FspFsctlDeviceExtensionKind:
|
|
FSP_RETURN(Result = FspFsctlCreate(DeviceObject, Irp, IrpSp));
|
|
default:
|
|
FSP_RETURN(Result = STATUS_INVALID_DEVICE_REQUEST);
|
|
}
|
|
|
|
FSP_LEAVE_MJ(
|
|
"FileObject=%p[%p:\"%wZ\"], "
|
|
"Flags=%x, "
|
|
"DesiredAccess=%#lx, "
|
|
"ShareAccess=%#x, "
|
|
"Options=%#lx, "
|
|
"FileAttributes=%#x, "
|
|
"AllocationSize=%#lx:%#lx, "
|
|
"Ea=%p, EaLength=%ld",
|
|
IrpSp->FileObject, IrpSp->FileObject->RelatedFileObject, IrpSp->FileObject->FileName,
|
|
IrpSp->Flags,
|
|
IrpSp->Parameters.Create.SecurityContext->DesiredAccess,
|
|
IrpSp->Parameters.Create.ShareAccess,
|
|
IrpSp->Parameters.Create.Options,
|
|
IrpSp->Parameters.Create.FileAttributes,
|
|
Irp->Overlay.AllocationSize.HighPart, Irp->Overlay.AllocationSize.LowPart,
|
|
Irp->AssociatedIrp.SystemBuffer, IrpSp->Parameters.Create.EaLength);
|
|
}
|
|
|
|
VOID FspCreateComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
|
|
{
|
|
PAGED_CODE();
|
|
|
|
FspCompleteRequest(Irp, STATUS_SUCCESS);
|
|
}
|