Source code of Windows XP (NT5)
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.

313 lines
8.4 KiB

  1. /*++
  2. Copyright (c) 1999 Microsoft Corporation
  3. Module Name:
  4. objstr.h
  5. Abstract:
  6. Implements a set of APIs to handle the string representation of nodes/leafs of a tree
  7. Author:
  8. 03-Jan-2000 Ovidiu Temereanca (ovidiut) - File creation.
  9. Revision History:
  10. <alias> <date> <comments>
  11. --*/
  12. /*
  13. +-------+
  14. | root1 | Level 1
  15. +-------+
  16. / \
  17. / \
  18. +---------+ (-------)
  19. | node1 | ( leaf1 ) Level 2
  20. +---------+ (-------)
  21. / | \ \__________
  22. / | \ \
  23. +-------+ +-------+ (-------) (-------)
  24. | node2 | | node3 | ( leaf2 ) ( leaf3 ) Level 3
  25. +-------+ +-------+ (-------) (-------)
  26. / \
  27. / \
  28. +-------+ (-------)
  29. | node4 | ( leaf4 ) Level 4
  30. +-------+ (-------)
  31. / \
  32. / \
  33. (-------) (-------)
  34. ( leaf5 ) ( leaf6 ) Level 5
  35. (-------) (-------)
  36. The string representation of some tree elements above:
  37. root1
  38. root1 <leaf1>
  39. root1\node1
  40. root1\node1 <leaf2>
  41. root1\node1 <leaf3>
  42. */
  43. //
  44. // Types
  45. //
  46. typedef enum {
  47. OBSPF_EXACTNODE = 0x0001,
  48. OBSPF_NODEISROOTPLUSSTAR = 0x0002,
  49. OBSPF_OPTIONALNODE = 0x0004,
  50. OBSPF_NOLEAF = 0x0008,
  51. OBSPF_EXACTLEAF = 0x0010,
  52. OBSPF_OPTIONALLEAF = 0x0020,
  53. } OBSP_FLAGS;
  54. typedef struct {
  55. PPARSEDPATTERNA NodePattern;
  56. PPARSEDPATTERNA LeafPattern;
  57. PSTR ExactRoot;
  58. DWORD ExactRootBytes;
  59. PCSTR Leaf;
  60. DWORD MinNodeLevel;
  61. DWORD MaxNodeLevel;
  62. DWORD MaxSubLevel;
  63. DWORD Flags;
  64. } OBSPARSEDPATTERNA, *POBSPARSEDPATTERNA;
  65. typedef struct {
  66. PPARSEDPATTERNW NodePattern;
  67. PPARSEDPATTERNW LeafPattern;
  68. PWSTR ExactRoot;
  69. DWORD ExactRootBytes;
  70. PCWSTR Leaf;
  71. DWORD MinNodeLevel;
  72. DWORD MaxNodeLevel;
  73. DWORD MaxSubLevel;
  74. DWORD Flags;
  75. } OBSPARSEDPATTERNW, *POBSPARSEDPATTERNW;
  76. //
  77. // APIs
  78. //
  79. BOOL
  80. ObsInitialize (
  81. VOID
  82. );
  83. VOID
  84. ObsTerminate (
  85. VOID
  86. );
  87. VOID
  88. ObsFreeA (
  89. IN PCSTR EncodedObject
  90. );
  91. VOID
  92. ObsFreeW (
  93. IN PCWSTR EncodedObject
  94. );
  95. BOOL
  96. ObsSplitObjectStringExA (
  97. IN PCSTR EncodedObject,
  98. OUT PSTR* DecodedNode, OPTIONAL
  99. OUT PSTR* DecodedLeaf, OPTIONAL
  100. IN PMHANDLE Pool, OPTIONAL
  101. IN BOOL DecodeStrings
  102. );
  103. #define ObsSplitObjectStringA(o,n,l) ObsSplitObjectStringExA(o,n,l,NULL,TRUE)
  104. BOOL
  105. ObsSplitObjectStringExW (
  106. IN PCWSTR EncodedObject,
  107. OUT PWSTR* DecodedNode, OPTIONAL
  108. OUT PWSTR* DecodedLeaf, OPTIONAL
  109. IN PMHANDLE Pool, OPTIONAL
  110. IN BOOL DecodeStrings
  111. );
  112. #define ObsSplitObjectStringW(o,n,l) ObsSplitObjectStringExW(o,n,l,NULL,TRUE)
  113. PSTR
  114. ObsBuildEncodedObjectStringFromPatternA (
  115. IN POBSPARSEDPATTERNA Pattern
  116. );
  117. PWSTR
  118. ObsBuildEncodedObjectStringFromPatternW (
  119. IN POBSPARSEDPATTERNW Pattern
  120. );
  121. PSTR
  122. ObsBuildEncodedObjectStringExA (
  123. IN PCSTR DecodedNode,
  124. IN PCSTR DecodedLeaf, OPTIONAL
  125. IN BOOL EncodeString
  126. );
  127. #define ObsBuildEncodedObjectStringA(node,leaf) ObsBuildEncodedObjectStringExA(node,leaf,FALSE)
  128. PWSTR
  129. ObsBuildEncodedObjectStringExW (
  130. IN PCWSTR DecodedNode,
  131. IN PCWSTR DecodedLeaf, OPTIONAL
  132. IN BOOL EncodeString
  133. );
  134. #define ObsBuildEncodedObjectStringW(node,leaf) ObsBuildEncodedObjectStringExW(node,leaf,FALSE)
  135. POBSPARSEDPATTERNA
  136. ObsCreateParsedPatternExA (
  137. IN PCSTR EncodedObject,
  138. IN BOOL MakePrimaryRootEndWithWack
  139. );
  140. #define ObsCreateParsedPatternA(obj) ObsCreateParsedPatternExA (obj,FALSE)
  141. POBSPARSEDPATTERNW
  142. ObsCreateParsedPatternExW (
  143. IN PCWSTR EncodedObject,
  144. IN BOOL MakePrimaryRootEndWithWack
  145. );
  146. #define ObsCreateParsedPatternW(obj) ObsCreateParsedPatternExW (obj,FALSE)
  147. VOID
  148. ObsDestroyParsedPatternA (
  149. IN POBSPARSEDPATTERNA ParsedPattern
  150. );
  151. VOID
  152. ObsDestroyParsedPatternW (
  153. IN POBSPARSEDPATTERNW ParsedPattern
  154. );
  155. BOOL
  156. ObsParsedPatternMatchA (
  157. IN POBSPARSEDPATTERNA ParsedPattern,
  158. IN PCSTR EncodedObject
  159. );
  160. BOOL
  161. ObsParsedPatternMatchW (
  162. IN POBSPARSEDPATTERNW ParsedPattern,
  163. IN PCWSTR EncodedObject
  164. );
  165. BOOL
  166. ObsParsedPatternMatchExA (
  167. IN POBSPARSEDPATTERNA ParsedPattern,
  168. IN PCSTR Node,
  169. IN PCSTR Leaf OPTIONAL
  170. );
  171. BOOL
  172. ObsParsedPatternMatchExW (
  173. IN POBSPARSEDPATTERNW ParsedPattern,
  174. IN PCWSTR Node,
  175. IN PCWSTR Leaf OPTIONAL
  176. );
  177. BOOL
  178. ObsPatternMatchA (
  179. IN PCSTR ObjectPattern,
  180. IN PCSTR ObjectStr
  181. );
  182. BOOL
  183. ObsPatternMatchW (
  184. IN PCWSTR ObjectPattern,
  185. IN PCWSTR ObjectStr
  186. );
  187. BOOL
  188. ObsIsPatternContainedA (
  189. IN PCSTR Container,
  190. IN PCSTR Contained
  191. );
  192. BOOL
  193. ObsIsPatternContainedW (
  194. IN PCWSTR Container,
  195. IN PCWSTR Contained
  196. );
  197. BOOL
  198. ObsGetPatternLevelsA (
  199. IN PCSTR ObjectPattern,
  200. OUT PDWORD MinLevel, OPTIONAL
  201. OUT PDWORD MaxLevel OPTIONAL
  202. );
  203. BOOL
  204. ObsGetPatternLevelsW (
  205. IN PCWSTR ObjectPattern,
  206. OUT PDWORD MinLevel, OPTIONAL
  207. OUT PDWORD MaxLevel OPTIONAL
  208. );
  209. BOOL
  210. ObsPatternIncludesPatternA (
  211. IN POBSPARSEDPATTERNA IncludingPattern,
  212. IN POBSPARSEDPATTERNA IncludedPattern
  213. );
  214. BOOL
  215. ObsPatternIncludesPatternW (
  216. IN POBSPARSEDPATTERNW IncludingPattern,
  217. IN POBSPARSEDPATTERNW IncludedPattern
  218. );
  219. //
  220. // Macros
  221. //
  222. #ifdef UNICODE
  223. #define ObsFree ObsFreeW
  224. #define ObsSplitObjectString ObsSplitObjectStringW
  225. #define ObsSplitObjectStringEx ObsSplitObjectStringExW
  226. #define ObsBuildEncodedObjectStringFromPattern ObsBuildEncodedObjectStringFromPatternW
  227. #define ObsBuildEncodedObjectStringEx ObsBuildEncodedObjectStringExW
  228. #define ObsBuildEncodedObjectString ObsBuildEncodedObjectStringW
  229. #define ObsCreateParsedPattern ObsCreateParsedPatternW
  230. #define ObsCreateParsedPatternEx ObsCreateParsedPatternExW
  231. #define ObsDestroyParsedPattern ObsDestroyParsedPatternW
  232. #define ObsParsedPatternMatch ObsParsedPatternMatchW
  233. #define ObsParsedPatternMatchEx ObsParsedPatternMatchExW
  234. #define ObsPatternMatch ObsPatternMatchW
  235. #define ObsIsPatternContained ObsIsPatternContainedW
  236. #define ObsGetPatternLevels ObsGetPatternLevelsW
  237. #define ObsPatternIncludesPattern ObsPatternIncludesPatternW
  238. #else
  239. #define ObsFree ObsFreeA
  240. #define ObsSplitObjectString ObsSplitObjectStringA
  241. #define ObsSplitObjectStringEx ObsSplitObjectStringExA
  242. #define ObsBuildEncodedObjectStringFromPattern ObsBuildEncodedObjectStringFromPatternA
  243. #define ObsBuildEncodedObjectStringEx ObsBuildEncodedObjectStringExA
  244. #define ObsBuildEncodedObjectString ObsBuildEncodedObjectStringA
  245. #define ObsCreateParsedPattern ObsCreateParsedPatternA
  246. #define ObsCreateParsedPatternEx ObsCreateParsedPatternExA
  247. #define ObsDestroyParsedPattern ObsDestroyParsedPatternA
  248. #define ObsParsedPatternMatch ObsParsedPatternMatchA
  249. #define ObsParsedPatternMatchEx ObsParsedPatternMatchExA
  250. #define ObsPatternMatch ObsPatternMatchA
  251. #define ObsIsPatternContained ObsIsPatternContainedA
  252. #define ObsGetPatternLevels ObsGetPatternLevelsA
  253. #define ObsPatternIncludesPattern ObsPatternIncludesPatternA
  254. #endif