4 typedef struct _RX_FCB_TABLE_ENTRY
{
5 NODE_TYPE_CODE NodeTypeCode
;
6 NODE_BYTE_SIZE NodeByteSize
;
11 } RX_FCB_TABLE_ENTRY
, *PRX_FCB_TABLE_ENTRY
;
13 #define RX_FCB_TABLE_NUMBER_OF_HASH_BUCKETS 32
15 typedef struct _RX_FCB_TABLE
17 NODE_TYPE_CODE NodeTypeCode
;
18 NODE_BYTE_SIZE NodeByteSize
;
19 volatile ULONG Version
;
20 BOOLEAN CaseInsensitiveMatch
;
21 USHORT NumberOfBuckets
;
22 volatile LONG Lookups
;
23 volatile LONG FailedLookups
;
24 volatile LONG Compares
;
26 PRX_FCB_TABLE_ENTRY TableEntryForNull
;
27 LIST_ENTRY HashBuckets
[RX_FCB_TABLE_NUMBER_OF_HASH_BUCKETS
];
28 } RX_FCB_TABLE
, *PRX_FCB_TABLE
;
32 _Inout_ PRX_FCB_TABLE FcbTable
,
33 _In_ BOOLEAN CaseInsensitiveMatch
);
37 _In_ PRX_FCB_TABLE FcbTable
,
38 _In_ PUNICODE_STRING Path
);
42 _Inout_ PRX_FCB_TABLE FcbTable
,
47 _Inout_ PRX_FCB_TABLE FcbTable
,
50 #define RxAcquireFcbTableLockShared(T, W) ExAcquireResourceSharedLite(&(T)->TableLock, W)
51 #define RxAcquireFcbTableLockExclusive(T, W) ExAcquireResourceExclusiveLite(&(T)->TableLock, W)
52 #define RxReleaseFcbTableLock(T) ExReleaseResourceLite(&(T)->TableLock)
54 #define RxIsFcbTableLockExclusive(T) ExIsResourceAcquiredExclusiveLite(&(T)->TableLock)
57 #define FCB_HASH_BUCKET(T, H) &(T)->HashBuckets[H % (T)->NumberOfBuckets]