Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

97 lines
3.3 KiB

//+-------------------------------------------------------------------------
//
// Copyright (C) 2000, Microsoft Corporation.
//
// File: name_table.h
//
// Contents: The DFS Name Table
//
//--------------------------------------------------------------------------
#ifndef __NAME_TABLE_H__
#define __NAME_TABLE_H__
#include <dfsheader.h>
#include <dfsnametable.h>
typedef struct _DFS_NAME_TABLE_BUCKET {
ULONG Count;
LIST_ENTRY ListHead;
} DFS_NAME_TABLE_BUCKET, *PDFS_NAME_TABLE_BUCKET;
typedef struct _DFS_NAME_TABLE_ENTRY {
PUNICODE_STRING pName;
LIST_ENTRY NameTableLink;
PVOID pData;
} DFS_NAME_TABLE_ENTRY, *PDFS_NAME_TABLE_ENTRY;
typedef struct _DFS_NAME_TABLE {
DFS_OBJECT_HEADER DfsHeader;
ULONG Flags;
ULONG NumBuckets;
PVOID pLock;
DFS_NAME_TABLE_BUCKET HashBuckets[0];
} DFS_NAME_TABLE, *PDFS_NAME_TABLE;
#define NAME_TABLE_LOCKED 1
#define DFS_NAMETABLE_CRIT_SPIN_COUNT 4000
NTSTATUS
DfsCheckNameTable(
IN PUNICODE_STRING lookupName,
IN PDFS_NAME_TABLE_BUCKET pBucket,
OUT PVOID *ppData );
#define DEFAULT_NAME_TABLE_SIZE 47
#define DFS_LOCK_NAME_TABLE(_pTable, _sts)\
{ EnterCriticalSection((_pTable)->pLock); (_pTable)->Flags |= NAME_TABLE_LOCKED; (_sts) = STATUS_SUCCESS; }
#define DFS_UNLOCK_NAME_TABLE(_pTable)\
{(_pTable)->Flags &= ~NAME_TABLE_LOCKED; LeaveCriticalSection((_pTable)->pLock); }
#define GET_NAME_TABLE_BUCKET(_name, _table, BucketNo) \
{ \
WCHAR *pPathBuffer = (_name)->Buffer; \
WCHAR pCurrent; \
WCHAR *pPathBufferEnd = &(pPathBuffer[(_name)->Length / sizeof(WCHAR)]); \
BucketNo = 0; \
while ((pPathBufferEnd != pPathBuffer) && \
(*pPathBuffer)) \
{ \
pCurrent = *pPathBuffer++; \
pCurrent = (pCurrent < L'a') \
? pCurrent \
: ((pCurrent < L'z') \
? (pCurrent - L'a' + L'A') \
: RtlUpcaseUnicodeChar(pCurrent)); \
BucketNo *= 131; \
BucketNo += pCurrent; \
} \
BucketNo = BucketNo % ((_table)->NumBuckets); \
}
#if defined (PREFIX_TABLE_HEAP_MEMORY)
extern HANDLE PrefixTableHeapHandle;
#define ALLOCATE_MEMORY(_sz) \
HeapAlloc(PrefixTableHeapHandle, 0, _sz)
#define FREE_MEMORY(_addr) \
HeapFree(PrefixTableHeapHandle, 0, _addr)
#else
#define ALLOCATE_MEMORY(_sz)\
malloc(_sz)
#define FREE_MEMORY(_addr) \
free(_addr)
#endif
#endif // __NAME_TABLE_H__