/*++ 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_