331b75a25d34d7a60321add60198167be0c5b128
[reactos.git] / reactos / sdk / include / ddk / fcbtable.h
1 #ifndef _RXFCBTABLE_
2 #define _RXFCBTABLE_
3
4 typedef 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
15 typedef 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
30 VOID
31 RxInitializeFcbTable(
32 _Inout_ PRX_FCB_TABLE FcbTable,
33 _In_ BOOLEAN CaseInsensitiveMatch);
34
35 PFCB
36 RxFcbTableLookupFcb(
37 _In_ PRX_FCB_TABLE FcbTable,
38 _In_ PUNICODE_STRING Path);
39
40 NTSTATUS
41 RxFcbTableInsertFcb(
42 _Inout_ PRX_FCB_TABLE FcbTable,
43 _Inout_ PFCB Fcb);
44
45 NTSTATUS
46 RxFcbTableRemoveFcb(
47 _Inout_ PRX_FCB_TABLE FcbTable,
48 _Inout_ PFCB Fcb);
49
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)
53
54 #define RxIsFcbTableLockExclusive(T) ExIsResourceAcquiredExclusiveLite(&(T)->TableLock)
55
56 #ifdef __REACTOS__
57 #define FCB_HASH_BUCKET(T, H) &(T)->HashBuckets[H % (T)->NumberOfBuckets]
58 #endif
59
60 #endif