Source code of Windows XP (NT5)
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.
|
|
/******************************************************************************
* * Copyright (c) 1999 Microsoft Corporation * * Module Name: * hashlist.h * * Abstract: * This file contains the definitions for pathtree. * * Revision History: * Kanwaljit S Marok ( kmarok ) 05/17/99 * created * *****************************************************************************/
#ifndef _PATHTREE_H_
#define _PATHTREE_H_
#ifdef __cplusplus
extern "C" { #endif
#include "common.h"
#define ALLVOLUMES_PATH_A "__ALLVOLUMES__"
#define ALLVOLUMES_PATH_W L"__ALLVOLUMES__"
#define ALLVOLUMES_PATH_T TEXT("__ALLVOLUMES__")
#define TREEFLAGS_DISABLE_SUBTREE 0x00000001
//
// Tree specific structures.
//
typedef struct { //
// Directory related stuff.
//
INT m_iFather ; // Index to the parent node
INT m_iSon ; // Index to the first son
INT m_iSibling ; // Index to next sibling
DWORD m_dwData ; // Offset for node data
DWORD m_dwFileList; // Offset for file list
DWORD m_dwType ; // Node Type
DWORD m_dwFlags ; // Misc flags
} TreeNode;
typedef struct { DEFINE_BLOB_HEADER(); // Define common blob members
//
// Tree related header stuff
//
DWORD m_dwMaxNodes ; // Max number of nodes allowed
DWORD m_dwDataSize ; // Data section size
DWORD m_dwDataOff ; // Current Data Offset
INT m_iFreeNode ; // Next free node
DWORD m_dwDefault ; // Default node type
} TreeHeader;
//
// Tree Related Macros.
//
#define TREE_NODES(pTree) ( (TreeNode*) ((BYTE *)pTree+sizeof(TreeHeader)) )
#define TREE_NODEPTR(pTree, iNode) ( TREE_NODES(pTree) + iNode)
#define TREE_HEADER(pTree) ( (TreeHeader *) pTree )
#define TREE_CURRDATAOFF(pTree) ( ((TreeHeader *)pTree)->m_dwDataOff )
#define TREE_CURRDATAPTR(pTree) ( (BYTE *)pTree + TREE_CURRDATAOFF(pTree) )
#define TREE_DATA(pTree) ( (BYTE *)TREE_NODES(pTree) + \
(sizeof(TreeNode) * \ TREE_HEADER(pTree)->m_dwMaxNodes) \ )
#define TREE_DATA_OFF(pTree) ( sizeof(TreeHeader) + \
(sizeof(TreeNode) * \ TREE_HEADER(pTree)->m_dwMaxNodes) \ )
#define TREE_DRIVENODE( pTree, iDrive ) \
( TREE_HEADER(pTree)->m_arrDrive[ iDrive ] )
#define TREE_NODELISTOFF( pTree, iNode ) \
TREE_NODEPTR( pTree, iNode )->m_dwFileList
#define DRIVE_INDEX( drive ) ( drive - L'A' )
#define TREE_ROOT_NODE 0 // Root node is always assigned as 0
//
// Function Prototypes.
//
BOOL MatchPrefix( BYTE * pTree, INT iParent, struct PathElement * ppElem , INT * pNode, INT * pLevel, INT * pType, BOOL* pfDisable, BOOL* pfExactMatch );
BOOL ConvertToParsedPath( LPWSTR lpszPath, USHORT nPathLen, PBYTE pPathBuf, WORD nPathSize );
#ifdef __cplusplus
} #endif
#endif _PATHTREE_H_
|