Reactos
1#ifndef _RXFCBTABLE_
2#define _RXFCBTABLE_
3
4typedef struct _RX_FCB_TABLE_ENTRY {
5 NODE_TYPE_CODE NodeTypeCode;
6 NODE_BYTE_SIZE NodeByteSize;
7 ULONG HashValue;
8 UNICODE_STRING Path;
9 LIST_ENTRY HashLinks;
10 LONG Lookups;
11} RX_FCB_TABLE_ENTRY, *PRX_FCB_TABLE_ENTRY;
12
13#define RX_FCB_TABLE_NUMBER_OF_HASH_BUCKETS 32
14
15typedef struct _RX_FCB_TABLE
16{
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;
25 ERESOURCE TableLock;
26 PRX_FCB_TABLE_ENTRY TableEntryForNull;
27 LIST_ENTRY HashBuckets[RX_FCB_TABLE_NUMBER_OF_HASH_BUCKETS];
28} RX_FCB_TABLE, *PRX_FCB_TABLE;
29
30VOID
31RxInitializeFcbTable(
32 _Inout_ PRX_FCB_TABLE FcbTable,
33 _In_ BOOLEAN CaseInsensitiveMatch);
34
35VOID
36RxFinalizeFcbTable(
37 _Inout_ PRX_FCB_TABLE FcbTable);
38
39PFCB
40RxFcbTableLookupFcb(
41 _In_ PRX_FCB_TABLE FcbTable,
42 _In_ PUNICODE_STRING Path);
43
44NTSTATUS
45RxFcbTableInsertFcb(
46 _Inout_ PRX_FCB_TABLE FcbTable,
47 _Inout_ PFCB Fcb);
48
49NTSTATUS
50RxFcbTableRemoveFcb(
51 _Inout_ PRX_FCB_TABLE FcbTable,
52 _Inout_ PFCB Fcb);
53
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)
57
58#define RxIsFcbTableLockExclusive(T) ExIsResourceAcquiredExclusiveLite(&(T)->TableLock)
59
60#define RxIsFcbTableLockAcquired(T) (ExIsResourceAcquiredSharedLite(&(T)->TableLock) || \
61 ExIsResourceAcquiredExclusiveLite(&(T)->TableLock))
62
63#ifdef __REACTOS__
64#define FCB_HASH_BUCKET(T, H) &(T)->HashBuckets[H % (T)->NumberOfBuckets]
65#endif
66
67#endif