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.
 
 
 
 
 
 

167 lines
3.7 KiB

#pragma once
#ifdef __cplusplus
extern "C" {
#endif
/*++
This structure contains an extent and a depth, which the namespace
manager knows how to interpret in the right context. The NS_NAMESPACE
structure contains a list of these which represent aliases at various
depths along the document structure. The NS_DEFAULT_NAMESPACES contains
a pseudo-stack which has the current 'default' namespace at the top.
--*/
typedef struct NS_NAME_DEPTH {
XML_EXTENT Name;
ULONG Depth;
}
NS_NAME_DEPTH, *PNS_NAME_DEPTH;
#define NS_ALIAS_MAP_INLINE_COUNT (5)
#define NS_ALIAS_MAP_GROWING_COUNT (20)
typedef struct _NS_ALIAS {
//
// Is this in use?
//
BOOLEAN fInUse;
//
// The name of the alias - "x" or "asm" or the short tag before the : in
// an element name, like <x:foo>
//
XML_EXTENT AliasName;
//
// How many aliased namespaces are there?
//
ULONG ulNamespaceCount;
//
// The namespaces that it can map to, with their depths
//
RTL_GROWING_LIST NamespaceMaps;
//
// A list of some inline elements, for fun. This is shallow, as it's
// the typical case that someone will create a large set of aliases
// to a small set of namespaces, rather than the other way around.
//
NS_NAME_DEPTH InlineNamespaceMaps[NS_ALIAS_MAP_INLINE_COUNT];
}
NS_ALIAS, *PNS_ALIAS;
#define NS_MANAGER_INLINE_ALIAS_COUNT (10)
#define NS_MANAGER_ALIAS_GROWTH_SIZE (40)
#define NS_MANAGER_DEFAULT_COUNT (20)
#define NS_MANAGER_DEFAULT_GROWTH_SIZE (40)
typedef NTSTATUS (*PFNCOMPAREEXTENTS)(
PVOID pvContext,
PCXML_EXTENT pLeft,
PCXML_EXTENT pRight,
XML_STRING_COMPARE *pfMatching);
typedef struct _NS_MANAGER {
//
// How deep is the default namespace stack?
//
ULONG ulDefaultNamespaceDepth;
//
// The default namespaces go into this list
//
RTL_GROWING_LIST DefaultNamespaces;
//
// How many aliases are there?
//
ULONG ulAliasCount;
//
// The array of aliases. N.B. that this list can have holes in it, and
// the user will have to do some special magic to find empty slots in
// it to make efficient use of this. Alternatively, you could have another
// growing list representing a 'freed slot' stack, but I'm not sure that
// would really be an optimization.
//
RTL_GROWING_LIST Aliases;
//
// Comparison
//
PFNCOMPAREEXTENTS pfnCompare;
//
// Context
//
PVOID pvCompareContext;
//
// Inline list of aliases to start with
//
NS_ALIAS InlineAliases[NS_MANAGER_INLINE_ALIAS_COUNT];
NS_NAME_DEPTH InlineDefaultNamespaces[NS_MANAGER_DEFAULT_COUNT];
}
NS_MANAGER, *PNS_MANAGER;
NTSTATUS
RtlNsInitialize(
PNS_MANAGER pManager,
PFNCOMPAREEXTENTS pCompare,
PVOID pCompareContext,
PRTL_ALLOCATOR Allocation
);
NTSTATUS
RtlNsDestroy(
PNS_MANAGER pManager
);
NTSTATUS
RtlNsInsertDefaultNamespace(
PNS_MANAGER pManager,
ULONG ulDepth,
PXML_EXTENT pNamespace
);
NTSTATUS
RtlNsInsertNamespaceAlias(
PNS_MANAGER pManager,
ULONG ulDepth,
PXML_EXTENT pNamespace,
PXML_EXTENT pAlias
);
NTSTATUS
RtlNsLeaveDepth(
PNS_MANAGER pManager,
ULONG ulDepth
);
NTSTATUS
RtlNsGetNamespaceForAlias(
PNS_MANAGER pManager,
ULONG ulDepth,
PXML_EXTENT Alias,
PXML_EXTENT pNamespace
);
#ifdef __cplusplus
};
#endif