159 lines
3.6 KiB
C
159 lines
3.6 KiB
C
/*++
|
||
|
||
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;
|
||
}
|
||
|