亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? kshielddirectory.cpp

?? 爾羅斯著名黑客寫的rootkit
?? CPP
字號(hào):
#include "KShieldDirectory.h"
#include "../KDLinkedList/KDLinkedList.h"
#include "../KBinaryTree/KBinaryTree.h"
#include "../KLocker/KLocker.h"

KShieldDirectory::KShieldDirectory(KShieldDirectory* pParentDirectory)
{
  m_bOpen = FALSE;
  m_pDListMatchNameItems = NULL;
  m_KBTreeFullNameItems = NULL;
  m_pDirectoryInfo = NULL;
  m_pParentDirectory = pParentDirectory;
}

KShieldDirectory::~KShieldDirectory()
{
  Close();
}

BOOLEAN KShieldDirectory::Open(PWSTR pwszName, PVOID pUserContext)
{
  KLocker locker(&m_KSynchroObject);

  Close();

  m_pDirectoryInfo = CreateDirectoryInfo(pwszName, pUserContext);
  if (m_pDirectoryInfo != NULL)
  {
    m_KBTreeFullNameItems = new KBinaryTree((BTREE_COMPARE)_CompareFullNames);
    if (m_KBTreeFullNameItems != NULL)
    {
      m_pDListMatchNameItems = new KDLinkedList(NULL);
      if (m_pDListMatchNameItems != NULL)
      {
        m_bOpen = TRUE;
      }
      else
      {
        delete m_KBTreeFullNameItems;
        m_KBTreeFullNameItems = NULL;
        delete m_pDirectoryInfo;
        m_pDirectoryInfo = NULL;
      }
    }
    else
    {
      delete m_pDirectoryInfo;
      m_pDirectoryInfo = NULL;
    }
  }

  return m_bOpen;
}

void KShieldDirectory::Close()
{
  KLocker locker(&m_KSynchroObject);

  if (m_bOpen == TRUE)
  {
    if (m_KBTreeFullNameItems != NULL)
    {
      KShieldDirectory* pItem;
      while (m_KBTreeFullNameItems->IsEmpty() == FALSE)
      {
        pItem = (KShieldDirectory*)m_KBTreeFullNameItems->GetRootData();
        m_KBTreeFullNameItems->Delete(pItem, SDIR_SEARCH_BY_INFO);
        if (pItem != NULL)
          delete pItem;
      }
      
      delete m_KBTreeFullNameItems;
    }
    m_KBTreeFullNameItems = NULL;

    if (m_pDListMatchNameItems != NULL)
    {
      KDLinkedListItem* pItemStart;
      KShieldDirectory* pItem;
      while (m_pDListMatchNameItems->IsEmpty() == FALSE)
      {
        pItemStart = m_pDListMatchNameItems->GetHead();
        pItem = ((KShieldDirectory*)pItemStart->GetObject());
        m_pDListMatchNameItems->Remove(pItemStart);
        delete pItem;
      }
      delete m_pDListMatchNameItems;
    }
    m_pDListMatchNameItems = NULL;
    
    if (m_pDirectoryInfo != NULL)
      delete m_pDirectoryInfo;
    m_pDirectoryInfo = NULL;
    m_bOpen = FALSE;
  }
}

BOOLEAN KShieldDirectory::IsMatchedName(PWSTR pwszName, WCHAR Symbol)
{
  while (*pwszName != 0)
  {
    if (!(*pwszName ^ Symbol))
      return TRUE;
    ++pwszName;
  }

  return FALSE;
}

KShieldDirectory* KShieldDirectory::Find(PWSTR pwszName)
{
  KLocker locker(&m_KSynchroObject);

  BOOLEAN         bMatched = FALSE;

  if (m_bOpen == FALSE || pwszName == NULL)
    return NULL;

  KShieldDirectory* pItem = NULL;

  _wcslwr(pwszName);

  bMatched = IsMatchedName(pwszName, L'*') || IsMatchedName(pwszName, L'?');
  if (bMatched == TRUE)
  {
    KDLinkedListItem* pItemStart = m_pDListMatchNameItems->GetHead();
    KShieldDirectory::PDIRECTORY_INFO pDirInfoStart;
    int nCmpRes;
    while (pItemStart != NULL)
    {
      pItem = (KShieldDirectory*)pItemStart->GetObject();
      pDirInfoStart = pItem->m_pDirectoryInfo;
      nCmpRes = wcscmp(pDirInfoStart->m_pwszName, pwszName);
      if (nCmpRes == 0)
        break;
      pItemStart = pItemStart->GetNext();
    }
    if (pItemStart == NULL)
      pItem = NULL;
  }
  else
  {
    pItem = (KShieldDirectory*)m_KBTreeFullNameItems->SearchData(pwszName, SDIR_SEARCH_BY_NAME);
  }

  return pItem;
}

#ifdef __TEST_WIN32
BOOLEAN MatchW(WCHAR *string, WCHAR *pattern)
{
  for (; L'*'^*pattern; ++pattern, ++string) 
  {
    if (!*string)
      return (!*pattern);
    if (towupper(*string)^towupper(*pattern) && L'?'^*pattern)
      return FALSE;
  }
  /* two-line patch to prevent *too* much recursiveness: */
  while (L'*' == pattern[1])
    ++pattern;

  do
  {
    if (MatchW(string, pattern + 1))
      return TRUE;
  }
  while (*string++);

  return FALSE;
}
#endif //__TEST_WIN32

KShieldDirectory* KShieldDirectory::FindMatch(PWSTR pwszName)
{
  KLocker locker(&m_KSynchroObject);

  BOOLEAN         bMatched = FALSE;

  if (m_bOpen == FALSE || pwszName == NULL)
    return NULL;

  KShieldDirectory* pItem = NULL;

  _wcslwr(pwszName);

  pItem = (KShieldDirectory*)m_KBTreeFullNameItems->SearchData(pwszName, SDIR_SEARCH_BY_NAME);
  if (pItem == NULL)
  {
    KDLinkedListItem* pItemStart = m_pDListMatchNameItems->GetHead();
    KShieldDirectory::PDIRECTORY_INFO pDirInfoStart;
    BOOLEAN bCmpRes;
    while (pItemStart != NULL)
    {
      pItem = (KShieldDirectory*)pItemStart->GetObject();
      pDirInfoStart = pItem->m_pDirectoryInfo;
      bCmpRes = MatchW(pwszName, pDirInfoStart->m_pwszName);
      if (bCmpRes == TRUE)
        break;
      pItemStart = pItemStart->GetNext();
    }
    if (pItemStart == NULL)
      pItem = NULL;
  }

  return pItem;
}

KShieldDirectory* KShieldDirectory::Add(PWSTR pwszName, PVOID pUserContext)
{
  KLocker locker(&m_KSynchroObject);

  BOOLEAN         bMatched = FALSE;
  BOOLEAN         bAdded = FALSE;

  if (m_bOpen == FALSE || pwszName == NULL)
    return NULL;

  KShieldDirectory* pItem = new KShieldDirectory(this);
  if (pItem != NULL)
  {
    _wcslwr(pwszName);
    if (pItem->Open(pwszName, pUserContext))
    {
      bMatched = IsMatchedName(pwszName, L'*') || IsMatchedName(pwszName, L'?');
      if (bMatched == TRUE)
      {
        if (m_pDListMatchNameItems->IsEmpty() == TRUE)
        {
          bAdded = m_pDListMatchNameItems->AddHeadObject(pItem);
        }
        else
        {
          KDLinkedListItem* pItemStart = m_pDListMatchNameItems->GetHead();
          KShieldDirectory::PDIRECTORY_INFO pDirInfoStart;
          KShieldDirectory::PDIRECTORY_INFO pDirInfo = pItem->m_pDirectoryInfo;
          int nCmpRes;
          while (pItemStart != NULL)
          {
            pDirInfoStart = ((KShieldDirectory*)pItemStart->GetObject())->m_pDirectoryInfo;
            nCmpRes = wcscmp(pDirInfoStart->m_pwszName, pDirInfo->m_pwszName);
            if (nCmpRes < 0)
            {
              bAdded = m_pDListMatchNameItems->AddObject(pItem, pItemStart->GetPrev());
              break;
            }
            else
            {
              if (nCmpRes == 0)
                break;
            }

            pItemStart = pItemStart->GetNext();
          }
          if (pItemStart == NULL)
            bAdded = m_pDListMatchNameItems->AddObject(pItem, m_pDListMatchNameItems->GetTail());
        }
      }
      else
      {
        if (m_KBTreeFullNameItems->Insert(pItem, SDIR_SEARCH_BY_INFO) != NULL)
          bAdded = TRUE;
      }
    }

    if (bAdded == FALSE)
    {
      delete pItem;
      pItem = NULL;
    }
    else
    {
      ++(m_pDirectoryInfo->m_dwChildItemsCount);
    }
  }

  return pItem;
}

BOOLEAN KShieldDirectory::Remove(PWSTR pwszName)
{
  KLocker locker(&m_KSynchroObject);

  BOOLEAN bRes = TRUE;
  KShieldDirectory* pItem = Find(pwszName);
  if (pItem != NULL)
  {
    if (pItem->IsEmpty() == TRUE)
    {
      BOOLEAN bMatched = IsMatchedName(pwszName, L'*') || IsMatchedName(pwszName, L'?');
      if (bMatched == TRUE)
        m_pDListMatchNameItems->Remove(m_pDListMatchNameItems->Find(pItem));
      else
        m_KBTreeFullNameItems->Delete(pItem, SDIR_SEARCH_BY_INFO);

      --(m_pDirectoryInfo->m_dwChildItemsCount);
      delete pItem;
    }
    else
    {
      bRes = FALSE;
    }
  }

  return bRes;
}

BOOLEAN KShieldDirectory::IsEmpty()
{
  KLocker locker(&m_KSynchroObject);

  BOOLEAN bEmpty = TRUE;

  if (m_bOpen == TRUE)
  {
    bEmpty = m_KBTreeFullNameItems->IsEmpty();
    bEmpty = bEmpty && m_pDListMatchNameItems->IsEmpty();
  }

  return bEmpty;
}

KShieldDirectory::PDIRECTORY_INFO KShieldDirectory::CreateDirectoryInfo(PWSTR pwszName, PVOID pUserContext)
{
  if (pwszName == NULL)
    return NULL;

  KShieldDirectory::PDIRECTORY_INFO pDirInfo = new DIRECTORY_INFO;
  if (pDirInfo != NULL)
  {
    pDirInfo->m_pUserContext = pUserContext;
    pDirInfo->m_nSizeName = wcslen(pwszName) * sizeof(WCHAR) + sizeof(WCHAR);
    if (pDirInfo->m_nSizeName > sizeof(WCHAR))
    {
      pDirInfo->m_pwszName = new WCHAR[pDirInfo->m_nSizeName/sizeof(WCHAR)];
      if (pDirInfo->m_pwszName != NULL)
      {
        wcscpy(pDirInfo->m_pwszName, pwszName);
        pDirInfo->m_bCompareRest = IsMatchedName(pwszName, L'*');
      }
      else
      {
        delete pDirInfo;
        pDirInfo = NULL;
      }
    }
    else
    {
      delete pDirInfo;
      pDirInfo = NULL;
    }
  }

  return pDirInfo;
}

int KShieldDirectory::_CompareFullNames(PVOID* pData1, PVOID* pData2, ULONG dwParam)
{
  switch (dwParam)
  {
    case SDIR_SEARCH_BY_INFO:
    {
         KShieldDirectory* pDir1 = (KShieldDirectory*)pData1; 
         KShieldDirectory* pDir2 = (KShieldDirectory*)pData2;
         return KShieldDirectory::CompareDirInfo(pDir1->m_pDirectoryInfo, pDir2->m_pDirectoryInfo);
    }
    case SDIR_SEARCH_BY_NAME:
    {
         KShieldDirectory* pDir = (KShieldDirectory*)pData1; 
         PWSTR pwszName = (PWSTR)pData2;
         return KShieldDirectory::CompareNameAndDirInfo(pDir->m_pDirectoryInfo, pwszName);
    }
  }
  return 0;
}

int KShieldDirectory::CompareDirInfo(KShieldDirectory::PDIRECTORY_INFO pDirInfo1, KShieldDirectory::PDIRECTORY_INFO pDirInfo2)
{
  int nCmp = 0;
  BOOLEAN bValid1, bValid2;

  bValid1 = (pDirInfo1 != NULL);
  bValid2 = (pDirInfo2 != NULL);

  if (!bValid1 && !bValid2)
  {
    nCmp = 0;
  }
  else
  {
    if (bValid1 && !bValid2)
    {
      nCmp = 1;
    }
    else
    {
      if (!bValid1 && bValid2)
      {
        nCmp = -1;
      }
      else
      {
        nCmp = wcscmp(pDirInfo1->m_pwszName, pDirInfo2->m_pwszName);
      }
    }
  }

  return nCmp;
}

int KShieldDirectory::CompareNameAndDirInfo(PDIRECTORY_INFO pDirInfo, PWSTR pwszName)
{
  int nCmp = 0;
  BOOLEAN bValid1, bValid2;

  bValid1 = (pwszName != NULL);
  bValid2 = (pDirInfo != NULL);

  if (!bValid1 && !bValid2)
  {
    nCmp = 0;
  }
  else
  {
    if (bValid1 && !bValid2)
    {
      nCmp = 1;
    }
    else
    {
      if (!bValid1 && bValid2)
      {
        nCmp = -1;
      }
      else
      {        
        nCmp = wcscmp(pDirInfo->m_pwszName, pwszName);
      }
    }
  }

  return nCmp;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜伦欧美伦电影理论片| 一区二区三区免费观看| 色婷婷国产精品| 精品一区二区三区蜜桃| 亚洲精品网站在线观看| 久久久综合网站| 欧美美女一区二区在线观看| 不卡免费追剧大全电视剧网站| 青娱乐精品视频| 亚洲综合成人网| 亚洲欧洲精品天堂一级| ww久久中文字幕| 欧美久久久久久久久中文字幕| 波多野结衣中文字幕一区 | 99r精品视频| 激情六月婷婷综合| 亚洲1区2区3区4区| 一区二区日韩av| 亚洲人精品午夜| 欧美国产成人精品| 国产亚洲欧洲一区高清在线观看| 91麻豆精品国产91久久久更新时间| 91在线观看美女| 波多野结衣在线一区| 国产精品一区二区91| 久久不见久久见免费视频7| 亚洲成av人片在线| 亚洲国产日韩a在线播放性色| 亚洲欧洲综合另类| 亚洲欧洲一区二区三区| 中文字幕欧美区| 中文字幕第一区| 欧美韩国日本不卡| 中国色在线观看另类| 欧美高清在线视频| 国产精品视频线看| 中文字幕亚洲不卡| 日韩毛片一二三区| 亚洲精品国产无套在线观| 亚洲少妇中出一区| 亚洲综合久久久久| 亚洲成a人片在线观看中文| 午夜精品福利视频网站 | 波多野结衣视频一区| 国产不卡视频在线播放| 成人综合婷婷国产精品久久免费| 国产成人在线免费观看| 成人高清免费观看| 色8久久精品久久久久久蜜| 色久优优欧美色久优优| 欧美在线观看禁18| 欧美一区二区三区免费视频| 欧美成人国产一区二区| 国产嫩草影院久久久久| 综合久久久久综合| 亚洲国产成人91porn| 蜜臀精品一区二区三区在线观看 | 亚洲免费在线观看视频| 夜夜精品浪潮av一区二区三区| 亚洲高清免费观看 | 亚洲不卡一区二区三区| 日韩成人一区二区三区在线观看| 韩国在线一区二区| 成人激情动漫在线观看| 在线观看免费一区| 日韩视频不卡中文| 国产精品色在线| 亚洲国产精品精华液网站| 九色|91porny| 色综合色狠狠综合色| 欧美裸体一区二区三区| 久久精品人人做人人综合| 亚洲精品免费电影| 麻豆成人av在线| 色综合网色综合| 日韩网站在线看片你懂的| 中文字幕一区二区不卡| 秋霞影院一区二区| 成人黄色电影在线| 欧美精品国产精品| 国产精品你懂的| 青娱乐精品视频在线| 不卡高清视频专区| 欧美xxxxx牲另类人与| 亚洲美女偷拍久久| 激情欧美一区二区三区在线观看| 91蝌蚪porny九色| 精品99一区二区三区| 亚洲色图欧洲色图婷婷| 韩国三级电影一区二区| 欧美亚洲图片小说| 国产精品美女久久久久av爽李琼 | 欧美电影免费观看高清完整版| 国产日韩欧美不卡在线| 午夜精品在线看| 成人免费看片app下载| 欧美一区二区三区精品| 成人免费一区二区三区在线观看| 喷白浆一区二区| 色先锋资源久久综合| 亚洲精品一区二区精华| 丝袜亚洲另类欧美综合| 99久久精品国产精品久久| 亚洲一区在线看| 成人午夜私人影院| 欧美一级淫片007| 一区二区三区久久| 99精品视频免费在线观看| 精品国产人成亚洲区| 日韩精品电影在线| 欧美性生活影院| 亚洲伦理在线免费看| 成人av资源在线| 国产欧美视频一区二区三区| 免费成人av资源网| 欧美一区二区三区在线视频| 亚洲综合在线第一页| 91老司机福利 在线| 中文字幕中文字幕在线一区| 国产精品538一区二区在线| 日韩精品一区二区三区四区视频| 天堂精品中文字幕在线| 欧美日韩一区不卡| 亚洲一区二区三区视频在线| 91免费视频网| 亚洲靠逼com| 91麻豆成人久久精品二区三区| 中文字幕一区二区三区视频| jlzzjlzz国产精品久久| 中文字幕一区二区三区四区不卡| 成人丝袜高跟foot| 成人免费在线视频| 91美女福利视频| 依依成人精品视频| 日本精品一区二区三区四区的功能| 成人欧美一区二区三区白人| 91网站最新地址| 亚洲精品欧美激情| 欧美日韩成人高清| 日韩av成人高清| 欧美电影免费观看高清完整版| 久久国产麻豆精品| 精品福利av导航| 777xxx欧美| 奇米在线7777在线精品| 欧美精品自拍偷拍| 美女视频一区在线观看| 精品福利一区二区三区| 国产激情91久久精品导航| 国产欧美在线观看一区| www.亚洲色图.com| 亚洲天天做日日做天天谢日日欢 | 又紧又大又爽精品一区二区| 欧美影院精品一区| 日本大胆欧美人术艺术动态| 久久一夜天堂av一区二区三区| 国产露脸91国语对白| 国产女人18水真多18精品一级做| www.成人在线| 亚洲成av人片一区二区| 欧美zozozo| 99久久99久久精品免费观看| 亚洲综合在线免费观看| 91精品视频网| 成人少妇影院yyyy| 国产成人综合在线播放| 国产精品国产自产拍在线| 欧美亚洲愉拍一区二区| 精东粉嫩av免费一区二区三区| 国产日韩精品一区二区三区| 免费成人在线视频观看| 成人国产精品免费网站| 亚洲欧美综合网| 欧美日韩国产一区| 韩国精品主播一区二区在线观看| 国产精品色呦呦| 正在播放亚洲一区| 国产成人在线看| 亚欧色一区w666天堂| 国产亚洲福利社区一区| 欧美天堂亚洲电影院在线播放| 久久精品国产99| 亚洲黄色小说网站| 欧美sm美女调教| 色婷婷av一区二区三区大白胸 | ...中文天堂在线一区| 欧美日韩二区三区| 风流少妇一区二区| 亚洲va欧美va人人爽午夜 | 专区另类欧美日韩| 91精品国产全国免费观看| 成人做爰69片免费看网站| 日产国产欧美视频一区精品| 国产精品日韩成人| 欧美一区二区黄色| 色88888久久久久久影院按摩| 国产精品一区不卡| 青娱乐精品在线视频| 又紧又大又爽精品一区二区| 日韩女优av电影|