Leaked source code of windows server 2003
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.
 
 
 
 
 
 

464 lines
10 KiB

/*++
Copyright (c) 1989 - 1999 Microsoft Corporation
Module Name:
mrxglobs.h
Abstract:
The global include file for NULMRX mini-redirector
--*/
#ifndef _MRXGLOBS_H_
#define _MRXGLOBS_H_
extern PRDBSS_DEVICE_OBJECT NulMRxDeviceObject;
#define RxNetNameTable (*(*___MINIRDR_IMPORTS_NAME).pRxNetNameTable)
// The following enum type defines the various states associated with the null
// mini redirector. This is used during initialization
typedef enum _NULMRX_STATE_ {
NULMRX_STARTABLE,
NULMRX_START_IN_PROGRESS,
NULMRX_STARTED
} NULMRX_STATE,*PNULMRX_STATE;
extern NULMRX_STATE NulMRxState;
extern ULONG LogRate;
extern ULONG NulMRxVersion;
//
// Reg keys
//
#define NULL_MINIRDR_PARAMETERS \
L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\NulMRx\\Parameters"
//
// Use the RxDefineObj and RxCheckObj macros
// to enforce signed structs.
//
#define RxDefineObj( type, var ) \
var.Signature = type##_SIGNATURE;
#define RxCheckObj( type, var ) \
ASSERT( (var).Signature == type##_SIGNATURE );
//
// Use the RxDefineNode and RxCheckNode macros
// to enforce node signatures and sizes.
//
#define RxDefineNode( node, type ) \
node->NodeTypeCode = NTC_##type; \
node->NodeByteSize = sizeof(type);
#define RxCheckNode( node, type ) \
ASSERT( NodeType(node) == NTC_##type );
//
// struct node types - start from 0xFF00
//
typedef enum _NULMRX_STORAGE_TYPE_CODES {
NTC_NULMRX_DEVICE_EXTENSION = (NODE_TYPE_CODE)0xFF00,
NTC_NULMRX_SRVCALL_EXTENSION = (NODE_TYPE_CODE)0xFF01,
NTC_NULMRX_NETROOT_EXTENSION = (NODE_TYPE_CODE)0xFF02,
NTC_NULMRX_FCB_EXTENSION = (NODE_TYPE_CODE)0xFF03
} NULMRX_STORAGE_TYPE_CODES;
//
// typedef our device extension - stores state global to the driver
//
typedef struct _NULMRX_DEVICE_EXTENSION {
//
// Node type code and size
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
//
// Back-pointer to owning device object
//
PRDBSS_DEVICE_OBJECT DeviceObject;
//
// Count of active nodes
// Driver can be unloaded iff ActiveNodes == 0
//
ULONG ActiveNodes;
// Keep a list of local connections used
CHAR LocalConnections[26];
FAST_MUTEX LCMutex;
} NULMRX_DEVICE_EXTENSION, *PNULMRX_DEVICE_EXTENSION;
//
// typedef our srv-call extension - stores state global to a node
// NYI since wrapper does not allocate space for this..........!
//
typedef struct _NULMRX_SRVCALL_EXTENSION {
//
// Node type code and size
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
} NULMRX_SRVCALL_EXTENSION, *PNULMRX_SRVCALL_EXTENSION;
//
// NET_ROOT extension - stores state global to a root
//
typedef struct _NULMRX_NETROOT_EXTENSION {
//
// Node type code and size
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
} NULMRX_NETROOT_EXTENSION, *PNULMRX_NETROOT_EXTENSION;
//
// reinitialize netroot data
//
#define RxResetNetRootExtension(pNetRootExtension) \
RxDefineNode(pNetRootExtension,NULMRX_NETROOT_EXTENSION);
//
// typedef our FCB extension
// the FCB uniquely represents an IFS stream
// NOTE: Since we are not a paging file, this mem is paged !!!
//
typedef struct _NULMRX_FCB_EXTENSION_ {
//
// Node type code and size
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
} NULMRX_FCB_EXTENSION, *PNULMRX_FCB_EXTENSION;
//
// Macros to get & validate extensions
//
#define NulMRxGetDeviceExtension(RxContext,pExt) \
PNULMRX_DEVICE_EXTENSION pExt = (PNULMRX_DEVICE_EXTENSION)((PBYTE)(RxContext->RxDeviceObject) + sizeof(RDBSS_DEVICE_OBJECT))
#define NulMRxGetSrvCallExtension(pSrvCall, pExt) \
PNULMRX_SRVCALL_EXTENSION pExt = (((pSrvCall) == NULL) ? NULL : (PNULMRX_SRVCALL_EXTENSION)((pSrvCall)->Context))
#define NulMRxGetNetRootExtension(pNetRoot,pExt) \
PNULMRX_NETROOT_EXTENSION pExt = (((pNetRoot) == NULL) ? NULL : (PNULMRX_NETROOT_EXTENSION)((pNetRoot)->Context))
#define NulMRxGetFcbExtension(pFcb,pExt) \
PNULMRX_FCB_EXTENSION pExt = (((pFcb) == NULL) ? NULL : (PNULMRX_FCB_EXTENSION)((pFcb)->Context))
//
// forward declarations for all dispatch vector methods.
//
extern NTSTATUS
NulMRxStart (
IN OUT struct _RX_CONTEXT * RxContext,
IN OUT PRDBSS_DEVICE_OBJECT RxDeviceObject
);
extern NTSTATUS
NulMRxStop (
IN OUT struct _RX_CONTEXT * RxContext,
IN OUT PRDBSS_DEVICE_OBJECT RxDeviceObject
);
extern NTSTATUS
NulMRxMinirdrControl (
IN OUT PRX_CONTEXT RxContext,
IN OUT PVOID pContext,
IN OUT PUCHAR SharedBuffer,
IN ULONG InputBufferLength,
IN ULONG OutputBufferLength,
OUT PULONG CopyBackLength
);
extern NTSTATUS
NulMRxDevFcb (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxDevFcbXXXControlFile (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxCreate (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxCollapseOpen (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxShouldTryToCollapseThisOpen (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxRead (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxWrite (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxLocks(
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxFlush(
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxFsCtl(
IN OUT PRX_CONTEXT RxContext
);
NTSTATUS
NulMRxIoCtl(
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxNotifyChangeDirectory(
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxComputeNewBufferingState(
IN OUT PMRX_SRV_OPEN pSrvOpen,
IN PVOID pMRxContext,
OUT ULONG *pNewBufferingState);
extern NTSTATUS
NulMRxFlush (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxCloseWithDelete (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxZeroExtend (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxTruncate (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxCleanupFobx (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxCloseSrvOpen (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxClosedSrvOpenTimeOut (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxQueryDirectory (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxQueryEaInformation (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxSetEaInformation (
IN OUT struct _RX_CONTEXT * RxContext
);
extern NTSTATUS
NulMRxQuerySecurityInformation (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxSetSecurityInformation (
IN OUT struct _RX_CONTEXT * RxContext
);
extern NTSTATUS
NulMRxQueryVolumeInformation (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxSetVolumeInformation (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxLowIOSubmit (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxCreateVNetRoot(
IN OUT PMRX_CREATENETROOT_CONTEXT pContext
);
extern NTSTATUS
NulMRxFinalizeVNetRoot(
IN OUT PMRX_V_NET_ROOT pVirtualNetRoot,
IN PBOOLEAN ForceDisconnect);
extern NTSTATUS
NulMRxFinalizeNetRoot(
IN OUT PMRX_NET_ROOT pNetRoot,
IN PBOOLEAN ForceDisconnect);
extern NTSTATUS
NulMRxUpdateNetRootState(
IN PMRX_NET_ROOT pNetRoot);
VOID
NulMRxExtractNetRootName(
IN PUNICODE_STRING FilePathName,
IN PMRX_SRV_CALL SrvCall,
OUT PUNICODE_STRING NetRootName,
OUT PUNICODE_STRING RestOfName OPTIONAL
);
extern NTSTATUS
NulMRxCreateSrvCall(
PMRX_SRV_CALL pSrvCall,
PMRX_SRVCALL_CALLBACK_CONTEXT pCallbackContext);
extern NTSTATUS
NulMRxFinalizeSrvCall(
PMRX_SRV_CALL pSrvCall,
BOOLEAN Force);
extern NTSTATUS
NulMRxSrvCallWinnerNotify(
IN OUT PMRX_SRV_CALL pSrvCall,
IN BOOLEAN ThisMinirdrIsTheWinner,
IN OUT PVOID pSrvCallContext);
extern NTSTATUS
NulMRxQueryFileInformation (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxQueryNamedPipeInformation (
IN OUT PRX_CONTEXT RxContext,
IN FILE_INFORMATION_CLASS FileInformationClass,
IN OUT PVOID Buffer,
IN OUT PULONG pLengthRemaining
);
extern NTSTATUS
NulMRxSetFileInformation (
IN OUT PRX_CONTEXT RxContext
);
extern NTSTATUS
NulMRxSetNamedPipeInformation (
IN OUT PRX_CONTEXT RxContext,
IN FILE_INFORMATION_CLASS FileInformationClass,
IN PVOID pBuffer,
IN ULONG BufferLength
);
NTSTATUS
NulMRxSetFileInformationAtCleanup(
IN OUT PRX_CONTEXT RxContext
);
NTSTATUS
NulMRxDeallocateForFcb (
IN OUT PMRX_FCB pFcb
);
NTSTATUS
NulMRxDeallocateForFobx (
IN OUT PMRX_FOBX pFobx
);
extern NTSTATUS
NulMRxForcedClose (
IN OUT PMRX_SRV_OPEN SrvOpen
);
extern NTSTATUS
NulMRxExtendFile (
IN OUT struct _RX_CONTEXT * RxContext,
IN OUT PLARGE_INTEGER pNewFileSize,
OUT PLARGE_INTEGER pNewAllocationSize
);
extern NTSTATUS
NulMRxTruncateFile (
IN OUT struct _RX_CONTEXT * RxContext,
IN OUT PLARGE_INTEGER pNewFileSize,
OUT PLARGE_INTEGER pNewAllocationSize
);
extern NTSTATUS
NulMRxCompleteBufferingStateChangeRequest (
IN OUT PRX_CONTEXT RxContext,
IN OUT PMRX_SRV_OPEN SrvOpen,
IN PVOID pContext
);
extern NTSTATUS
NulMRxExtendForCache (
IN OUT PRX_CONTEXT RxContext,
IN OUT PFCB Fcb,
OUT PLONGLONG pNewFileSize
);
extern
NTSTATUS
NulMRxInitializeTransport(VOID);
extern
NTSTATUS
NulMRxUninitializeTransport(VOID);
#define NulMRxMakeSrvOpenKey(Tid,Fid) \
(PVOID)(((ULONG)(Tid) << 16) | (ULONG)(Fid))
#include "mrxprocs.h" // crossreferenced routines
#endif _MRXGLOBS_H_