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.

191 lines
5.3 KiB

  1. typedef struct _NT5CSC_MINIFILEOBJECT {
  2. NODE_TYPE_CODE_AND_SIZE_NO_REFCOUNT;
  3. ULONG Flags;
  4. HANDLE NtHandle;
  5. PFILE_OBJECT UnderlyingFileObject;
  6. union {
  7. struct {
  8. //cant do this PDEVICE_OBJECT UnderlyingDeviceObject;
  9. FAST_MUTEX MutexForSynchronousIo; //only synchronous Io is allowed
  10. union {
  11. FILE_STANDARD_INFORMATION StandardInfo;
  12. FILE_BASIC_INFORMATION BasicInfo;
  13. FILE_FS_SIZE_INFORMATION FsSizeInfo;
  14. FILE_FS_FULL_SIZE_INFORMATION FsFullSizeInfo;
  15. };
  16. ULONG ReturnedLength;
  17. };
  18. struct {
  19. KEVENT PostEvent;
  20. union {
  21. RX_WORK_QUEUE_ITEM WorkQueueItem;
  22. NTSTATUS PostReturnStatus;
  23. };
  24. //this must match the signatureof Nt5CscCreateFile
  25. LPSTR lpPath;
  26. BOOL fInstrument;
  27. ULONG FileAttributes;
  28. ULONG CreateOptions;
  29. ULONG Disposition;
  30. ULONG ShareAccess;
  31. ACCESS_MASK DesiredAccess;
  32. PVOID Continuation; //PNT5CSC_CREATEFILE_CONTINUATION Continuation;
  33. PVOID ContinuationContext;
  34. } PostXX;
  35. };
  36. } NT5CSC_MINIFILEOBJECT, *PNT5CSC_MINIFILEOBJECT;
  37. #define NT5CSC_MINIFOBJ_FLAG_ALLOCATED_FROM_POOL 0x00000001
  38. #define NT5CSC_MINIFOBJ_FLAG_LOUDDOWNCALLS 0x00000080
  39. #define NT5CSC_NTC_MINIFILEOBJECT ((USHORT)0xed34)
  40. #define ASSERT_MINIRDRFILEOBJECT(___m) ASSERT(NodeType(___m)==NT5CSC_NTC_MINIFILEOBJECT)
  41. //LOUD DOWNCALLS
  42. #ifdef RX_PRIVATE_BUILD
  43. //#define MRXSMBCSC_LOUDDOWNCALLS
  44. #else
  45. #undef MRXSMBCSC_LOUDDOWNCALLS
  46. #endif
  47. #ifdef MRXSMBCSC_LOUDDOWNCALLS
  48. VOID
  49. LoudCallsDbgPrint(
  50. PSZ Tag,
  51. PNT5CSC_MINIFILEOBJECT MiniFileObject,
  52. ULONG MajorFunction,
  53. ULONG lCount,
  54. ULONG LowPart,
  55. ULONG HighPart,
  56. ULONG Status,
  57. ULONG Information
  58. );
  59. #define IF_LOUD_DOWNCALLS(__minifileobj) \
  60. if(FlagOn((__minifileobj)->Flags,NT5CSC_MINIFOBJ_FLAG_LOUDDOWNCALLS))
  61. #define LOUD_DOWNCALLS_DECL(__x) __x
  62. #define LOUD_DOWNCALLS_CODE(__x) __x
  63. #define IF_BUILT_FOR_LOUD_DOWNCALLS() if(TRUE)
  64. #else
  65. #define LoudCallsDbgPrint(a1,a2,a3,a4,a5,a6,a7,a8) {NOTHING;}
  66. #define IF_LOUD_DOWNCALLS(__minifileobj) if(FALSE)
  67. #define LOUD_DOWNCALLS_DECL(__x)
  68. #define LOUD_DOWNCALLS_CODE(__x)
  69. #define IF_BUILT_FOR_LOUD_DOWNCALLS() if(FALSE)
  70. #endif //#ifdef MRXSMBCSC_LOUDDOWNCALLS
  71. //long R0ReadWriteFileEx
  72. // (
  73. // ULONG uOper,
  74. // ULONG handle,
  75. // ULONG pos,
  76. // PVOID pBuff,
  77. // long lCount,
  78. // BOOL fInstrument
  79. // )
  80. #define NT5CSC_RW_FLAG_INSTRUMENTED 0x00000001
  81. #define NT5CSC_RW_FLAG_IRP_NOCACHE 0x00000002
  82. #define NT5CSC_RW_FLAG_PAGED_BUFFER 0x00000004
  83. LONG
  84. Nt5CscReadWriteFileEx (
  85. ULONG uOper,
  86. CSCHFILE handle,
  87. ULONGLONG pos,
  88. PVOID pBuff,
  89. long lCount,
  90. ULONG Flags,
  91. PIO_STATUS_BLOCK OutIoStatusBlock OPTIONAL
  92. );
  93. #define R0ReadWriteFileEx(__oper,__handle,__pos,__pbuff,__lcount,__instrument) \
  94. (Nt5CscReadWriteFileEx(__oper, \
  95. __handle, \
  96. __pos, \
  97. __pbuff, \
  98. __lcount, \
  99. (__instrument)?NT5CSC_RW_FLAG_INSTRUMENTED:0, \
  100. NULL \
  101. ))
  102. #define R0ReadWriteFileEx2(__oper,__handle,__pos,__pbuff,__lcount,__flags) \
  103. (Nt5CscReadWriteFileEx(__oper, \
  104. __handle, \
  105. __pos, \
  106. __pbuff, \
  107. __lcount, \
  108. ((__flags & FLAG_RW_OSLAYER_INSTRUMENT)?NT5CSC_RW_FLAG_INSTRUMENTED:0) \
  109. | ((__flags & FLAG_RW_OSLAYER_PAGED_BUFFER)?NT5CSC_RW_FLAG_PAGED_BUFFER:0), \
  110. NULL \
  111. ))
  112. extern IO_STATUS_BLOCK Nt5CscGlobalIoStatusBlock; //used by Nt5CscReadWriteFileEx
  113. NTSTATUS
  114. Nt5CscXxxInformation(
  115. IN PCHAR xMajorFunction,
  116. IN PNT5CSC_MINIFILEOBJECT MiniFileObject,
  117. IN ULONG InformationClass,
  118. IN ULONG Length,
  119. OUT PVOID Information,
  120. OUT PULONG ReturnedLength
  121. );
  122. BOOL
  123. CscAmIAdmin(
  124. VOID
  125. );
  126. typedef
  127. NTSTATUS
  128. (*PNT5CSC_CREATEFILE_CONTINUATION) (
  129. IN OUT PNT5CSC_MINIFILEOBJECT MiniFileObject,
  130. IN OUT PVOID ContinuationContext,
  131. IN NTSTATUS CreateStatus
  132. );
  133. PNT5CSC_MINIFILEOBJECT
  134. __Nt5CscCreateFile (
  135. IN OUT PNT5CSC_MINIFILEOBJECT MiniFileObject OPTIONAL,
  136. IN LPSTR lpPath,
  137. IN ULONG CSCFlags,
  138. IN ULONG FileAttributes,
  139. IN ULONG CreateOptions,
  140. IN ULONG Disposition,
  141. IN ULONG ShareAccess,
  142. IN ACCESS_MASK DesiredAccess,
  143. IN PNT5CSC_CREATEFILE_CONTINUATION Continuation,
  144. IN OUT PVOID ContinuationContext,
  145. IN BOOL PostedCall
  146. );
  147. int
  148. DeleteStream(
  149. LPTSTR lpdbID,
  150. ULONG ulidFile,
  151. LPTSTR str2Append
  152. );
  153. BOOL
  154. GetFileSystemAttributes(
  155. CSCHFILE handle,
  156. ULONG *lpFileSystemAttributes
  157. );
  158. BOOL
  159. HasStreamSupport(
  160. CSCHFILE handle,
  161. BOOL *lpfResult
  162. );