www.pudn.com > He4Hook215b6.rar > KShieldDirectoryTree.h
#ifndef __KSHIELDDIRECTORY_TREE_H
#define __KSHIELDDIRECTORY_TREE_H
#ifndef __TEST_WIN32
extern "C"
{
#include "ntddk.h"
}
#include "../Include/KNew.h"
#include "../Include/KTypes.h"
#include "../KStdLib/krnlstdlib.h"
#else
#include
#endif //__TEST_WIN32
#include "../KSpinSynchroObject/KSpinSynchroObject.h"
//#include "../KNativeSynchroObject/KNativeSynchroObject.h"
#include "KShieldDirectory.h"
class KShieldDirectoryTree;
//*******************************************************************//
class KShieldDirectoryTree
{
public:
explicit
KShieldDirectoryTree();
virtual ~KShieldDirectoryTree();
// во всех этих ф-ях pUserContext должен быть отличен от NULL,
// даже если вам он не нужен, это необходимо чтобы отличить каталоги,
// которые вы добавили от промежуточных.
// пример:
// добавляем "\\Device\\Harddisk0\\Partition0\\i386"
// в дереве будут созданы следующие узлы
// Device
// Harddisk0
// Partition0
// i386
// так вот во всех узлах кроме i386, pUserContext будет равен 0,
// а для i386 - тому что вы передали.
BOOLEAN Add(PWSTR pwszFullPath, PVOID pUserContext);
BOOLEAN Remove(PWSTR pwszFullPath, PVOID* ppUserContext);
KShieldDirectory* Find(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext = NULL);
KShieldDirectory* FindMatch(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext = NULL);
KShieldDirectory* FindMatchRest(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext = NULL);
//protected:
// эти ф-ии снаружи пользовать очень аккуратно, потому как если вы
// получили в первом вызове KShieldDirectory*, то второй вызов с указанием
// в качестве pRoot этого указателя может привести к падению, если кто-то
// успел удалить этот узел. для всех этих ф-й справедливо:
// if (pRoot == NULL) pRoot = m_pRoot;
KShieldDirectory* FindFrom(KShieldDirectory* pRoot, PWSTR pwszFullPath, KShieldDirectory** ppParentDir = NULL);
KShieldDirectory* FindMatchFrom(KShieldDirectory* pRoot, PWSTR pwszFullPath, KShieldDirectory** ppParentDir = NULL);
KShieldDirectory* FindMatchRestFrom(KShieldDirectory* pRoot, PWSTR pwszFullPath, KShieldDirectory** ppParentDir = NULL);
private:
KShieldDirectoryTree(const KShieldDirectoryTree&);
KShieldDirectoryTree& operator=(const KShieldDirectoryTree& right);
protected:
KShieldDirectory* m_pRoot;
KSpinSynchroObject m_KSynchroObject;
//KNativeSynchroObject m_KSynchroObject;
};
#endif //__KSHIELDDIRECTORY_TREE_H