|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
smbprocs.h
Abstract:
Prototypes for routines that cross protocol-selection boundaries
Author:
Revision History:
--*/
#ifndef _SMBPROCS_H_
#define _SMBPROCS_H_
#include "exsessup.h"
#include "tdikrnl.h"
//cross-referenced internal routines
//from rename.c
MRxSmbRename( IN PRX_CONTEXT RxContext );
//from openclos.c
NTSTATUS MRxSmbBuildClose ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS MRxSmbBuildFindClose ( PSMBSTUFFER_BUFFER_STATE StufferState );
PSMBCE_TRANSPORT SmbCeFindTransport( PUNICODE_STRING pTransportName);
//paged internal routines
NTSTATUS MRxSmbSetConfigurationInformation( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbGetConfigurationInformation( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbSetDomainName( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbSetServerGuid( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbTestDevIoctl( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbExternalStart ( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbGetStatistics( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbDevFcbXXXControlFile ( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbQueryEaInformation ( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbSetEaInformation ( IN OUT struct _RX_CONTEXT * RxContext );
NTSTATUS MRxSmbQuerySecurityInformation ( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbSetSecurityInformation ( IN OUT struct _RX_CONTEXT * RxContext );
NTSTATUS MRxSmbQueryQuotaInformation ( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbSetQuotaInformation ( IN OUT struct _RX_CONTEXT * RxContext );
NTSTATUS MRxSmbLoadEaList( IN PRX_CONTEXT RxContext, IN PUCHAR UserEaList, IN ULONG UserEaListLength, OUT PFEALIST *ServerEaList );
VOID MRxSmbNtGeaListToOs2 ( IN PFILE_GET_EA_INFORMATION NtGetEaList, IN ULONG GeaListLength, IN PGEALIST GeaList );
PGEA MRxSmbNtGetEaToOs2 ( OUT PGEA Gea, IN PFILE_GET_EA_INFORMATION NtGetEa );
NTSTATUS MRxSmbQueryEasFromServer( IN PRX_CONTEXT RxContext, IN PFEALIST ServerEaList, IN PVOID Buffer, IN OUT PULONG BufferLengthRemaining, IN BOOLEAN ReturnSingleEntry, IN BOOLEAN UserEaListSupplied );
ULONG MRxSmbNtFullEaSizeToOs2 ( IN PFILE_FULL_EA_INFORMATION NtFullEa );
VOID MRxSmbNtFullListToOs2 ( IN PFILE_FULL_EA_INFORMATION NtEaList, IN PFEALIST FeaList );
PVOID MRxSmbNtFullEaToOs2 ( OUT PFEA Fea, IN PFILE_FULL_EA_INFORMATION NtFullEa );
NTSTATUS MRxSmbSetEaList( IN PRX_CONTEXT RxContext, IN PFEALIST ServerEaList );
NTSTATUS MRxSmbCreateFileSuccessTail ( PRX_CONTEXT RxContext, PBOOLEAN MustRegainExclusiveResource, SMBFCB_HOLDING_STATE *SmbFcbHoldingState, RX_FILE_TYPE StorageType, SMB_FILE_ID Fid, ULONG ServerVersion, UCHAR OplockLevel, ULONG CreateAction, PSMBPSE_FILEINFO_BUNDLE FileInfo );
NTSTATUS SmbCeInitializeExtendedSessionSetupExchange( PSMB_EXCHANGE* pExchangePtr, PMRX_V_NET_ROOT pVNetRoot);
VOID SmbCeDiscardExtendedSessionSetupExchange( PSMB_EXTENDED_SESSION_SETUP_EXCHANGE pExtSessionSetupExchange);
NTSTATUS SmbExtSecuritySessionSetupExchangeStart( PSMB_EXCHANGE pExchange);
NTSTATUS SmbExtSecuritySessionSetupExchangeReceive( IN struct _SMB_EXCHANGE *pExchange, // The exchange instance
IN ULONG BytesIndicated, IN ULONG BytesAvailable, OUT ULONG *pBytesTaken, IN PSMB_HEADER pSmbHeader, OUT PMDL *pDataBufferPointer, OUT PULONG pDataSize, IN ULONG ReceiveFlags);
NTSTATUS SmbExtSecuritySessionSetupExchangeSendCompletionHandler( IN PSMB_EXCHANGE pExchange, // The exchange instance
IN PMDL pXmitBuffer, IN NTSTATUS SendCompletionStatus);
NTSTATUS SmbConstructNetRootExchangeFinalize( PSMB_EXCHANGE pExchange, BOOLEAN *pPostFinalize);
VOID __MRxSmbAllocateSideBuffer( IN OUT PRX_CONTEXT RxContext, IN OUT PMRX_SMB_FOBX smbFobx, IN USHORT Setup #if DBG
,IN PUNICODE_STRING smbtemplate #endif
);
VOID MRxSmbDeallocateSideBuffer( IN OUT PRX_CONTEXT RxContext, IN OUT PMRX_SMB_FOBX smbFobx, IN PSZ where );
VOID MRxSmbTranslateLanManFindBuffer( PRX_CONTEXT RxContext, PULONG PreviousReturnedEntry, PBYTE ThisEntryInBuffer );
NTSTATUS MrxSmbUnalignedDirEntryCopyTail( IN OUT PRX_CONTEXT RxContext, IN FILE_INFORMATION_CLASS FileInformationClass, IN OUT PVOID pBuffer, IN OUT PULONG pLengthRemaining, IN OUT PMRX_SMB_FOBX smbFobx );
NTSTATUS MRxSmbQueryDirectory( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbQueryVolumeInformation( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbQueryVolumeInformationWithFullBuffer( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbSetVolumeInformation( IN OUT PRX_CONTEXT pRxContext );
NTSTATUS MRxSmbSetFileInformation ( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbQueryNamedPipeInformation( IN PRX_CONTEXT RxContext, IN FILE_INFORMATION_CLASS FileInformationClass, IN OUT PVOID pBuffer, IN OUT PULONG pLengthRemaining);
NTSTATUS MRxSmbSetNamedPipeInformation( IN PRX_CONTEXT RxContext, IN FILE_INFORMATION_CLASS FileInformationClass, IN PVOID pBuffer, IN ULONG BufferLength);
NTSTATUS MRxSmbSetFileInformationAtCleanup( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbIsValidDirectory( IN OUT PRX_CONTEXT RxContext, IN PUNICODE_STRING DirectoryName );
NTSTATUS MRxSmbFabricateAttributesOnNetRoot( IN OUT PSMBCE_NET_ROOT psmbNetRoot, IN PSMBCE_SERVER pServer );
NTSTATUS MRxSmbCoreInformation( IN OUT PRX_CONTEXT RxContext, IN ULONG InformationClass, IN OUT PVOID pBuffer, IN OUT PULONG pBufferLength, IN SMB_PSE_ORDINARY_EXCHANGE_ENTRYPOINTS EntryPoint );
NTSTATUS MRxSmbLoadCoreFileSearchBuffer( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
VOID MRxSmbCoreFileSeach_AssertFields(void);
NTSTATUS MRxSmbCoreFileSearch( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MrxSmbOemVolumeInfoToUnicode( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, ULONG *VolumeLabelLengthReturned );
MrxSmbCoreQueryFsVolumeInfo( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MrxSmbQueryFsVolumeInfo( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MrxSmbCoreQueryDiskAttributes( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MrxSmbQueryDiskAttributes( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS SmbPseExchangeStart_CoreInfo( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbFinishSearch ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_SEARCH Response );
NTSTATUS MRxSmbFinishQueryDiskInfo ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_QUERY_INFORMATION_DISK Response );
NTSTATUS MRxSmbExtendForCache( IN OUT struct _RX_CONTEXT * RxContext, IN PLARGE_INTEGER pNewFileSize, OUT PLARGE_INTEGER pNewAllocationSize );
NTSTATUS MRxSmbExtendForNonCache( IN OUT struct _RX_CONTEXT * RxContext, IN PLARGE_INTEGER pNewFileSize, OUT PLARGE_INTEGER pNewAllocationSize );
NTSTATUS MRxSmbGetNtAllocationInfo ( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS __MRxSmbSimpleSyncTransact2( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, IN SMB_PSE_ORDINARY_EXCHANGE_TYPE OEType, IN ULONG TransactSetupCode, IN PVOID Params, IN ULONG ParamsLength, IN PVOID Data, IN ULONG DataLength, IN PSMB_PSE_OE_T2_FIXUP_ROUTINE FixupRoutine );
NTSTATUS MRxSmbFinishTransaction2 ( IN OUT PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, IN PRESP_TRANSACTION Response );
NTSTATUS MRxSmbFsCtl( IN OUT PRX_CONTEXT RxContext);
VOID MRxSmbNotifyChangeDirectoryCompletion( struct _SMB_NOTIFY_CHANGE_DIRECTORY_CONTEXT_ *pNotificationContext);
NTSTATUS MRxSmbNotifyChangeDirectory( IN OUT PRX_CONTEXT RxContext);
NTSTATUS MRxSmbNamedPipeFsControl(PRX_CONTEXT RxContext);
NTSTATUS MRxSmbFsCtlUserTransact(PRX_CONTEXT RxContext);
NTSTATUS MRxSmbMailSlotFsControl(PRX_CONTEXT RxContext);
NTSTATUS MRxSmbDfsFsControl(PRX_CONTEXT RxContext);
NTSTATUS MRxSmbFsControl(PRX_CONTEXT RxContext);
NTSTATUS MRxSmbIoCtl( IN OUT PRX_CONTEXT RxContext);
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
VOID MRxSmbInitUnwind( IN PDRIVER_OBJECT DriverObject, IN enum _MRXSMB_INIT_STATES MRxSmbInitState );
VOID MRxSmbInitUnwindSmb( IN PDRIVER_OBJECT DriverObject, IN enum _MRXSMB_INIT_STATES MRxSmbInitState );
VOID MRxSmbInitUnwindBowser( IN PDRIVER_OBJECT DriverObject, IN enum _MRXSMB_INIT_STATES MRxSmbInitState );
VOID MRxSmbUnload( IN PDRIVER_OBJECT DriverObject );
NTSTATUS MRxSmbStart( PRX_CONTEXT RxContext, IN OUT PRDBSS_DEVICE_OBJECT RxDeviceObject );
NTSTATUS MRxSmbStop( PRX_CONTEXT RxContext, IN OUT PRDBSS_DEVICE_OBJECT RxDeviceObject );
NTSTATUS MRxSmbInitializeSecurity (VOID);
NTSTATUS MRxSmbUninitializeSecurity(VOID);
VOID MRxSmbReadMiscellaneousRegistryParameters();
NTSTATUS SmbCeGetConfigurationInformation();
NTSTATUS MRxSmbFsdDispatch ( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp );
VOID MRxSmbPreUnload( VOID );
NTSTATUS MRxSmbDeallocateForFcb ( IN OUT PMRX_FCB pFcb );
NTSTATUS MRxSmbDeallocateForFobx ( IN OUT PMRX_FOBX pFobx );
NTSTATUS MRxSmbGetUlongRegistryParameter( HANDLE ParametersHandle, PWCHAR ParameterName, PULONG ParamUlong, BOOLEAN LogFailure );
NTSTATUS MRxSmbInitializeTables(void);
NTSTATUS MRxSmbLocks( IN PRX_CONTEXT RxContext);
NTSTATUS MRxSmbBuildLocksAndX ( PSMBSTUFFER_BUFFER_STATE StufferState);
NTSTATUS MRxSmbBuildLockAssert ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS SmbPseExchangeStart_Locks( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbFinishLocks ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_LOCKING_ANDX Response );
NTSTATUS MRxSmbUnlockRoutine ( IN PRX_CONTEXT RxContext, IN PFILE_LOCK_INFO LockInfo );
NTSTATUS MRxSmbCompleteBufferingStateChangeRequest( IN OUT PRX_CONTEXT RxContext, IN OUT PMRX_SRV_OPEN SrvOpen, IN PVOID pContext );
NTSTATUS MRxSmbBuildFlush ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS MRxSmbFlush( IN PRX_CONTEXT RxContext);
NTSTATUS MRxSmbIsLockRealizable ( IN OUT PMRX_FCB pFcb, IN PLARGE_INTEGER ByteOffset, IN PLARGE_INTEGER Length, IN ULONG LowIoLockFlags );
NTSTATUS MRxSmbFinishFlush ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_FLUSH Response );
VOID _InitializeMidMapFreeList(struct _MID_MAP_ *pMidMap);
PMID_ATLAS FsRtlCreateMidAtlas( USHORT MaximumNumberOfMids, USHORT MidsAllocatedAtStart);
VOID _UninitializeMidMap( struct _MID_MAP_ *pMidMap, PCONTEXT_DESTRUCTOR pContextDestructor);
VOID FsRtlDestroyMidAtlas( PMID_ATLAS pMidAtlas, PCONTEXT_DESTRUCTOR pContextDestructor);
NTSTATUS BuildSessionSetupSecurityInformation( PSMB_EXCHANGE pExchange, PBYTE pSmbBuffer, PULONG pSmbBufferSize);
NTSTATUS BuildTreeConnectSecurityInformation( PSMB_EXCHANGE pExchange, PBYTE pBuffer, PBYTE pPasswordLength, PULONG pSmbBufferSize);
VOID MRxSmbMungeBufferingIfWriteOnlyHandles ( ULONG WriteOnlySrvOpenCount, PMRX_SRV_OPEN SrvOpen );
VOID MRxSmbCopyAndTranslatePipeState( IN OUT PRX_CONTEXT RxContext, IN ULONG PipeState );
BOOLEAN IsReconnectRequired( PMRX_SRV_CALL SrvCall);
BOOLEAN MRxSmbIsCreateWithEasSidsOrLongName( IN OUT PRX_CONTEXT RxContext, OUT PULONG DialectFlags );
NTSTATUS MRxSmbShouldTryToCollapseThisOpen ( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbCreate ( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbDeferredCreate ( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbCollapseOpen( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbComputeNewBufferingState( IN OUT PMRX_SRV_OPEN pMRxSrvOpen, IN PVOID pMRxContext, OUT PULONG pNewBufferingState);
NTSTATUS MRxSmbConstructDeferredOpenContext ( IN OUT PRX_CONTEXT RxContext );
VOID MRxSmbAdjustCreateParameters ( PRX_CONTEXT RxContext, PMRXSMB_CREATE_PARAMETERS smbcp );
VOID MRxSmbAdjustReturnedCreateAction( IN OUT PRX_CONTEXT RxContext );
NTSTATUS MRxSmbBuildNtCreateAndX ( PSMBSTUFFER_BUFFER_STATE StufferState, PMRXSMB_CREATE_PARAMETERS smbcp );
NTSTATUS MRxSmbBuildOpenAndX ( PSMBSTUFFER_BUFFER_STATE StufferState, PMRXSMB_CREATE_PARAMETERS smbcp );
NTSTATUS MRxSmbBuildOpenPrintFile ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS SmbPseExchangeStart_Create( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
VOID MRxSmbSetSrvOpenFlags ( PRX_CONTEXT RxContext, RX_FILE_TYPE StorageType, PMRX_SRV_OPEN SrvOpen, PMRX_SMB_SRV_OPEN smbSrvOpen );
NTSTATUS MRxSmbCreateFileSuccessTail ( PRX_CONTEXT RxContext, PBOOLEAN MustRegainExclusiveResource, SMBFCB_HOLDING_STATE *SmbFcbHoldingState, RX_FILE_TYPE StorageType, SMB_FILE_ID Fid, ULONG ServerVersion, UCHAR OplockLevel, ULONG CreateAction, PSMBPSE_FILEINFO_BUNDLE FileInfo );
NTSTATUS MRxSmbFinishNTCreateAndX ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_NT_CREATE_ANDX Response );
NTSTATUS MRxSmbFinishOpenAndX ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_OPEN_ANDX Response );
NTSTATUS MRxSmbFinishCreatePrintFile ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_OPEN_PRINT_FILE Response );
NTSTATUS MRxSmbFinishT2OpenFile ( IN OUT PRX_CONTEXT RxContext, IN PRESP_OPEN2 Response, IN OUT PBOOLEAN MustRegainExclusiveResource, IN OUT SMBFCB_HOLDING_STATE *SmbFcbHoldingState, IN ULONG ServerVersion );
NTSTATUS MRxSmbT2OpenFile( IN OUT PRX_CONTEXT RxContext, IN OUT SMBFCB_HOLDING_STATE *SmbFcbHoldingState );
NTSTATUS MRxSmbFinishLongNameCreateFile ( IN OUT PRX_CONTEXT RxContext, IN PRESP_CREATE_WITH_SD_OR_EA Response, IN PBOOLEAN MustRegainExclusiveResource, IN OUT SMBFCB_HOLDING_STATE *SmbFcbHoldingState, IN ULONG ServerVersion );
NTSTATUS MRxSmbCreateWithEasSidsOrLongName( IN OUT PRX_CONTEXT RxContext, IN OUT SMBFCB_HOLDING_STATE *SmbFcbHoldingState );
NTSTATUS MRxSmbZeroExtend( IN PRX_CONTEXT pRxContext);
NTSTATUS MRxSmbTruncate( IN PRX_CONTEXT pRxContext);
NTSTATUS MRxSmbCleanupFobx( IN PRX_CONTEXT RxContext);
NTSTATUS MRxSmbForcedClose( IN PMRX_SRV_OPEN pSrvOpen);
NTSTATUS MRxSmbCloseSrvOpen( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbBuildClose ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS MRxSmbBuildClosePrintFile ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS MRxSmbBuildFindClose ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS SmbPseExchangeStart_Close( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbFinishClose ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_CLOSE Response );
NTSTATUS MRxSmbGetFileAttributes( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbCoreDeleteForSupercedeOrClose( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, BOOLEAN DeleteDirectory );
NTSTATUS MRxSmbCoreCheckPath( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbCoreOpen( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, ULONG OpenShareMode, ULONG Attribute );
NTSTATUS MRxSmbSetFileAttributes( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, ULONG SmbAttributes );
NTSTATUS MRxSmbCoreCreateDirectory( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbCoreCreate( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, ULONG Attribute, BOOLEAN CreateNew );
NTSTATUS MRxSmbCloseAfterCoreCreate( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbCoreTruncate( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, ULONG Fid, ULONG FileTruncationPoint );
NTSTATUS MRxSmbDownlevelCreate( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbFinishCoreCreate ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_CREATE Response );
VOID MRxSmbPopulateFileInfoInOE( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, USHORT FileAttributes, ULONG LastWriteTimeInSeconds, ULONG FileSize );
NTSTATUS MRxSmbFinishCoreOpen ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_OPEN Response );
NTSTATUS MRxSmbPseudoOpenTailFromCoreCreateDirectory ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, USHORT Attributes );
NTSTATUS MRxSmbPseudoOpenTailFromFakeGFAResponse ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, RX_FILE_TYPE StorageType );
NTSTATUS MRxSmbPseudoOpenTailFromGFAResponse ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange );
LARGE_INTEGER MRxSmbConvertSmbTimeToTime ( //IN PSMB_EXCHANGE Exchange OPTIONAL,
IN PSMBCE_SERVER Server OPTIONAL, IN SMB_TIME Time, IN SMB_DATE Date );
BOOLEAN MRxSmbConvertTimeToSmbTime ( IN PLARGE_INTEGER InputTime, IN PSMB_EXCHANGE Exchange OPTIONAL, OUT PSMB_TIME Time, OUT PSMB_DATE Date );
BOOLEAN MRxSmbTimeToSecondsSince1970 ( IN PLARGE_INTEGER CurrentTime, IN PSMBCE_SERVER Server OPTIONAL, OUT PULONG SecondsSince1970 );
VOID MRxSmbSecondsSince1970ToTime ( IN ULONG SecondsSince1970, //IN PSMB_EXCHANGE Exchange OPTIONAL,
IN PSMBCE_SERVER Server, OUT PLARGE_INTEGER CurrentTime );
ULONG MRxSmbMapSmbAttributes ( IN USHORT SmbAttribs );
USHORT MRxSmbMapDisposition ( IN ULONG Disposition );
ULONG MRxSmbUnmapDisposition ( IN USHORT SmbDisposition, ULONG Disposition );
USHORT MRxSmbMapDesiredAccess ( IN ULONG DesiredAccess );
USHORT MRxSmbMapShareAccess ( IN USHORT ShareAccess );
USHORT MRxSmbMapFileAttributes ( IN ULONG FileAttributes );
NTSTATUS MRxSmbRead( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbBuildReadAndX ( PSMBSTUFFER_BUFFER_STATE StufferState, PLARGE_INTEGER ByteOffsetAsLI, ULONG ByteCount, ULONG RemainingBytes );
NTSTATUS MRxSmbBuildCoreRead ( PSMBSTUFFER_BUFFER_STATE StufferState, PLARGE_INTEGER ByteOffsetAsLI, ULONG ByteCount, ULONG RemainingBytes );
NTSTATUS MRxSmbBuildSmallRead ( PSMBSTUFFER_BUFFER_STATE StufferState, PLARGE_INTEGER ByteOffsetAsLI, ULONG ByteCount, ULONG RemainingBytes );
NTSTATUS SmbPseExchangeStart_Read( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbFinishNoCopyRead ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange );
MRxSmbRename( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbBuildRename ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS MRxSmbBuildDeleteForRename ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS SmbPseExchangeStart_Rename( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS MRxSmbFinishRename ( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PRESP_RENAME Response );
NTSTATUS MRxSmbBuildCheckEmptyDirectory ( PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS SmbPseExchangeStart_SetDeleteDisposition( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
MRxSmbSetDeleteDisposition( IN PRX_CONTEXT RxContext );
VOID MRxSmbInitializeRecurrentService( PRECURRENT_SERVICE_CONTEXT pRecurrentServiceContext, PRECURRENT_SERVICE_ROUTINE pServiceRoutine, PVOID pServiceRoutineParameter, PLARGE_INTEGER pTimeInterval);
VOID MRxSmbCancelRecurrentService( PRECURRENT_SERVICE_CONTEXT pRecurrentServiceContext);
VOID MRxSmbRecurrentServiceDispatcher( PVOID pContext);
NTSTATUS MRxSmbActivateRecurrentService( PRECURRENT_SERVICE_CONTEXT pRecurrentServiceContext);
NTSTATUS MRxSmbInitializeRecurrentServices();
VOID MRxSmbTearDownRecurrentServices();
NTSTATUS MRxSmbInitializeScavengerService( PMRXSMB_SCAVENGER_SERVICE_CONTEXT pScavengerServiceContext);
VOID MRxSmbTearDownScavengerService( PMRXSMB_SCAVENGER_SERVICE_CONTEXT pScavengerServiceContext);
NTSTATUS SmbCeNegotiate( PSMBCEDB_SERVER_ENTRY pServerEntry, PMRX_SRV_CALL pSrvCall, BOOLEAN RemoteBootSession);
NTSTATUS SmbCeSendEchoProbe( PSMBCEDB_SERVER_ENTRY pServerEntry, PMRXSMB_ECHO_PROBE_SERVICE_CONTEXT pEchoProbeContext);
NTSTATUS SmbCeDisconnect( PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext);
NTSTATUS SmbCeLogOff( PSMBCEDB_SERVER_ENTRY pServerEntry, PSMBCEDB_SESSION_ENTRY pSessionEntry);
NTSTATUS SmbCeInitializeAdminExchange( PSMB_ADMIN_EXCHANGE pSmbAdminExchange, PSMBCEDB_SERVER_ENTRY pServerEntry, PSMBCEDB_SESSION_ENTRY pSessionEntry, PSMBCEDB_NET_ROOT_ENTRY pNetRootEntry, UCHAR SmbCommand);
VOID SmbCeDiscardAdminExchange( PSMB_ADMIN_EXCHANGE pSmbAdminExchange);
NTSTATUS SmbCeCompleteAdminExchange( PSMB_ADMIN_EXCHANGE pSmbAdminExchange);
NTSTATUS SmbAdminExchangeStart( PSMB_EXCHANGE pExchange);
VOID SmbCeCreateSrvCall( PMRX_SRVCALL_CALLBACK_CONTEXT pCallbackContext);
NTSTATUS MRxSmbCreateSrvCall( PMRX_SRV_CALL pSrvCall, PMRX_SRVCALL_CALLBACK_CONTEXT pCallbackContext);
NTSTATUS MRxSmbFinalizeSrvCall( PMRX_SRV_CALL pSrvCall, BOOLEAN Force);
NTSTATUS MRxSmbSrvCallWinnerNotify( IN PMRX_SRV_CALL pSrvCall, IN BOOLEAN ThisMinirdrIsTheWinner, IN OUT PVOID pSrvCallContext);
NTSTATUS MRxSmbInitializeEchoProbeService( PMRXSMB_ECHO_PROBE_SERVICE_CONTEXT pEchoProbeContext);
VOID MRxSmbTearDownEchoProbeService( PMRXSMB_ECHO_PROBE_SERVICE_CONTEXT pEchoProbeContext);
VOID MRxSmbMaskNegotiateSmb ();
NTSTATUS BuildNegotiateSmb( PVOID *pSmbBufferPointer, PULONG pSmbBufferLength, BOOLEAN RemoteBootSession);
LARGE_INTEGER ConvertSmbTimeToTime ( IN SMB_TIME Time, IN SMB_DATE Date );
VOID __SmbPseDbgCheckOEMdls( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, PSZ MsgPrefix, PSZ File, unsigned Line );
NTSTATUS SmbPseContinueOrdinaryExchange( IN OUT PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange );
NTSTATUS SmbPseOrdinaryExchange( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, IN SMB_PSE_ORDINARY_EXCHANGE_TYPE OEType );
NTSTATUS __SmbPseCreateOrdinaryExchange ( IN PRX_CONTEXT RxContext, IN PMRX_V_NET_ROOT VNetRoot, IN SMB_PSE_ORDINARY_EXCHANGE_ENTRYPOINTS EntryPoint, IN PSMB_PSE_OE_START_ROUTINE StartRoutine, IN OUT SMBFCB_HOLDING_STATE *SmbFcbHoldingState OPTIONAL, OUT PSMB_PSE_ORDINARY_EXCHANGE *OrdinaryExchangePtr );
VOID SmbPseFinalizeOETrace(PSZ text,ULONG finalstate);
BOOLEAN SmbPseFinalizeOrdinaryExchange ( IN OUT PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange );
NTSTATUS SmbPseExchangeAssociatedExchangeCompletionHandler_default( IN OUT PSMB_EXCHANGE pExchange, OUT BOOLEAN *pPostFinalize );
NTSTATUS SmbPseExchangeStart_default( IN PSMB_EXCHANGE pExchange );
NTSTATUS SmbPseExchangeCopyDataHandler_Read( IN PSMB_EXCHANGE pExchange, IN PMDL pCopyDataBuffer, IN ULONG CopyDataSize );
VOID __SmbPseRMTableEntry( UCHAR SmbCommand, UCHAR Flags, SMBPSE_RECEIVE_HANDLER_TOKEN ReceiveHandlerToken, PSMBPSE_RECEIVE_HANDLER ReceiveHandler #if DBG
, PBYTE IndicationString, SMB_PSE_ORDINARY_EXCHANGE_TYPE LowType, SMB_PSE_ORDINARY_EXCHANGE_TYPE HighType #endif
);
VOID SmbPseInitializeTables( void );
NTSTATUS MRxSmbQueryDosVolumeInformation( IN OUT PRX_CONTEXT RxContext, IN OUT PVOID pBuffer, IN OUT PULONG pBufferLength );
VOID MRxSmbSetFixedStufferStateFields ( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState, IN PMDL Mdl, IN PSMB_EXCHANGE pExchange, IN PRX_CONTEXT RxContext, IN PBYTE ActualBufferBase, IN PBYTE BufferBase, IN PBYTE BufferLimit );
VOID SMBStuffHexDump( IN PBYTE Base, IN PBYTE Limit, IN ULONG AddressOffset );
VOID MRxSmbFakeUpAnMdl( IN OUT PMDL Mdl, IN PBYTE Base, IN ULONG Length );
VOID MRxSmbStfTestReadAndWrite();
VOID MRxSmbStfTestSessionStuff();
VOID MRxSmbStfTestMoreOpenStuff();
NTSTATUS MRxSmbStufferDebug( IN PRX_CONTEXT RxContext );
NTSTATUS MRxSmbBuildSmbHeaderTestSurrogate( PSMB_EXCHANGE pExchange, PVOID pBuffer, ULONG BufferLength, PULONG pBufferConsumed, PUCHAR pLastCommandInHeader, PUCHAR *pNextCommandPtr);
VOID SmbStuffWrapRtlAssert( IN PVOID FailedAssertion, IN PVOID FileName, IN ULONG LineNumber, IN PCHAR Message );
NTSTATUS SmbMrxFinalizeStufferFacilities( void );
NTSTATUS MRxSmbSetInitialSMB ( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState STUFFERTRACE_CONTROLPOINT_ARGS );
NTSTATUS MRxSmbStartSMBCommand ( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState, IN INITIAL_SMBBUG_DISPOSITION InitialSMBDisposition, IN UCHAR Command, //joejoe this next four params could come from a table...2offset and you're smaller
IN ULONG MaximumBufferUsed, IN ULONG MaximumSize, IN ULONG InitialAlignment, IN ULONG MaximumResponseHeader, IN UCHAR Flags, IN UCHAR FlagsMask, IN USHORT Flags2, IN USHORT Flags2Mask STUFFERTRACE_CONTROLPOINT_ARGS );
BOOLEAN MrxSMBWillThisFit( IN PSMBSTUFFER_BUFFER_STATE StufferState, IN ULONG AlignmentUnit, IN ULONG DataSize );
NTSTATUS MRxSmbStuffSMB ( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState, ... );
VOID MRxSmbStuffAppendRawData( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState, IN PMDL Mdl );
VOID MRxSmbStuffAppendSmbData( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState, IN PMDL Mdl );
VOID MRxSmbStuffSetByteCount( IN OUT PSMBSTUFFER_BUFFER_STATE StufferState );
NTSTATUS MRxSmbWrite ( IN PRX_CONTEXT RxContext);
NTSTATUS MRxSmbWriteMailSlot( PRX_CONTEXT RxContext );
NTSTATUS MRxSmbBuildWriteRequest( PSMB_PSE_ORDINARY_EXCHANGE OrdinaryExchange, BOOLEAN IsPagingIo, UCHAR WriteCommand, ULONG ByteCount, PLARGE_INTEGER ByteOffsetAsLI, PBYTE Buffer, PMDL BufferAsMdl);
NTSTATUS SmbPseExchangeStart_Write ( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE );
NTSTATUS BuildCanonicalNetRootInformation( PUNICODE_STRING pServerName, PUNICODE_STRING pNetRootName, NET_ROOT_TYPE NetRootType, BOOLEAN fUnicode, BOOLEAN fPostPendServiceString, PBYTE *pBufferPointer, PULONG pBufferSize);
NTSTATUS CoreBuildTreeConnectSmb( PSMB_EXCHANGE pExchange, PGENERIC_ANDX pAndXSmb, PULONG pAndXSmbBufferSize);
NTSTATUS LmBuildTreeConnectSmb( PSMB_EXCHANGE pExchange, PGENERIC_ANDX pAndXSmb, PULONG pAndXSmbBufferSize);
NTSTATUS NtBuildTreeConnectSmb( PSMB_EXCHANGE pExchange, PGENERIC_ANDX pAndXSmb, PULONG pAndXSmbBufferSize);
BOOLEAN MRxSmbPackStringIntoConnectInfo( IN PUNICODE_STRING String, IN PUNICODE_STRING Source, IN OUT PCHAR * BufferStart, IN OUT PCHAR * BufferEnd, IN ULONG BufferDisplacement, IN OUT PULONG TotalBytes );
BOOLEAN MRxSmbPackConnectEntry ( IN OUT PRX_CONTEXT RxContext, IN ULONG Level, IN OUT PCHAR *BufferStart, IN OUT PCHAR *BufferEnd, IN PV_NET_ROOT VNetRoot, IN OUT ULONG BufferDisplacement, OUT PULONG TotalBytesNeeded );
VOID MRxSmbGetConnectInfoLevel3Fields( IN OUT PLMR_CONNECTION_INFO_3 ConnectionInfo, IN PSMBCEDB_SERVER_ENTRY pServerEntry, IN BOOL fAgentCall
);
NTSTATUS MRxSmbEnumerateConnections ( IN PRX_CONTEXT RxContext, OUT PBOOLEAN PostToFsp );
NTSTATUS MRxSmbGetConnectionInfo ( IN PRX_CONTEXT RxContext, OUT PBOOLEAN PostToFsp );
NTSTATUS MRxSmbDeleteConnection ( IN PRX_CONTEXT RxContext, OUT PBOOLEAN PostToFsp );
NTSTATUS MRxEnumerateTransports( IN PRX_CONTEXT RxContext, OUT PBOOLEAN pPostToFsp);
NTSTATUS MRxEnumerateTransportBindings( IN PLMR_REQUEST_PACKET pLmrRequestPacket, IN ULONG LmrRequestPacketLength, OUT PVOID pBindingBuffer, IN OUT ULONG BindingBufferLength);
VOID MRxSmbDbgDumpMdlChain ( PMDL MdlChain, PMDL WatchMdl, PSZ Tagstring );
VOID MRxSmbTestStudCode(void);
NTSTATUS MRxSmbUpdateNetRootState( IN OUT PMRX_NET_ROOT pNetRoot);
ULONG MRxSmbGetDialectFlagsFromSrvCall( PMRX_SRV_CALL SrvCall );
NTSTATUS MRxSmbCreateVNetRoot( IN PMRX_CREATENETROOT_CONTEXT pCreateNetRootContext );
NTSTATUS MRxSmbFinalizeVNetRoot( IN PMRX_V_NET_ROOT pVNetRoot, IN PBOOLEAN ForceDisconnect);
NTSTATUS MRxSmbFinalizeNetRoot( IN PMRX_NET_ROOT pNetRoot, IN PBOOLEAN ForceDisconnect);
NTSTATUS SmbCeReconnect( IN PMRX_V_NET_ROOT pVNetRoot);
NTSTATUS SmbCeEstablishConnection( IN OUT PMRX_V_NET_ROOT pVNetRoot, IN PMRX_CREATENETROOT_CONTEXT pCreateNetRootContext, IN BOOLEAN fInitializeNetRoot );
NTSTATUS SmbConstructNetRootExchangeStart( PSMB_EXCHANGE pExchange);
NTSTATUS SmbConstructNetRootExchangeCopyDataHandler( IN PSMB_EXCHANGE pExchange, IN PMDL pCopyDataBuffer, IN ULONG DataSize);
NTSTATUS SmbConstructNetRootExchangeFinalize( PSMB_EXCHANGE pExchange, BOOLEAN *pPostFinalize);
VOID MRxSmbExtractNetRootName( IN PUNICODE_STRING FilePathName, IN PMRX_SRV_CALL SrvCall, OUT PUNICODE_STRING NetRootName, OUT PUNICODE_STRING RestOfName OPTIONAL );
NTSTATUS MRxSmbInitializeSmbCe();
NTSTATUS SmbCeReferenceServer( PSMB_EXCHANGE pExchange);
VOID SmbCeSerializeSessionSetupRequests( PSMBCEDB_SESSION_ENTRY pSessionEntry);
VOID SmbCeUnblockSerializedSessionSetupRequests( PSMBCEDB_SESSION_ENTRY pSessionEntry);
NTSTATUS SmbCeReferenceSession( PSMB_EXCHANGE pExchange);
NTSTATUS SmbCeReferenceNetRoot( PSMB_EXCHANGE pExchange);
NTSTATUS SmbCeInitiateExchange( PSMB_EXCHANGE pExchange);
NTSTATUS SmbCeInitiateAssociatedExchange( PSMB_EXCHANGE pExchange, BOOLEAN EnableCompletionHandlerInMasterExchange);
NTSTATUS SmbCeExchangeAbort( PSMB_EXCHANGE pExchange);
NTSTATUS SmbCeBuildSmbHeader( IN OUT PSMB_EXCHANGE pExchange, IN OUT PVOID pBuffer, IN ULONG BufferLength, OUT PULONG pBufferConsumed, OUT PUCHAR pLastCommandInHeader, OUT PUCHAR *pNextCommandPtr);
NTSTATUS SmbCeResumeExchange( PSMB_EXCHANGE pExchange);
NTSTATUS SmbCepInitializeExchange( PSMB_EXCHANGE *pExchangePointer, PRX_CONTEXT pRxContext, PSMBCEDB_SERVER_ENTRY pServerEntry, PMRX_V_NET_ROOT pVNetRoot, SMB_EXCHANGE_TYPE Type, PSMB_EXCHANGE_DISPATCH_VECTOR pDispatchVector);
NTSTATUS SmbCeInitializeAssociatedExchange( PSMB_EXCHANGE *pAssociatedExchangePointer, PSMB_EXCHANGE pMasterExchange, SMB_EXCHANGE_TYPE Type, PSMB_EXCHANGE_DISPATCH_VECTOR pDispatchVector);
NTSTATUS SmbCeTransformExchange( PSMB_EXCHANGE pExchange, SMB_EXCHANGE_TYPE NewType, PSMB_EXCHANGE_DISPATCH_VECTOR pDispatchVector);
NTSTATUS SmbCePrepareExchangeForReuse( PSMB_EXCHANGE pExchange);
NTSTATUS SmbCeUpdateSessionEntryAndVNetRootContext( PSMB_EXCHANGE pExchange);
VOID SmbCeDiscardExchange(PVOID pExchange);
VOID SmbCeDiscardExchangeWorkerThreadRoutine(PVOID pExchange);
NTSTATUS SmbCeCancelExchange( PRX_CONTEXT pRxContext);
VOID SmbCeFinalizeExchangeWorkerThreadRoutine( PSMB_EXCHANGE pExchange);
VOID SmbCepFinalizeExchange( PSMB_EXCHANGE pExchange);
BOOLEAN SmbCeCanExchangeBeFinalized( PSMB_EXCHANGE pExchange, PSMBCE_EXCHANGE_STATUS pExchangeStatus);
VOID SmbCeFinalizeExchangeOnDisconnect( PSMB_EXCHANGE pExchange);
VOID SmbCeSetExpiryTime( PSMB_EXCHANGE pExchange);
BOOLEAN SmbCeDetectExpiredExchanges( PSMBCEDB_SERVER_ENTRY pServerEntry);
NTSTATUS DefaultSmbExchangeIndError( IN PSMB_EXCHANGE pExchange);
NTSTATUS DefaultSmbExchangeIndReceive( IN PSMB_EXCHANGE pExchange);
NTSTATUS DefaultSmbExchangeIndSendCallback( IN PSMB_EXCHANGE pExchange);
VOID MRxSmbBindTransportCallback( IN PUNICODE_STRING pTransportName );
VOID MRxSmbUnbindTransportCallback( IN PUNICODE_STRING pTransportName );
NTSTATUS MRxSmbRegisterForPnpNotifications();
VOID MRxSmbpBindTransportCallback( IN struct _TRANSPORT_BIND_CONTEXT_ *pTransportContext);
VOID MRxSmbpBindTransportWorkerThreadRoutine( IN struct _TRANSPORT_BIND_CONTEXT_ *pTransportContext);
VOID MRxSmbpUnbindTransportCallback( PSMBCE_TRANSPORT pTransport);
NTSTATUS MRxSmbDeregisterForPnpNotifications();
NTSTATUS SmbCePnpBindBrowser( PUNICODE_STRING pTransportName, BOOLEAN IsBind);
NTSTATUS SmbCeDereferenceTransportArray( PSMBCE_TRANSPORT_ARRAY pTransportArray);
NTSTATUS SmbCeInitializeTransactionParameters( PVOID pSetup, USHORT SetupLength, PVOID pParam, ULONG ParamLength, PVOID pData, ULONG DataLength, PSMB_TRANSACTION_PARAMETERS pTransactionParameters );
VOID SmbCeUninitializeTransactionParameters( PSMB_TRANSACTION_PARAMETERS pTransactionParameters );
VOID SmbCeDiscardTransactExchange(PSMB_TRANSACT_EXCHANGE pTransactExchange);
NTSTATUS SmbCeSubmitTransactionRequest( PRX_CONTEXT RxContext, PSMB_TRANSACTION_OPTIONS pOptions, PSMB_TRANSACTION_PARAMETERS pSendParameters, PSMB_TRANSACTION_PARAMETERS pReceiveParameters, PSMB_TRANSACTION_RESUMPTION_CONTEXT pResumptionContext );
NTSTATUS _SmbCeTransact( PRX_CONTEXT RxContext, PSMB_TRANSACTION_OPTIONS pOptions, PVOID pInputSetupBuffer, ULONG InputSetupBufferLength, PVOID pOutputSetupBuffer, ULONG OutputSetupBufferLength, PVOID pInputParamBuffer, ULONG InputParamBufferLength, PVOID pOutputParamBuffer, ULONG OutputParamBufferLength, PVOID pInputDataBuffer, ULONG InputDataBufferLength, PVOID pOutputDataBuffer, ULONG OutputDataBufferLength, PSMB_TRANSACTION_RESUMPTION_CONTEXT pResumptionContext);
NTSTATUS SmbTransactBuildHeader( PSMB_TRANSACT_EXCHANGE pTransactExchange, UCHAR SmbCommand, PSMB_HEADER pHeader);
NTSTATUS SmbTransactExchangeStart( PSMB_EXCHANGE pExchange);
NTSTATUS SmbTransactExchangeAbort( PSMB_EXCHANGE pExchange);
NTSTATUS SmbTransactExchangeErrorHandler( IN PSMB_EXCHANGE pExchange);
NTSTATUS SmbTransactExchangeSendCallbackHandler( IN PSMB_EXCHANGE pExchange, IN PMDL pXmitBuffer, IN NTSTATUS SendCompletionStatus);
NTSTATUS SmbTransactExchangeCopyDataHandler( IN PSMB_EXCHANGE pExchange, IN PMDL pDataBuffer, IN ULONG DataSize);
NTSTATUS SmbCeInitializeTransactExchange( PSMB_TRANSACT_EXCHANGE pTransactExchange, PRX_CONTEXT RxContext, PSMB_TRANSACTION_OPTIONS pOptions, PSMB_TRANSACTION_SEND_PARAMETERS pSendParameters, PSMB_TRANSACTION_RECEIVE_PARAMETERS pReceiveParameters, PSMB_TRANSACTION_RESUMPTION_CONTEXT pResumptionContext);
NTSTATUS SmbTransactExchangeFinalize( PSMB_EXCHANGE pExchange, BOOLEAN *pPostFinalize);
NTSTATUS SendSecondaryRequests(PVOID pContext);
NTSTATUS SmbMmInit();
VOID SmbMmTearDown();
VOID SmbCeCompleteVNetRootContextInitialization( PVOID pContext);
VOID SmbCepDereferenceVNetRootContext( PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext);
NTSTATUS SmbCeDestroyAssociatedVNetRootContext( PMRX_V_NET_ROOT pVNetRoot);
VOID SmbCeTearDownVNetRootContext( PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext);
VOID SmbCeDecrementNumberOfActiveVNetRootOnSession( PSMBCE_V_NET_ROOT_CONTEXT pVNetRootContext );
NTSTATUS SmbCeScavenger( PVOID pContext);
NTSTATUS SmbCeScavengeRelatedContexts( PSMBCEDB_SERVER_ENTRY pServerEntry);
NTSTATUS SmbCeRemoteBootReconnect( PSMB_EXCHANGE pExchange, PRX_CONTEXT RxContext);
BOOLEAN SmbCeIsReconnectionRequired( PSMB_EXCHANGE pExchange, PRX_CONTEXT pRxContext);
NTSTATUS SmbCeSyncExchangeForSecuritySignature( PSMB_EXCHANGE pExchange );
VOID SmbCheckSecuritySignature( IN PSMB_EXCHANGE pExchange, IN PSMBCE_SERVER Server, IN ULONG MessageLength, IN PVOID pBuffer );
BOOLEAN SmbCheckSecuritySignaturePartial( IN PSMB_EXCHANGE pExchange, IN PSMBCE_SERVER Server, IN ULONG DataLength, IN PVOID pBuffer );
BOOLEAN SmbCheckSecuritySignatureWithMdl( IN PSMB_EXCHANGE pExchange, IN PSMBCE_SERVER Server, IN ULONG DataLength, IN PMDL Mdl);
NTSTATUS SmbCepRemoteBootReconnect( PSMB_EXCHANGE pExchange, PRX_CONTEXT RxContext);
NTSTATUS SmbCeRemoteBootReconnect( PSMB_EXCHANGE pExchange, PRX_CONTEXT RxContext);
VOID MRxSmbCreateFileInfoCache( PRX_CONTEXT RxContext, PSMBPSE_FILEINFO_BUNDLE FileInfo, PSMBCEDB_SERVER_ENTRY pServerEntry, NTSTATUS Status);
VOID MRxSmbCreateBasicFileInfoCache( PRX_CONTEXT RxContext, PFILE_BASIC_INFORMATION Basic, PSMBCEDB_SERVER_ENTRY pServerEntry, NTSTATUS Status);
VOID MRxSmbCreateStandardFileInfoCache( PRX_CONTEXT RxContext, PFILE_STANDARD_INFORMATION Standard, PSMBCEDB_SERVER_ENTRY pServerEntry, NTSTATUS Status);
VOID MRxSmbCreateInternalFileInfoCache( PRX_CONTEXT RxContext, PFILE_INTERNAL_INFORMATION Internal, PSMBCEDB_SERVER_ENTRY pServerEntry, NTSTATUS Status);
VOID MRxSmbUpdateFileInfoCacheStatus( PRX_CONTEXT RxContext, NTSTATUS Status);
VOID MRxSmbUpdateBasicFileInfoCacheStatus( PRX_CONTEXT RxContext, NTSTATUS Status);
VOID MRxSmbUpdateStandardFileInfoCacheStatus( PRX_CONTEXT RxContext, NTSTATUS Status);
VOID MRxSmbInvalidateFileInfoCache( PRX_CONTEXT RxContext);
VOID MRxSmbInvalidateBasicFileInfoCache( PRX_CONTEXT RxContext);
VOID MRxSmbInvalidateInternalFileInfoCache( PRX_CONTEXT RxContext);
VOID MRxSmbInvalidateStandardFileInfoCache( PRX_CONTEXT RxContext);
VOID MRxSmbUpdateFileInfoCacheFileSize( PRX_CONTEXT RxContext, PLARGE_INTEGER FileSize);
VOID MRxSmbUpdateBasicFileInfoCache( PRX_CONTEXT RxContext, ULONG FileAttributes, PLARGE_INTEGER pLastWriteTime);
VOID MRxSmbUpdateBasicFileInfoCacheAll( PRX_CONTEXT RxContext, PFILE_BASIC_INFORMATION Basic);
VOID MRxSmbUpdateStandardFileInfoCache( PRX_CONTEXT RxContext, PFILE_STANDARD_INFORMATION Standard, BOOLEAN IsDirectory);
BOOLEAN MRxSmbIsFileInfoCacheFound( PRX_CONTEXT RxContext, PSMBPSE_FILEINFO_BUNDLE FileInfo, NTSTATUS *Status, PUNICODE_STRING OriginalFileName);
BOOLEAN MRxSmbIsBasicFileInfoCacheFound( PRX_CONTEXT RxContext, PFILE_BASIC_INFORMATION Basic, NTSTATUS *Status, PUNICODE_STRING OriginalFileName);
BOOLEAN MRxSmbIsStandardFileInfoCacheFound( PRX_CONTEXT RxContext, PFILE_STANDARD_INFORMATION Standard, NTSTATUS *Status, PUNICODE_STRING OriginalFileName);
BOOLEAN MRxSmbIsInternalFileInfoCacheFound( PRX_CONTEXT RxContext, PFILE_INTERNAL_INFORMATION Internal, NTSTATUS *Status, PUNICODE_STRING OriginalFileName);
NTSTATUS MRxSmbGetFileInfoCacheStatus( PRX_CONTEXT RxContext);
BOOLEAN MRxSmbIsFileNotFoundCached( PRX_CONTEXT RxContext);
VOID MRxSmbCacheFileNotFound( PRX_CONTEXT RxContext);
VOID MRxSmbInvalidateFileNotFoundCache( PRX_CONTEXT RxContext);
VOID MRxSmbInvalidateFileNotFoundCacheForRename( PRX_CONTEXT RxContext );
BOOLEAN MRxSmbIsStreamFile( PUNICODE_STRING FileName, PUNICODE_STRING AdjustFileName);
VOID MRxSmbUpdateFileInfoCacheFromDelete( PRX_CONTEXT RxContext);
NTSTATUS MRxSmbQueryFileInformationFromPseudoOpen( SMBPSE_ORDINARY_EXCHANGE_ARGUMENT_SIGNATURE, FILE_INFORMATION_CLASS FileInformationClass);
BOOLEAN MRxSmbIsLongFileName( PRX_CONTEXT RxContext);
VOID SmbInitializeSmbSecuritySignature( IN OUT PSMBCE_SERVER Server, IN PUCHAR SessionKey, IN PUCHAR ChallengeResponse, IN ULONG ChallengeResponseLength);
NTSTATUS MRxSmbAreFilesAliased( IN PFCB Fcb1, IN PFCB Fcb2);
NTSTATUS MRxSmbPreparseName( IN OUT PRX_CONTEXT RxContext, IN PUNICODE_STRING Name );
NTSTATUS MRxSmbGetConnectionId( IN OUT PRX_CONTEXT RxContext, IN OUT PRX_CONNECTION_ID RxConnectionId );
VOID MRxSmbCacheFullDirectory( PRX_CONTEXT RxContext, IN PVOID Contents, IN ULONG Length, IN OUT PMRX_SMB_FOBX smbFobx);
VOID MRxSmbInvalidateFullDirectoryCache( PRX_CONTEXT RxContext);
BOOLEAN MRxSmbIsFullDirectoryCached( PRX_CONTEXT RxContext, OUT PVOID Contents, OUT PULONG Length, IN OUT PMRX_SMB_FOBX smbFobx, OUT NTSTATUS *Status);
VOID MRxSmbCreateParentFullDirPrefix( IN PUNICODE_STRING Source, IN OUT PUNICODE_STRING Target);
VOID MRxSmbInvalidateFullDirectoryCacheParent( PRX_CONTEXT RxContext, BOOLEAN Benign);
VOID MRxSmbInvalidateFullDirectoryCacheParentForRename( PRX_CONTEXT RxContext, BOOLEAN Benign);
VOID MRxSmbCreateSuffix( PUNICODE_STRING Source, PUNICODE_STRING Target);
VOID MRxSmbCreateTargetFullDirPrefix( IN PUNICODE_STRING Source, IN OUT PUNICODE_STRING Target);
BOOLEAN MRxSmbIsFileInFullDirectoryCache( PRX_CONTEXT RxContext, PBOOLEAN FileFound, PFILE_BASIC_INFORMATION pBuffer );
BOOLEAN MRxSmbIsFileInPartialDirectoryCache ( PNAME_CACHE NameCache, PUNICODE_STRING OriginalFileName, PBOOLEAN CacheValid, PFILE_BASIC_INFORMATION pBuffer);
BOOLEAN MRxSmbNonTrivialFileName( PRX_CONTEXT RxContext);
#if DBG
#define MRxSmbAllocateSideBuffer(a,b,c,d) __MRxSmbAllocateSideBuffer(a,b,c,d)
#else
#define MRxSmbAllocateSideBuffer(a,b,c,d) __MRxSmbAllocateSideBuffer(a,b,c)
#endif
#endif // _SMBMRX_H_
|