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.

252 lines
6.4 KiB

  1. /*++
  2. Copyright (c) 1989 - 1999 Microsoft Corporation
  3. Module Name:
  4. mrxglbl.h
  5. Abstract:
  6. The global include file for SMB mini redirector
  7. --*/
  8. #ifndef _MRXGLBL_H_
  9. #define _MRXGLBL_H_
  10. #include <lmstats.h>
  11. #define SmbCeLog(x) \
  12. RxLog(x)
  13. //
  14. // the SMB protocol tree connections are identified by a Tree Id., each
  15. // file opened on a tree connection by a File Id. and each outstanding request
  16. // on that connection by a Multiplex Id.
  17. //
  18. typedef USHORT SMB_TREE_ID;
  19. typedef USHORT SMB_FILE_ID;
  20. typedef USHORT SMB_MPX_ID;
  21. //
  22. // Each user w.r.t a particular connection is identified by a User Id. and each
  23. // process on the client side is identified by a Process id.
  24. //
  25. typedef USHORT SMB_USER_ID;
  26. typedef USHORT SMB_PROCESS_ID;
  27. //
  28. // All exchanges are identified with a unique id. assigned on creation of the exchange
  29. // which is used to track it.
  30. //
  31. typedef ULONG SMB_EXCHANGE_ID;
  32. //
  33. // Of the fields in this context the domain name is initialized during
  34. // MRxSmbSetConfiguration. The others are initialized in init.c as
  35. // parameters read from the registry
  36. //
  37. typedef STAT_WORKSTATION_0 MRX_SMB_STATISTICS;
  38. typedef PSTAT_WORKSTATION_0 PMRX_SMB_STATISTICS;
  39. extern MRX_SMB_STATISTICS MRxSmbStatistics;
  40. typedef struct _SMBCE_CONTEXT_ {
  41. UNICODE_STRING ComputerName;
  42. UNICODE_STRING OperatingSystem;
  43. UNICODE_STRING LanmanType;
  44. UNICODE_STRING Transports;
  45. } SMBCE_CONTEXT,*PSMBCE_CONTEXT;
  46. extern SMBCE_CONTEXT SmbCeContext;
  47. extern RXCE_ADDRESS_EVENT_HANDLER MRxSmbVctAddressEventHandler;
  48. extern RXCE_CONNECTION_EVENT_HANDLER MRxSmbVctConnectionEventHandler;
  49. extern PBYTE s_pNegotiateSmb;
  50. extern ULONG s_NegotiateSmbLength;
  51. extern PMDL s_pNegotiateSmbBuffer;
  52. extern PBYTE s_pEchoSmb;
  53. extern ULONG s_EchoSmbLength;
  54. extern PMDL s_pEchoSmbMdl;
  55. extern FAST_MUTEX MRxSmbSerializationMutex;
  56. extern BOOLEAN MRxSmbObeyBindingOrder;
  57. // Miscellanous definitions
  58. #define DFS_OPEN_CONTEXT 0xFF444653
  59. typedef struct _DFS_NAME_CONTEXT_ {
  60. UNICODE_STRING UNCFileName;
  61. LONG NameContextType;
  62. ULONG Flags;
  63. } DFS_NAME_CONTEXT, *PDFS_NAME_CONTEXT;
  64. extern PBYTE MRxSmb_pPaddingData;
  65. #define SMBCE_PADDING_DATA_SIZE (32)
  66. typedef struct _MRXSMB_GLOBAL_PADDING {
  67. MDL Mdl;
  68. ULONG Pages[2]; //this can't possibly span more than two pages
  69. UCHAR Pad[SMBCE_PADDING_DATA_SIZE];
  70. } MRXSMB_GLOBAL_PADDING, *PMRXSMB_GLOBAL_PADDING;
  71. extern MRXSMB_GLOBAL_PADDING MrxSmbCeGlobalPadding;
  72. extern PEPROCESS RDBSSProcessPtr;
  73. extern PRDBSS_DEVICE_OBJECT MRxSmbDeviceObject;
  74. #define RxNetNameTable (*(MRxSmbDeviceObject->pRxNetNameTable))
  75. extern LONG MRxSmbNumberOfSrvOpens;
  76. extern PVOID MRxSmbPoRegistrationState;
  77. NTKERNELAPI
  78. PVOID
  79. PoRegisterSystemState (
  80. IN PVOID StateHandle,
  81. IN EXECUTION_STATE Flags
  82. );
  83. NTKERNELAPI
  84. VOID
  85. PoUnregisterSystemState (
  86. IN PVOID StateHandle
  87. );
  88. //
  89. // MRxSmbSecurityInitialized indicates whether MRxSmbInitializeSecurity
  90. // has been called.
  91. //
  92. extern BOOLEAN MRxSmbSecurityInitialized;
  93. #define MAXIMUM_PARTIAL_BUFFER_SIZE 65535 // Maximum size of a partial MDL
  94. #define MAXIMUM_SMB_BUFFER_SIZE 4356
  95. // The following scavenge interval is in seconds
  96. #define MRXSMB_V_NETROOT_CONTEXT_SCAVENGER_INTERVAL (40)
  97. // the following default interval for timed exchanges is in seconds
  98. #define MRXSMB_DEFAULT_TIMED_EXCHANGE_EXPIRY_TIME (60)
  99. #define RxBuildPartialMdlUsingOffset(SourceMdl,DestinationMdl,Offset,Length) \
  100. IoBuildPartialMdl(SourceMdl,\
  101. DestinationMdl,\
  102. (PBYTE)MmGetMdlVirtualAddress(SourceMdl)+Offset,\
  103. Length)
  104. #define RxBuildPaddingPartialMdl(DestinationMdl,Length) \
  105. RxBuildPartialMdlUsingOffset(&MrxSmbCeGlobalPadding.Mdl,DestinationMdl,0,Length)
  106. //we turn away async operations that are not wait by posting. if we can wait
  107. //then we turn off the sync flag so that things will just act synchronous
  108. #define TURN_BACK_ASYNCHRONOUS_OPERATIONS() { \
  109. if (FlagOn(RxContext->Flags,RX_CONTEXT_FLAG_ASYNC_OPERATION)) { \
  110. if (FlagOn(RxContext->Flags,RX_CONTEXT_FLAG_WAIT)) { \
  111. ClearFlag(RxContext->Flags,RX_CONTEXT_FLAG_ASYNC_OPERATION); \
  112. } else { \
  113. RxContext->PostRequest = TRUE; \
  114. return(STATUS_PENDING); \
  115. } \
  116. } \
  117. }
  118. typedef struct _MRXSMB_CONFIGURATION_DATA_ {
  119. ULONG MaximumNumberOfCommands;
  120. ULONG SessionTimeoutInterval;
  121. ULONG LockQuota;
  122. ULONG LockIncrement;
  123. ULONG MaximumLock;
  124. ULONG CachedFileTimeout;
  125. ULONG DormantFileTimeout;
  126. ULONG DormantFileLimit;
  127. ULONG MaximumNumberOfThreads;
  128. ULONG ConnectionTimeoutInterval;
  129. ULONG CharBufferSize;
  130. BOOLEAN UseOplocks;
  131. BOOLEAN UseUnlocksBehind;
  132. BOOLEAN UseCloseBehind;
  133. BOOLEAN UseLockReadUnlock;
  134. BOOLEAN UtilizeNtCaching;
  135. BOOLEAN UseRawRead;
  136. BOOLEAN UseRawWrite;
  137. BOOLEAN UseEncryption;
  138. } MRXSMB_CONFIGURATION, *PMRXSMB_CONFIGURATION;
  139. extern MRXSMB_CONFIGURATION MRxSmbConfiguration;
  140. //
  141. // Definitions for starting stopping theSMB mini redirector
  142. //
  143. typedef enum _MRXSMB_STATE_ {
  144. MRXSMB_STARTABLE,
  145. MRXSMB_START_IN_PROGRESS,
  146. MRXSMB_STARTED,
  147. MRXSMB_STOPPED
  148. } MRXSMB_STATE,*PMRXSMB_STATE;
  149. extern MRXSMB_STATE MRxSmbState;
  150. extern
  151. NTSTATUS
  152. MRxSmbInitializeSecurity (VOID);
  153. extern
  154. NTSTATUS
  155. MRxSmbUninitializeSecurity (VOID);
  156. extern
  157. NTSTATUS
  158. MRxSmbInitializeTransport(VOID);
  159. extern
  160. NTSTATUS
  161. MRxSmbUninitializeTransport(VOID);
  162. extern
  163. NTSTATUS
  164. MRxSmbRegisterForPnpNotifications();
  165. extern
  166. NTSTATUS
  167. MRxSmbDeregisterForPnpNotifications();
  168. extern NTSTATUS
  169. SmbCeEstablishConnection(
  170. IN PMRX_V_NET_ROOT pVNetRoot,
  171. IN PMRX_CREATENETROOT_CONTEXT pCreateNetRootContext,
  172. IN BOOLEAN fInitializeNetRoot);
  173. extern NTSTATUS
  174. SmbCeReconnect(
  175. IN PMRX_V_NET_ROOT pVNetRoot);
  176. NTSTATUS
  177. SmbCeGetComputerName(
  178. VOID
  179. );
  180. NTSTATUS
  181. SmbCeGetOperatingSystemInformation(
  182. VOID
  183. );
  184. #endif _MRXGLBL_H_
  185.