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.

248 lines
6.9 KiB

  1. /*++
  2. Copyright (c) 1990 Microsoft Corporation
  3. Module Name:
  4. basertl.h
  5. Abstract:
  6. This is the main include file for the runtime routines that are shared
  7. by the client and server sides of the Windows Base API implementation.
  8. Author:
  9. Steve Wood (stevewo) 25-Oct-1990
  10. Revision History:
  11. --*/
  12. #if DBG
  13. #undef RTLHEAP_TRACE_CALLS
  14. #else
  15. #undef RTLHEAP_TRACE_CALLS
  16. #endif
  17. NTSTATUS
  18. BaseRtlCreateAtomTable(
  19. IN ULONG NumberOfBuckets,
  20. IN ULONG MaxAtomTableSize,
  21. OUT PVOID *AtomTableHandle
  22. );
  23. NTSTATUS
  24. BaseRtlDestroyAtomTable(
  25. IN PVOID AtomTableHandle
  26. );
  27. NTSTATUS
  28. BaseRtlAddAtomToAtomTable(
  29. IN PVOID AtomTableHandle,
  30. IN PUNICODE_STRING AtomName,
  31. IN PULONG AtomValue OPTIONAL,
  32. OUT PULONG Atom OPTIONAL
  33. );
  34. NTSTATUS
  35. BaseRtlLookupAtomInAtomTable(
  36. IN PVOID AtomTableHandle,
  37. IN PUNICODE_STRING AtomName,
  38. OUT PULONG AtomValue OPTIONAL,
  39. OUT PULONG Atom OPTIONAL
  40. );
  41. NTSTATUS
  42. BaseRtlSetAtomValueInAtomTable(
  43. IN PVOID AtomTableHandle,
  44. IN PUNICODE_STRING AtomName,
  45. IN ULONG AtomValue
  46. );
  47. NTSTATUS
  48. BaseRtlDeleteAtomFromAtomTable(
  49. IN PVOID AtomTableHandle,
  50. IN ULONG Atom
  51. );
  52. NTSTATUS
  53. BaseRtlQueryAtomInAtomTable(
  54. IN PVOID AtomTableHandle,
  55. IN ULONG Atom,
  56. IN OUT PUNICODE_STRING AtomName OPTIONAL,
  57. OUT PULONG AtomValue OPTIONAL,
  58. OUT PULONG AtomUsage OPTIONAL
  59. );
  60. typedef struct _BASE_HANDLE_TABLE_ENTRY {
  61. USHORT LockCount;
  62. USHORT Flags;
  63. union {
  64. struct _BASE_HANDLE_TABLE_ENTRY *Next; // Free handle
  65. PVOID Object; // Allocated handle
  66. ULONG Size; // Handle to discarded obj.
  67. } u;
  68. } BASE_HANDLE_TABLE_ENTRY, *PBASE_HANDLE_TABLE_ENTRY;
  69. #define BASE_HANDLE_FREE (USHORT)0x0001
  70. #define BASE_HANDLE_MOVEABLE (USHORT)0x0002
  71. #define BASE_HANDLE_DISCARDABLE (USHORT)0x0004
  72. #define BASE_HANDLE_DISCARDED (USHORT)0x0008
  73. #define BASE_HANDLE_SHARED (USHORT)0x8000
  74. //
  75. // Handles are 32-bit pointers to the u.Object field of a
  76. // BASE_HANDLE_TABLE_ENTRY. Since this field is 4 bytes into the
  77. // structure and the structures are always on 8 byte boundaries, we can
  78. // test the 0x4 bit to see if it is a handle.
  79. //
  80. #define BASE_HANDLE_MARK_BIT (ULONG)0x00000004
  81. #define BASE_HEAP_FLAG_MOVEABLE HEAP_SETTABLE_USER_FLAG1
  82. #define BASE_HEAP_FLAG_DDESHARE HEAP_SETTABLE_USER_FLAG2
  83. typedef struct _BASE_HANDLE_TABLE {
  84. ULONG MaximumNumberOfHandles;
  85. PBASE_HANDLE_TABLE_ENTRY FreeHandles;
  86. PBASE_HANDLE_TABLE_ENTRY CommittedHandles;
  87. PBASE_HANDLE_TABLE_ENTRY UnusedCommittedHandles;
  88. PBASE_HANDLE_TABLE_ENTRY UnCommittedHandles;
  89. PBASE_HANDLE_TABLE_ENTRY MaxReservedHandles;
  90. } BASE_HANDLE_TABLE, *PBASE_HANDLE_TABLE;
  91. NTSTATUS
  92. BaseRtlInitializeHandleTable(
  93. IN ULONG MaximumNumberOfHandles,
  94. OUT PBASE_HANDLE_TABLE HandleTable
  95. );
  96. NTSTATUS
  97. BaseRtlDestroyHandleTable(
  98. IN OUT PBASE_HANDLE_TABLE HandleTable
  99. );
  100. PBASE_HANDLE_TABLE_ENTRY
  101. BaseRtlAllocateHandle(
  102. IN PBASE_HANDLE_TABLE HandleTable
  103. );
  104. BOOLEAN
  105. BaseRtlFreeHandle(
  106. IN PBASE_HANDLE_TABLE HandleTable,
  107. IN PBASE_HANDLE_TABLE_ENTRY Handle
  108. );
  109. //
  110. // These structures are kept in the global shared memory section created
  111. // in the server and mapped readonly into each client address space when
  112. // they connect to the server.
  113. //
  114. typedef struct _INIFILE_MAPPING_TARGET {
  115. struct _INIFILE_MAPPING_TARGET *Next;
  116. UNICODE_STRING RegistryPath;
  117. } INIFILE_MAPPING_TARGET, *PINIFILE_MAPPING_TARGET;
  118. typedef struct _INIFILE_MAPPING_VARNAME {
  119. struct _INIFILE_MAPPING_VARNAME *Next;
  120. UNICODE_STRING Name;
  121. ULONG MappingFlags;
  122. PINIFILE_MAPPING_TARGET MappingTarget;
  123. } INIFILE_MAPPING_VARNAME, *PINIFILE_MAPPING_VARNAME;
  124. #define INIFILE_MAPPING_WRITE_TO_INIFILE_TOO 0x00000001
  125. #define INIFILE_MAPPING_INIT_FROM_INIFILE 0x00000002
  126. #define INIFILE_MAPPING_READ_FROM_REGISTRY_ONLY 0x00000004
  127. #define INIFILE_MAPPING_APPEND_BASE_NAME 0x10000000
  128. #define INIFILE_MAPPING_APPEND_APPLICATION_NAME 0x20000000
  129. #define INIFILE_MAPPING_SOFTWARE_RELATIVE 0x40000000
  130. #define INIFILE_MAPPING_USER_RELATIVE 0x80000000
  131. typedef struct _INIFILE_MAPPING_APPNAME {
  132. struct _INIFILE_MAPPING_APPNAME *Next;
  133. UNICODE_STRING Name;
  134. PINIFILE_MAPPING_VARNAME VariableNames;
  135. PINIFILE_MAPPING_VARNAME DefaultVarNameMapping;
  136. } INIFILE_MAPPING_APPNAME, *PINIFILE_MAPPING_APPNAME;
  137. typedef struct _INIFILE_MAPPING_FILENAME {
  138. struct _INIFILE_MAPPING_FILENAME *Next;
  139. UNICODE_STRING Name;
  140. PINIFILE_MAPPING_APPNAME ApplicationNames;
  141. PINIFILE_MAPPING_APPNAME DefaultAppNameMapping;
  142. } INIFILE_MAPPING_FILENAME, *PINIFILE_MAPPING_FILENAME;
  143. typedef struct _INIFILE_MAPPING {
  144. PINIFILE_MAPPING_FILENAME FileNames;
  145. PINIFILE_MAPPING_FILENAME DefaultFileNameMapping;
  146. PINIFILE_MAPPING_FILENAME WinIniFileMapping;
  147. ULONG Reserved;
  148. } INIFILE_MAPPING, *PINIFILE_MAPPING;
  149. //
  150. // NLS Information.
  151. //
  152. #define NLS_INVALID_INFO_CHAR 0xffff /* marks cache string as invalid */
  153. #define MAX_REG_VAL_SIZE 80 /* max size of registry value */
  154. typedef struct _NLS_USER_INFO {
  155. WCHAR sAbbrevLangName[MAX_REG_VAL_SIZE];
  156. WCHAR iCountry[MAX_REG_VAL_SIZE];
  157. WCHAR sCountry[MAX_REG_VAL_SIZE];
  158. WCHAR sList[MAX_REG_VAL_SIZE];
  159. WCHAR iMeasure[MAX_REG_VAL_SIZE];
  160. WCHAR sDecimal[MAX_REG_VAL_SIZE];
  161. WCHAR sThousand[MAX_REG_VAL_SIZE];
  162. WCHAR sGrouping[MAX_REG_VAL_SIZE];
  163. WCHAR iDigits[MAX_REG_VAL_SIZE];
  164. WCHAR iLZero[MAX_REG_VAL_SIZE];
  165. WCHAR iNegNumber[MAX_REG_VAL_SIZE];
  166. WCHAR sCurrency[MAX_REG_VAL_SIZE];
  167. WCHAR sMonDecSep[MAX_REG_VAL_SIZE];
  168. WCHAR sMonThouSep[MAX_REG_VAL_SIZE];
  169. WCHAR sMonGrouping[MAX_REG_VAL_SIZE];
  170. WCHAR iCurrDigits[MAX_REG_VAL_SIZE];
  171. WCHAR iCurrency[MAX_REG_VAL_SIZE];
  172. WCHAR iNegCurr[MAX_REG_VAL_SIZE];
  173. WCHAR sPosSign[MAX_REG_VAL_SIZE];
  174. WCHAR sNegSign[MAX_REG_VAL_SIZE];
  175. WCHAR sTimeFormat[MAX_REG_VAL_SIZE];
  176. WCHAR sTime[MAX_REG_VAL_SIZE];
  177. WCHAR iTime[MAX_REG_VAL_SIZE];
  178. WCHAR iTLZero[MAX_REG_VAL_SIZE];
  179. WCHAR iTimeMarkPosn[MAX_REG_VAL_SIZE];
  180. WCHAR s1159[MAX_REG_VAL_SIZE];
  181. WCHAR s2359[MAX_REG_VAL_SIZE];
  182. WCHAR sShortDate[MAX_REG_VAL_SIZE];
  183. WCHAR sDate[MAX_REG_VAL_SIZE];
  184. WCHAR iDate[MAX_REG_VAL_SIZE];
  185. WCHAR sLongDate[MAX_REG_VAL_SIZE];
  186. WCHAR iCalType[MAX_REG_VAL_SIZE];
  187. WCHAR iFirstDay[MAX_REG_VAL_SIZE];
  188. WCHAR iFirstWeek[MAX_REG_VAL_SIZE];
  189. WCHAR sLocale[MAX_REG_VAL_SIZE];
  190. LCID UserLocaleId;
  191. BOOL fCacheValid;
  192. } NLS_USER_INFO, *PNLS_USER_INFO;
  193. BOOLEAN
  194. BaseRtlInitialize(
  195. PVOID DllHandle,
  196. PVOID Heap,
  197. ULONG TagBase
  198. );
  199. ULONG BaseRtlTag;
  200. PVOID BaseRtlHeap;
  201. #define MAKE_RTL_TAG( t ) (RTL_HEAP_MAKE_TAG( BaseRtlTag, t ))
  202. #define ATOM_TAG 0
  203.