You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
3.6 KiB
159 lines
3.6 KiB
/*++
|
|
|
|
Copyright (c) 1989 - 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
fsctl.c
|
|
|
|
Abstract:
|
|
|
|
This module implements the mini redirector call down routines pertaining to
|
|
file system control(FSCTL) and Io Device Control (IOCTL) operations on file
|
|
system objects.
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#ifdef ALLOC_PRAGMA
|
|
#pragma alloc_text(PAGE, MRxSmbFsCtl)
|
|
#pragma alloc_text(PAGE, MRxSmbNotifyChangeDirectory)
|
|
#pragma alloc_text(PAGE, MRxSmbIoCtl)
|
|
#endif
|
|
|
|
//
|
|
// The local debug trace level
|
|
//
|
|
|
|
|
|
RXDT_DefineCategory(FSCTRL);
|
|
#define Dbg (DEBUG_TRACE_FSCTRL)
|
|
|
|
NTSTATUS
|
|
MRxSmbCoreIoCtl(
|
|
SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE);
|
|
|
|
|
|
NTSTATUS
|
|
MRxSmbFsCtl(
|
|
IN OUT PRX_CONTEXT RxContext)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine performs an FSCTL operation (remote) on a file across the network
|
|
|
|
Arguments:
|
|
|
|
RxContext - the RDBSS context
|
|
|
|
Return Value:
|
|
|
|
RXSTATUS - The return status for the operation
|
|
|
|
Notes:
|
|
|
|
The FSCTL's handled by a mini rdr can be classified into one of two categories.
|
|
In the first category are those FSCTL's whose implementation are shared between
|
|
RDBSS and the mini rdr's and in the second category are those FSCTL's which
|
|
are totally implemented by the mini rdr's. To this a third category can be
|
|
added, i.e., those FSCTL's which should never be seen by the mini rdr's. The
|
|
third category is solely intended as a debugging aid.
|
|
|
|
The FSCTL's handled by a mini rdr can be classified based on functionality
|
|
|
|
--*/
|
|
{
|
|
RxCaptureFobx;
|
|
RxCaptureFcb;
|
|
|
|
NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
|
|
|
|
PLOWIO_CONTEXT pLowIoContext = &RxContext->LowIoContext;
|
|
ULONG FsControlCode = pLowIoContext->ParamsFor.FsCtl.FsControlCode;
|
|
|
|
PAGED_CODE();
|
|
|
|
RxDbgTrace(+1, Dbg, ("MRxSmbFsCtl...\n", 0));
|
|
RxDbgTrace( 0, Dbg, ("MRxSmbFsCtl = %08lx\n", FsControlCode));
|
|
RxDbgTrace(-1, Dbg, ("MRxSmbFsCtl -> %08lx\n", Status ));
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
MRxSmbNotifyChangeDirectory(
|
|
IN OUT PRX_CONTEXT RxContext)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine performs a directory change notification operation
|
|
|
|
Arguments:
|
|
|
|
RxContext - the RDBSS context
|
|
|
|
Return Value:
|
|
|
|
RXSTATUS - The return status for the operation
|
|
|
|
Notes:
|
|
|
|
A directory change notification opertaion is an asychronous operation. It
|
|
consists of sending a SMB requesting change notification whose response is
|
|
obtained when the desired change is affected on the server.
|
|
|
|
--*/
|
|
{
|
|
NTSTATUS Status = STATUS_NOT_IMPLEMENTED;
|
|
|
|
RxDbgTrace(+1, Dbg, ("MRxNotifyChangeDirectory...Entry\n", 0));
|
|
|
|
RxDbgTrace(-1, Dbg, ("MRxSmbNotifyChangeDirectory -> %08lx\n", Status ));
|
|
|
|
return Status;
|
|
}
|
|
|
|
|
|
|
|
NTSTATUS
|
|
MRxSmbIoCtl(
|
|
IN OUT PRX_CONTEXT RxContext)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine performs an IOCTL operation. Currently, no calls are remoted; in
|
|
fact, the only call accepted is for debugging.
|
|
|
|
Arguments:
|
|
|
|
RxContext - the RDBSS context
|
|
|
|
Return Value:
|
|
|
|
RXSTATUS - The return status for the operation
|
|
|
|
Notes:
|
|
|
|
|
|
--*/
|
|
{
|
|
NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
|
|
|
|
PLOWIO_CONTEXT pLowIoContext = &RxContext->LowIoContext;
|
|
ULONG IoControlCode = pLowIoContext->ParamsFor.IoCtl.IoControlCode;
|
|
|
|
PAGED_CODE();
|
|
|
|
RxDbgTrace(+1, Dbg, ("MRxSmbIoCtl...\n", 0));
|
|
RxDbgTrace( 0, Dbg, ("MRxSmbIoCtl IOCTL: = %08lx\n", IoControlCode));
|
|
RxDbgTrace(-1, Dbg, ("MRxSmbIoCtl Status -> %08lx\n", Status ));
|
|
|
|
return Status;
|
|
}
|
|
|