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.

196 lines
5.1 KiB

  1. /*++
  2. Copyright (c) 1991 - 1999 Microsoft Corporation
  3. Module Name:
  4. Stuffer.h
  5. Abstract:
  6. Prototypes for the SMBstuffer formating primitives
  7. --*/
  8. #ifndef _SMBSTUFFER_INCLUDED_
  9. #define _SMBSTUFFER_INCLUDED_
  10. IMPORTANT_STRUCTURE(SMBSTUFFER_BUFFER_STATE);
  11. #define COVERED_CALL(x) {\
  12. Status = x; \
  13. if (Status != STATUS_SUCCESS) { \
  14. RxDbgTrace(0, Dbg,("nonSUCCESS covered status = %lx\n",Status)); \
  15. goto FINALLY; \
  16. } \
  17. ASSERT (StufferState->SpecificProblem == 0); \
  18. }
  19. #define MRXSMB_PROCESS_ID_ZERO (MRXSMB_PROCESS_ID - 1)
  20. #define MRXSMB_MULTIPLX_ID_ZERO (0xdead)
  21. #define MRXSMB_USER_ID_ZERO ((USHORT)'jj')
  22. #define MRXSMB_TREE_ID_ZERO (0xbaba)
  23. #define GetServerMaximumBufferSize(SRVCALL) 4356
  24. #define SMB_REQUEST_SIZE(___x) (FIELD_OFFSET(REQ_##___x,Buffer[0]))
  25. #if DBG
  26. #define SMB_OFFSET_CHECK(___x,___y) (FIELD_OFFSET(REQ_##___x,___y)),
  27. #define SMB_WCTBCC_CHECK(___x,___y) ( ((0x8000|(___z))<<16)+(FIELD_OFFSET(REQ_##___x,ByteCount)) ),
  28. #define SMB_WCT_CHECK(___z) ((0x8000|(___z))<<16),
  29. #else
  30. #define SMB_OFFSET_CHECK(___x,___y)
  31. #define SMB_WCTBCC_CHECK(___x,___y,___z)
  32. #define SMB_WCT_CHECK(___z)
  33. #endif
  34. typedef enum _SMBbuf_STATUS_DETAIL {
  35. xSMBbufSTATUS_OK,
  36. xSMBbufSTATUS_CANT_COMPOUND,
  37. xSMBbufSTATUS_HEADER_OVERRUN,
  38. xSMBbufSTATUS_BUFFER_OVERRUN,
  39. xSMBbufSTATUS_SERVER_OVERRUN,
  40. xSMBbufSTATUS_FLAGS_CONFLICT,
  41. xSMBbufSTATUS_MAXIMUM
  42. } SMBbuf_STATUS_DETAIL;
  43. //#define STUFFER_STATE_SIGNATURE ('fftS')
  44. typedef struct _SMBSTUFFER_BUFFER_STATE {
  45. NODE_TYPE_CODE NodeTypeCode; // node type.
  46. NODE_BYTE_SIZE NodeByteSize; // node size.
  47. // this stuff is fixed
  48. PMDL HeaderMdl;
  49. PMDL HeaderPartialMdl; //used for breaking up writes to avoid reallocation
  50. PBYTE ActualBufferBase;
  51. PBYTE BufferBase;
  52. PBYTE BufferLimit;
  53. //this stuff is reinitialized
  54. PRX_CONTEXT RxContext;
  55. PSMB_EXCHANGE Exchange;
  56. PMDL DataMdl;
  57. ULONG DataSize;
  58. //PRXCE_DATA_BUFFER FinalMdl; //for later with no chain-send rule
  59. PBYTE CurrentPosition;
  60. PBYTE CurrentWct;
  61. PBYTE CurrentBcc;
  62. PBYTE CurrentDataOffset;
  63. PBYTE CurrentParamOffset;
  64. UCHAR PreviousCommand;
  65. UCHAR CurrentCommand;
  66. UCHAR SpecificProblem; //SMBbuf_STATUS_DETAIL this is set to pass back what happened
  67. BOOLEAN Started;
  68. ULONG FlagsCopy;
  69. ULONG Flags2Copy;
  70. //ULONG FlagsMask;
  71. //ULONG Flags2Mask;
  72. #if DBG
  73. ULONG Signature;
  74. PDEBUG_TRACE_CONTROLPOINT ControlPoint;
  75. BOOLEAN PrintFLoop;
  76. BOOLEAN PrintCLoop;
  77. #endif
  78. } SMBSTUFFER_BUFFER_STATE;
  79. typedef enum _SMB_STUFFER_CONTROLS {
  80. STUFFER_CTL_NORMAL=1,
  81. STUFFER_CTL_SKIP, // only w,d,b can be in a skip string
  82. STUFFER_CTL_NOBYTES,
  83. STUFFER_CTL_ENDOFARGUMENTS,
  84. STUFFER_CTL_MAXIMUM
  85. } SMB_STUFFER_CONTROLS;
  86. #define StufferCondition(___c) ((___c)?STUFFER_CTL_NORMAL:STUFFER_CTL_SKIP)
  87. NTSTATUS
  88. SmbMrxInitializeStufferFacilities(
  89. void
  90. );
  91. NTSTATUS
  92. SmbMrxFinalizeStufferFacilities(
  93. void
  94. );
  95. #ifdef RDBSSTRACE
  96. #define STUFFERTRACE(CONTROLPOINT,__b__) ,(&RxDTPrefixRx CONTROLPOINT),(__b__)
  97. #define STUFFERTRACE_NOPREFIX(CONTROLPOINT,__b__) ,(CONTROLPOINT),(__b__)
  98. #define STUFFERTRACE_CONTROLPOINT_ARGS \
  99. ,IN PDEBUG_TRACE_CONTROLPOINT ControlPoint,IN ULONG EnablePrints
  100. #else
  101. #define STUFFERTRACE(__a__,__b__)
  102. #define STUFFERTRACE_NOPREFIX(__a__,__b__)
  103. #define STUFFERTRACE_CONTROLPOINT_ARGS
  104. #endif
  105. NTSTATUS
  106. MRxSmbSetInitialSMB (
  107. IN OUT PSMBSTUFFER_BUFFER_STATE StufferState
  108. STUFFERTRACE_CONTROLPOINT_ARGS
  109. );
  110. #define NO_EXTRA_DATA 0
  111. #define SMB_BEST_ALIGNMENT(__x,__y) ((__x<<16)|__y)
  112. #define NO_SPECIAL_ALIGNMENT 0
  113. #define RESPONSE_HEADER_SIZE_NOT_SPECIFIED 0
  114. typedef enum _INITIAL_SMBBUF_DISPOSITION {
  115. SetInitialSMB_yyUnconditionally, //no one should be using this right now!
  116. SetInitialSMB_ForReuse,
  117. SetInitialSMB_Never
  118. } INITIAL_SMBBUG_DISPOSITION;
  119. NTSTATUS
  120. MRxSmbStartSMBCommand (
  121. IN OUT PSMBSTUFFER_BUFFER_STATE StufferState,
  122. IN INITIAL_SMBBUG_DISPOSITION InitialSMBDisposition,
  123. IN UCHAR Command,
  124. IN ULONG MaximumBufferUsed,
  125. IN ULONG MaximumSize,
  126. IN ULONG InitialAlignment,
  127. IN ULONG MaximumResponseHeader,
  128. IN UCHAR Flags,
  129. IN UCHAR FlagsMask,
  130. IN USHORT Flags2,
  131. IN USHORT Flags2Mask
  132. STUFFERTRACE_CONTROLPOINT_ARGS
  133. );
  134. NTSTATUS
  135. MRxSmbStuffSMB (
  136. IN OUT PSMBSTUFFER_BUFFER_STATE StufferState,
  137. ...
  138. );
  139. VOID
  140. MRxSmbStuffAppendRawData(
  141. IN OUT PSMBSTUFFER_BUFFER_STATE StufferState,
  142. IN PMDL Mdl
  143. );
  144. VOID
  145. MRxSmbStuffAppendSmbData(
  146. IN OUT PSMBSTUFFER_BUFFER_STATE StufferState,
  147. IN PMDL Mdl
  148. );
  149. VOID
  150. MRxSmbStuffSetByteCount(
  151. IN OUT PSMBSTUFFER_BUFFER_STATE StufferState
  152. );
  153. BOOLEAN
  154. MrxSMBWillThisFit(
  155. IN PSMBSTUFFER_BUFFER_STATE StufferState,
  156. IN ULONG AlignmentUnit,
  157. IN ULONG DataSize
  158. );
  159. #define MRxSmbDumpStufferState(a,b,c)
  160. #endif // ifndef _SMBSTUFFER_INCLUDED_
  161.