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.

242 lines
5.5 KiB

  1. /*++
  2. Copyright (c) Microsoft Corporation
  3. Module Name:
  4. ntdllp.h
  5. Abstract:
  6. Private definitions for ntdll.
  7. Author:
  8. Michael J. Grier (mgrier) 6/30/2000
  9. Revision History:
  10. --*/
  11. #ifndef _NTDLLP_
  12. #define _NTDLLP_
  13. #pragma once
  14. #if defined(__cplusplus)
  15. extern "C" {
  16. #endif
  17. #include <nt.h>
  18. #include <ntrtl.h>
  19. #include <nturtl.h>
  20. #include <string.h>
  21. #include <sxstypes.h>
  22. #include <ntrtlpath.h>
  23. VOID
  24. NTAPI
  25. RtlpAssemblyStorageMapResolutionDefaultCallback(
  26. ULONG Reason,
  27. PASSEMBLY_STORAGE_MAP_RESOLUTION_CALLBACK_DATA Data,
  28. PVOID Context
  29. );
  30. NTSTATUS
  31. RtlpGetAssemblyStorageMapRootLocation(
  32. HANDLE KeyHandle,
  33. PCUNICODE_STRING SubKeyName,
  34. PUNICODE_STRING Root
  35. );
  36. VOID
  37. RtlpCheckRelativeDrive(
  38. WCHAR NewDrive
  39. );
  40. ULONG
  41. RtlIsDosDeviceName_Ustr(
  42. IN PCUNICODE_STRING DosFileName
  43. );
  44. ULONG
  45. RtlGetFullPathName_Ustr(
  46. PCUNICODE_STRING FileName,
  47. ULONG nBufferLength,
  48. PWSTR lpBuffer,
  49. PWSTR *lpFilePart OPTIONAL,
  50. PBOOLEAN NameInvalid,
  51. RTL_PATH_TYPE *InputPathType
  52. );
  53. NTSTATUS
  54. RtlGetFullPathName_UstrEx(
  55. PCUNICODE_STRING FileName,
  56. PUNICODE_STRING StaticString,
  57. PUNICODE_STRING DynamicString,
  58. PUNICODE_STRING *StringUsed,
  59. SIZE_T *FilePartPrefixCch OPTIONAL,
  60. PBOOLEAN NameInvalid,
  61. RTL_PATH_TYPE *InputPathType,
  62. OUT SIZE_T *BytesRequired OPTIONAL
  63. );
  64. BOOLEAN
  65. RtlDosPathNameToNtPathName_Ustr(
  66. IN PCUNICODE_STRING DosFileNameString,
  67. OUT PUNICODE_STRING NtFileName,
  68. OUT PWSTR *FilePart OPTIONAL,
  69. IN PVOID Reserved // Must be NULL
  70. );
  71. BOOLEAN
  72. RtlDosPathNameToRelativeNtPathName_Ustr(
  73. IN PCUNICODE_STRING DosFileNameString,
  74. OUT PUNICODE_STRING NtFileName,
  75. OUT PWSTR *FilePart OPTIONAL,
  76. OUT PRTL_RELATIVE_NAME_U RelativeName OPTIONAL
  77. );
  78. BOOLEAN
  79. RtlDoesFileExists_UStr(
  80. IN PCUNICODE_STRING FileName
  81. );
  82. BOOLEAN
  83. RtlDoesFileExists_UstrEx(
  84. IN PCUNICODE_STRING FileName,
  85. IN BOOLEAN TreatDeniedOrSharingAsHit
  86. );
  87. ULONG
  88. RtlpComputeBackupIndex(
  89. IN PCURDIR CurDir
  90. );
  91. ULONG
  92. RtlGetLongestNtPathLength(
  93. VOID
  94. );
  95. VOID
  96. RtlpResetDriveEnvironment(
  97. IN WCHAR DriveLetter
  98. );
  99. VOID
  100. RtlpValidateCurrentDirectory(
  101. PCURDIR CurDir
  102. );
  103. NTSTATUS
  104. RtlpCheckDeviceName(
  105. PCUNICODE_STRING DevName,
  106. ULONG DeviceNameOffset,
  107. BOOLEAN* NameInvalid
  108. );
  109. NTSTATUS
  110. RtlpWin32NTNameToNtPathName_U(
  111. IN PCUNICODE_STRING DosFileName,
  112. OUT PUNICODE_STRING NtFileName,
  113. OUT PWSTR *FilePart OPTIONAL,
  114. OUT PRTL_RELATIVE_NAME_U RelativeName OPTIONAL
  115. );
  116. #define RTLP_GOOD_DOS_ROOT_PATH 0
  117. #define RTLP_BAD_DOS_ROOT_PATH_WIN32NT_PREFIX 1 /* \\?\ */
  118. #define RTLP_BAD_DOS_ROOT_PATH_WIN32NT_UNC_PREFIX 2 /* \\?\unc */
  119. #define RTLP_BAD_DOS_ROOT_PATH_NT_PATH 3 /* \??\, this is only rough */
  120. #define RTLP_BAD_DOS_ROOT_PATH_MACHINE_NO_SHARE 4 /* \\machine or \\?\unc\machine */
  121. CONST CHAR*
  122. RtlpDbgBadDosRootPathTypeToString(
  123. IN ULONG Flags,
  124. IN ULONG RootType
  125. );
  126. NTSTATUS
  127. RtlpCheckForBadDosRootPath(
  128. IN ULONG Flags,
  129. IN PCUNICODE_STRING RootString,
  130. OUT ULONG* RootType
  131. );
  132. NTSTATUS
  133. NTAPI
  134. RtlpBadDosRootPathToEmptyString(
  135. IN ULONG Flags,
  136. IN OUT PUNICODE_STRING Path
  137. );
  138. #define RTL_DETERMINE_DOS_PATH_NAME_TYPE_IN_FLAG_OLD (0x00000010)
  139. //
  140. // This bit means to do extra validation on \\? paths, to reject \\?\a\b,
  141. // To only allow \\? followed by the documented forms \\?\unc\foo and \\?\c:
  142. //
  143. #define RTL_DETERMINE_DOS_PATH_NAME_TYPE_IN_FLAG_STRICT_WIN32NT (0x00000020)
  144. #define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_TYPE_MASK (0x0000000F)
  145. //
  146. // These bits add more information to RtlPathTypeUncAbsolute, which is what \\?
  147. // is reported as.
  148. //
  149. //
  150. // The path starts "\\?".
  151. //
  152. #define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_WIN32NT (0x00000010)
  153. //
  154. // The path starts "\\?\x:".
  155. //
  156. #define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_WIN32NT_DRIVE_ABSOLUTE (0x00000020)
  157. //
  158. // The path starts "\\?\unc".
  159. //
  160. #define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_WIN32NT_UNC_ABSOLUTE (0x00000040)
  161. //
  162. //future this would indicate \\machine instead of \\machine\share
  163. //define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_WIN32NT_UNC_MACHINE_ONLY (0x00000080)
  164. //future this would indicate \\ or \\?\unc
  165. //define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_WIN32NT_UNC_EMPTY (0x00000100)
  166. //
  167. //
  168. // So far, this means something like \\?\a was seen, instead of \\?\unc or \\?\a:
  169. // You have to request it with RTL_DETERMINE_DOS_PATH_NAME_TYPE_IN_FLAG_STRICT_WIN32NT.
  170. //
  171. #define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_INVALID (0x00000200)
  172. //
  173. // stuff like \\ \\? \\?\unc \\?\unc\
  174. //
  175. #define RTLP_DETERMINE_DOS_PATH_NAME_TYPE_OUT_FLAG_INCOMPLETE_ROOT (0x00000400)
  176. NTSTATUS
  177. NTAPI
  178. RtlpDetermineDosPathNameType4(
  179. IN ULONG InFlags,
  180. IN PCUNICODE_STRING DosPath,
  181. OUT RTL_PATH_TYPE* OutType,
  182. OUT ULONG* OutFlags
  183. );
  184. #define RTLP_IMPLIES(x,y) ((x) ? (y) : TRUE)
  185. extern RTL_CRITICAL_SECTION FastPebLock;
  186. #define RtlAcquirePebLock() ((VOID)RtlEnterCriticalSection (&FastPebLock))
  187. #define RtlReleasePebLock() ((VOID)RtlLeaveCriticalSection (&FastPebLock))
  188. #if defined(__cplusplus)
  189. }
  190. #endif
  191. #endif // _NTDLLP_