|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
nt5csc.h
Abstract:
The global include file for nt5csc within the nt5csc library
Author:
Joe Linn (Joelinn) - Created 5-may-97
Revision History:
--*/
#ifndef _NT5CSC_H_
#define _NT5CSC_H_
//this include finds ntcsc.h from rdr2\inc
#include "..\csc\record.mgr\ntcsc.h"
#define CSC_AGENT_NOTIFIED (0x11111111)
#define CSC_AGENT_NOT_NOTIFIED (0x22222222)
extern LONG CscNetPresent; extern LONG CscAgentNotifiedOfNetStatusChange; extern LONG CscAgentNotifiedOfFullCache;
extern VOID CscNotifyAgentOfNetStatusChangeIfRequired(BOOLEAN fInvokeAutodial);
// this event and mutex is used for synchronizing the transitioning of a
// server entry from connected to disconnected mode
extern KEVENT CscServerEntryTransitioningEvent; extern FAST_MUTEX CscServerEntryTransitioningMutex;
extern FAST_MUTEX MRxSmbCscShadowReadWriteMutex;
//shared routines
INLINE BOOLEAN CscIsDfsOpen( PRX_CONTEXT RxContext) { ASSERT(RxContext->MajorFunction == IRP_MJ_CREATE);
return (RxContext->Create.NtCreateParameters.DfsContext != NULL); }
PDFS_NAME_CONTEXT CscIsValidDfsNameContext( PVOID pFsContext);
NTSTATUS CscDfsParseDfsPath( PUNICODE_STRING pDfsPath, PUNICODE_STRING pServerName, PUNICODE_STRING pSharePath, PUNICODE_STRING pFilePathRelativeToShare);
NTSTATUS CscGrabPathFromDfs( PFILE_OBJECT pFileObject, PDFS_NAME_CONTEXT pDfsNameContext);
NTSTATUS MRxSmbCscObtainShareHandles ( IN PUNICODE_STRING ShareName, IN BOOLEAN DisconnectedMode, IN BOOLEAN CopyChunkOpen, IN OUT PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry );
//acquire/release stuff
// Another view of the minirdr context in the RxContext is as
// links for Csc Synchronization. This is used both for read/write
// synchronization and open synchornization when surrogate opens are
// involved
typedef struct _MRXSMBCSC_SYNC_RX_CONTEXT { ULONG Dummy; //this is the cancel routine....it must not be filled in
USHORT TypeOfAcquire; UCHAR FcbLockWasDropped; LIST_ENTRY CscSyncLinks; } MRXSMBCSC_SYNC_RX_CONTEXT, *PMRXSMBCSC_SYNC_RX_CONTEXT;
#define MRxSmbGetMinirdrContextForCscSync(pRxContext) \
((PMRXSMBCSC_SYNC_RX_CONTEXT)(&(pRxContext)->MRxContext[0]))
#define Shared_SmbFcbAcquire SmbFcb_HeldShared
#define Exclusive_SmbFcbAcquire SmbFcb_HeldExclusive
#define DroppingFcbLock_SmbFcbAcquire 0x80000000
#define FailImmediately_SmbFcbAcquire 0x40000000
typedef struct _SID_CONTEXT_ { PSID pSid; PVOID Context; } SID_CONTEXT, *PSID_CONTEXT;
NTSTATUS MRxSmbCscAcquireSmbFcb ( IN OUT PRX_CONTEXT RxContext, IN ULONG TypeOfAcquirePlusFlags, OUT SMBFCB_HOLDING_STATE *SmbFcbHoldingState );
VOID MRxSmbCscReleaseSmbFcb ( IN OUT PRX_CONTEXT RxContext, IN SMBFCB_HOLDING_STATE *SmbFcbHoldingState );
VOID MRxSmbCSCResumeAllOutstandingOperations( PSMBCEDB_SERVER_ENTRY pServerEntry );
// Control flag definitions for creating shadow handles
#define CREATESHADOW_NO_SPECIAL_CONTROLS 0x0000
#define CREATESHADOW_CONTROL_NOCREATE 0x0001
#define CREATESHADOW_CONTROL_NOREVERSELOOKUP 0x0002
#define CREATESHADOW_CONTROL_NOCREATELEAF 0x0004
#define CREATESHADOW_CONTROL_NOCREATENONLEAF 0x0008
#define CREATESHADOW_CONTROL_SPARSECREATE 0x0010
#define CREATESHADOW_CONTROL_FILE_WITH_HEURISTIC 0x0020 //.exe or .dll
#define CREATESHADOW_CONTROL_FAIL_IF_MARKED_FOR_DELETION 0x0040
#define CREATESHADOW_CONTROL_DO_SHARE_ACCESS_CHECK 0x0080
#define CREATESHADOW_CONTROL_STRIP_SHARE_NAME 0x0100
#ifdef DEBUG
//Hook dbgprint interface
#define HookKdPrint(__bit,__x) {\
if (((HOOK_KDP_##__bit)==0) || FlagOn(HookKdPrintVector,(HOOK_KDP_##__bit))) {\ KdPrint (__x);\ }\ } #define HOOK_KDP_ALWAYS 0x00000000
#define HOOK_KDP_BADERRORS 0x00000001
#define HOOK_KDP_NAME 0x00000002
#define HOOK_KDP_NET 0x00000004
#define HOOK_KDP_RW 0x00000008
#define HOOK_KDP_TRANSITION 0x00000010
#define HOOK_KDP_AGENT 0x00000020
#define HOOK_KDP_IOCTL 0x00000040
#define HOOK_KDP_BITCOPY 0x00000080
#define HOOK_KDP_GOOD_DEFAULT (HOOK_KDP_BADERRORS \
| 0)
extern ULONG HookKdPrintVector; extern ULONG HookKdPrintVectorDef; #else
#define HookKdPrint(__bit,__x) {NOTHING;}
#endif
extern NTSTATUS MRxSmbCscCreateShadowFromPath ( IN PUNICODE_STRING AlreadyPrefixedName, IN PCSC_ROOT_INFO pCscRootInfo, OUT _WIN32_FIND_DATA *Find32, OUT PBOOLEAN Created OPTIONAL, IN ULONG Controls, IN OUT PMINIMAL_CSC_SMBFCB MinimalCscSmbFcb, IN OUT PRX_CONTEXT RxContext, IN BOOLEAN fDisconnected, OUT ULONG *pulInheritedHintFlags );
#ifndef MRXSMB_BUILD_FOR_CSC_DCON
#define MRxSmbCscWriteDisconnected(__RXCONTEXT) (STATUS_SUCCESS)
#else
NTSTATUS MRxSmbCscWriteDisconnected ( IN OUT PRX_CONTEXT RxContext ); #endif
//NTSTATUS
//MRxSmbCscSpecialShadowWriteForPagingIo (
// IN OUT PRX_CONTEXT RxContext,
// IN ULONG ShadowFileLength,
// OUT PULONG LengthActuallyWritten
// );
#define CSC_REPORT_CHANGE(pNetRootEntry, pFcb, pSmbFcb, Filter, Action) \
(pNetRootEntry)->NetRoot.pNotifySync, \ &((pNetRootEntry)->NetRoot.DirNotifyList) \ (pFcb)->pPrivateAlreaydPrefixedName.Buffer, \ (USHORT)(GET_ALREADY_PREFIXED_NAME(pFcb)->PrivateAlreaydPrefixedName.Length - \ (pSmbFcb)->MinimalCscSmbFcb.LastComponentLength), \ NULL, \ NULL, \ (ULONG)Filter, \ (ULONG)Action, \ NULL)
#ifdef RX_PRIVATE_BUILD
#if 1
#ifdef RDBSSTRACE
extern ULONG MRxSmbCscDbgPrintF; #undef RxDbgTrace
#define RxDbgTrace(a,b,__d__) { if(MRxSmbCscDbgPrintF){DbgPrint __d__;}}
#undef RxDbgTraceUnIndent
#define RxDbgTraceUnIndent(a,b) {NOTHING;}
#endif //#ifdef RDBSSTRACE
#endif //if 1
#endif //ifdef RX_PRIVATE_BUILD
//CODE.IMPROVEMENT if we added another field to the large_integer union then we'd
// eliminate these 2 macros
#define COPY_LARGEINTEGER_TO_STRUCTFILETIME(dest,src) {\
(dest).dwLowDateTime = (src).LowPart; \ (dest).dwHighDateTime = (src).HighPart; \ } #define COPY_STRUCTFILETIME_TO_LARGEINTEGER(dest,src) {\
(dest).LowPart = (src).dwLowDateTime; \ (dest).HighPart = (src).dwHighDateTime; \ }
NTSTATUS CscDfsDoDfsNameMapping( PUNICODE_STRING pDfsPrefix, PUNICODE_STRING pActualPrefix, PUNICODE_STRING pNameToReverseMap, BOOL fResolvedNameToDFSName, PUNICODE_STRING pResult); NTSTATUS CscDfsObtainReverseMapping( PUNICODE_STRING pDfsPath, PUNICODE_STRING pResolvedPath, PUNICODE_STRING pReversemappingFrom, PUNICODE_STRING pReverseMappingTo); NTSTATUS CscDfsStripLeadingServerShare( IN PUNICODE_STRING pDfsRootPath );
BOOLEAN MRxSmbCSCIsDisconnectedOpen( PMRX_FCB pFcb, PMRX_SMB_SRV_OPEN smbSrvOpen );
BOOL CloseOpenFiles( HSHARE hShare, PUNICODE_STRING pServerName, int lenSkip ); VOID MRxSmbCSCObtainRightsForUserOnFile( IN PRX_CONTEXT pRxContext, HSHADOW hDir, HSHADOW hShadow, OUT ACCESS_MASK *pMaximalAccessRights, OUT ACCESS_MASK *pGuestMaximalAccessRights ); NTSTATUS CscRetrieveSid( PRX_CONTEXT pRxContext, PSID_CONTEXT pSidContext );
VOID CscDiscardSid( PSID_CONTEXT pSidContext );
#endif // _NT5CSC_H_
|