4 typedef struct _RX_CONNECTION_ID
11 } RX_CONNECTION_ID
, *PRX_CONNECTION_ID
;
14 RxTableComputeHashValue(
15 _In_ PUNICODE_STRING Name
);
18 RxPrefixTableLookupName(
19 _In_ PRX_PREFIX_TABLE ThisTable
,
20 _In_ PUNICODE_STRING CanonicalName
,
21 _Out_ PUNICODE_STRING RemainingName
,
22 _In_ PRX_CONNECTION_ID ConnectionId
);
25 RxPrefixTableInsertName(
26 _Inout_ PRX_PREFIX_TABLE ThisTable
,
27 _Inout_ PRX_PREFIX_ENTRY ThisEntry
,
29 _In_ PULONG ContainerRefCount
,
30 _In_ USHORT CaseInsensitiveLength
,
31 _In_ PRX_CONNECTION_ID ConnectionId
);
34 RxRemovePrefixTableEntry(
35 _Inout_ PRX_PREFIX_TABLE ThisTable
,
36 _Inout_ PRX_PREFIX_ENTRY Entry
);
39 RxInitializePrefixTable(
40 _Inout_ PRX_PREFIX_TABLE ThisTable
,
41 _In_opt_ ULONG TableSize
,
42 _In_ BOOLEAN CaseInsensitiveMatch
);
44 typedef struct _RX_PREFIX_ENTRY
46 NODE_TYPE_CODE NodeTypeCode
;
47 NODE_BYTE_SIZE NodeByteSize
;
48 USHORT CaseInsensitiveLength
;
52 LIST_ENTRY MemberQLinks
;
53 UNICODE_STRING Prefix
;
54 PULONG ContainerRefCount
;
55 PVOID ContainingRecord
;
57 RX_CONNECTION_ID ConnectionId
;
58 } RX_PREFIX_ENTRY
, *PRX_PREFIX_ENTRY
;
60 #define RX_PREFIX_TABLE_DEFAULT_LENGTH 32
62 typedef struct _RX_PREFIX_TABLE
{
63 NODE_TYPE_CODE NodeTypeCode
;
64 NODE_BYTE_SIZE NodeByteSize
;
66 LIST_ENTRY MemberQueue
;
68 PRX_PREFIX_ENTRY TableEntryForNull
;
69 BOOLEAN CaseInsensitiveMatch
;
70 BOOLEAN IsNetNameTable
;
78 LIST_ENTRY HashBuckets
[RX_PREFIX_TABLE_DEFAULT_LENGTH
];
79 } RX_PREFIX_TABLE
, *PRX_PREFIX_TABLE
;
81 #if (_WIN32_WINNT < 0x0600)
82 #define RxAcquirePrefixTableLockShared(T, W) RxpAcquirePrefixTableLockShared((T),(W),TRUE)
83 #define RxAcquirePrefixTableLockExclusive(T, W) RxpAcquirePrefixTableLockExclusive((T), (W), TRUE)
84 #define RxReleasePrefixTableLock(T) RxpReleasePrefixTableLock((T), TRUE)
87 RxpAcquirePrefixTableLockShared(
88 _In_ PRX_PREFIX_TABLE pTable
,
90 _In_ BOOLEAN ProcessBufferingStateChangeRequests
);
93 RxpAcquirePrefixTableLockExclusive(
94 _In_ PRX_PREFIX_TABLE pTable
,
96 _In_ BOOLEAN ProcessBufferingStateChangeRequests
);
99 RxpReleasePrefixTableLock(
100 _In_ PRX_PREFIX_TABLE pTable
,
101 _In_ BOOLEAN ProcessBufferingStateChangeRequests
);
103 #define RxAcquirePrefixTableLockShared(T, W) ExAcquireResourceSharedLite(&(T)->TableLock, (W))
104 #define RxAcquirePrefixTableLockExclusive(T, W) ExAcquireResourceExclusiveLite(&(T)->TableLock, (W))
105 #define RxReleasePrefixTableLock(T) ExReleaseResourceLite(&(T)->TableLock)
109 RxExclusivePrefixTableLockToShared(
110 _In_ PRX_PREFIX_TABLE Table
);
112 #define RxIsPrefixTableLockExclusive(T) ExIsResourceAcquiredExclusiveLite(&(T)->TableLock)
113 #define RxIsPrefixTableLockAcquired(T) (ExIsResourceAcquiredSharedLite(&(T)->TableLock) || \
114 ExIsResourceAcquiredExclusiveLite(&(T)->TableLock))
117 #define HASH_BUCKET(T, H) &(T)->HashBuckets[H % (T)->TableSize]