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 _Inout_ PRX_FCB_TABLE FcbTable
);
41 _In_ PRX_FCB_TABLE FcbTable
,
42 _In_ PUNICODE_STRING Path
);
46 _Inout_ PRX_FCB_TABLE FcbTable
,
51 _Inout_ PRX_FCB_TABLE FcbTable
,
54 #define RxAcquireFcbTableLockShared(T, W) ExAcquireResourceSharedLite(&(T)->TableLock, W)
55 #define RxAcquireFcbTableLockExclusive(T, W) ExAcquireResourceExclusiveLite(&(T)->TableLock, W)
56 #define RxReleaseFcbTableLock(T) ExReleaseResourceLite(&(T)->TableLock)
58 #define RxIsFcbTableLockExclusive(T) ExIsResourceAcquiredExclusiveLite(&(T)->TableLock)
60 #define RxIsFcbTableLockAcquired(T) (ExIsResourceAcquiredSharedLite(&(T)->TableLock) || \
61 ExIsResourceAcquiredExclusiveLite(&(T)->TableLock))
64 #define FCB_HASH_BUCKET(T, H) &(T)->HashBuckets[H % (T)->NumberOfBuckets]