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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kshielddirectorytree.cpp

?? 爾羅斯著名黑客寫的rootkit
?? CPP
字號:
#include "KShieldDirectoryTree.h"
#include "../KLocker/KLocker.h"

#ifdef __TEST_WIN32
extern BOOLEAN MatchW(WCHAR *string, WCHAR *pattern);

PWSTR _skipdelimit(PWSTR pwszString, PWSTR pwszDelimit)
{
  PWSTR pwszDelimitTmp;
  
  pwszDelimitTmp = pwszDelimit;
  while (*pwszDelimitTmp != 0)
  {
    while (!(*pwszString ^ *pwszDelimitTmp))
    {
      ++pwszString;
      pwszDelimitTmp = pwszDelimit-1;
      break;
    }
    ++pwszDelimitTmp;
  }

  return pwszString;
}

PWSTR _nextdelimit(PWSTR pwszString, PWSTR pwszDelimit)
{
  PWSTR pwszLast = pwszString;

  PWSTR pwszDelimitTmp = pwszDelimit;
  while (*pwszLast != 0)
  {
    if (*pwszDelimitTmp == 0)
    {
      pwszDelimitTmp = pwszDelimit;
      ++pwszLast;
    }
    if (!(*pwszLast ^ *pwszDelimitTmp))
      break;
    ++pwszDelimitTmp;
  }
  
  return pwszLast;
}

PWSTR _wcstok(PWSTR pwszString, PWSTR pwszDelimit, PWSTR* ppwszLast)
{
  if (pwszString == NULL)
    pwszString = *ppwszLast;

//  PWSTR pwszDelimitTmp;

/*  pwszDelimitTmp = pwszDelimit;
  while (*pwszDelimitTmp != 0)
  {
    while (!(*pwszString ^ *pwszDelimitTmp))
    {
      ++pwszString;
      pwszDelimitTmp = pwszDelimit-1;
      break;
    }
    ++pwszDelimitTmp;
  }
*/
  pwszString = _skipdelimit(pwszString, pwszDelimit);

//  PWSTR pwszLast = pwszString;
  PWSTR pwszLast = _nextdelimit(pwszString, pwszDelimit);
  
  if (*pwszLast != 0)
  {
    *pwszLast = 0;
    ++pwszLast;
  }
  *ppwszLast = pwszLast;

  /*
  pwszDelimitTmp = pwszDelimit;
  while (*pwszLast != 0)
  {
    if (*pwszDelimitTmp == 0)
    {
      pwszDelimitTmp = pwszDelimit;
      ++pwszLast;
    }
    if (!(*pwszLast ^ *pwszDelimitTmp))
    {
      if (*pwszLast != 0)
      {
        *pwszLast = 0;
        ++pwszLast;
      }
      break;
    }
    ++pwszDelimitTmp;
  }
  *ppwszLast = pwszLast;
  */

  if (*pwszString != 0)
    return pwszString;
  return NULL;
}
#endif //__TEST_WIN32

KShieldDirectoryTree::KShieldDirectoryTree()
{
  m_pRoot = NULL;
}

KShieldDirectoryTree::~KShieldDirectoryTree()
{
  m_KSynchroObject.Lock(0);

  if (m_pRoot != NULL)
    delete m_pRoot;
  m_pRoot = NULL;

  m_KSynchroObject.UnLock(0);
}

BOOLEAN KShieldDirectoryTree::Add(PWSTR pwszFullPath, PVOID pUserContext)
{
  KLocker locker(&m_KSynchroObject);

  if (pwszFullPath == NULL)
    return FALSE;

  int nPathLen = wcslen(pwszFullPath);
  int nSizeToken;
  PWSTR pwszFullPathSave = new WCHAR[nPathLen + sizeof(WCHAR)];
  if (pwszFullPathSave == NULL)
    return FALSE;
  wcscpy(pwszFullPathSave, pwszFullPath);
  PWSTR pwszEndPath = pwszFullPathSave + nPathLen;

  BOOLEAN bRes = FALSE;
  
  PWSTR pwszLast;
  //PWSTR pwszToken = _wcstok(pwszFullPathSave, L"\\/");
  PWSTR pwszToken = _wcstok(pwszFullPathSave, L"\\/", &pwszLast);

  if (pwszToken != NULL && m_pRoot == NULL)
  {
    m_pRoot = new KShieldDirectory(NULL);
    if (m_pRoot != NULL)
    {
      if (m_pRoot->Open(L"Root", NULL) != TRUE)
      {
        pwszToken = NULL;
        delete m_pRoot;
        m_pRoot = NULL;
      }
    }
    else
    {
      pwszToken = NULL;
    }
  }

  KShieldDirectory* pCurrentDir = m_pRoot;
  KShieldDirectory* pItem;
  PVOID pUserContextTmp;
  while (pwszToken != NULL)
  {
    pItem = pCurrentDir->Find(pwszToken);
    if (pItem == NULL)
    {
      pItem = pCurrentDir->Add(pwszToken, NULL);
      if (pItem == NULL)
        break;
    }
    nSizeToken = wcslen(pwszToken);
    if ((pwszToken+nSizeToken) != pwszEndPath)
      pUserContextTmp = NULL;
    else
      pUserContextTmp = pUserContext;

    if (pItem->m_pDirectoryInfo != NULL && pItem->m_pDirectoryInfo->m_pUserContext == NULL)
    {
      pItem->m_pDirectoryInfo->m_pUserContext = pUserContextTmp;
      if ((pwszToken+nSizeToken) == pwszEndPath)
      {
        if (pCurrentDir->m_pDirectoryInfo != NULL && pUserContextTmp != NULL)
          ++(pCurrentDir->m_pDirectoryInfo->m_dwUserCount);
        bRes = TRUE;
      }
    }

    pCurrentDir = pItem;

    pwszToken = _wcstok(NULL, L"\\/", &pwszLast);
  }

  delete[] pwszFullPathSave;

  return bRes;
}

BOOLEAN KShieldDirectoryTree::Remove(PWSTR pwszFullPath, PVOID* ppUserContext)
{
  KLocker locker(&m_KSynchroObject);

  BOOLEAN bRes = FALSE;
  KShieldDirectory* pItem = FindFrom(m_pRoot, pwszFullPath);
  if (pItem != NULL && pItem->m_pDirectoryInfo != NULL)
  {
    if (ppUserContext != NULL)
      *ppUserContext = pItem->m_pDirectoryInfo->m_pUserContext;

    if (pItem->m_pDirectoryInfo->m_pUserContext != NULL)
    {
      KShieldDirectory* pItemParent = pItem->m_pParentDirectory;
      while (pItemParent != NULL && pItem->m_pDirectoryInfo != NULL)
      {
        if (pItem->IsEmpty() == TRUE)
        {
          if (bRes == FALSE || pItem->m_pDirectoryInfo->m_pUserContext == NULL)
          {
            pItemParent->Remove(pItem->m_pDirectoryInfo->m_pwszName);
            if (bRes == FALSE)
              --(pItemParent->m_pDirectoryInfo->m_dwUserCount);
            bRes = TRUE;
          }
          else
          {
            break;
          }
        }
        else
        {
          if (bRes == FALSE)
          {
            pItem->m_pDirectoryInfo->m_pUserContext = NULL;
            --(pItemParent->m_pDirectoryInfo->m_dwUserCount);
            bRes = TRUE;
          }
          break;
        }
        pItem = pItemParent;
        pItemParent = pItem->m_pParentDirectory;
      }
    }
  }

  return bRes;
}

KShieldDirectory* KShieldDirectoryTree::Find(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext)
{
  KLocker locker(&m_KSynchroObject);

  KShieldDirectory* pParentItem;
  KShieldDirectory* pItem = FindFrom(m_pRoot, pwszFullPath, &pParentItem);
  if (pItem != NULL && pItem->m_pDirectoryInfo != NULL)
  {
    if (pItem->m_pDirectoryInfo->m_pUserContext != NULL)
    {
      if (ppUserContext != NULL)
        *ppUserContext = pItem->m_pDirectoryInfo->m_pUserContext;
    }
    else
    {
      pItem = NULL;
    }
    
    if (ppParentUserContext != NULL)
    {
      if (pParentItem != NULL && pParentItem->m_pDirectoryInfo != NULL)
        *ppParentUserContext = pParentItem->m_pDirectoryInfo->m_pUserContext;
    }
  }

  return pItem;
}

KShieldDirectory* KShieldDirectoryTree::FindMatch(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext)
{
  KLocker locker(&m_KSynchroObject);

  KShieldDirectory* pParentItem;
  KShieldDirectory* pItem = FindMatchFrom(m_pRoot, pwszFullPath, &pParentItem);
  if (pItem != NULL && pItem->m_pDirectoryInfo != NULL)
  {
    if (pItem->m_pDirectoryInfo->m_pUserContext != NULL)
    {
      if (ppUserContext != NULL)
        *ppUserContext = pItem->m_pDirectoryInfo->m_pUserContext;
    }
    else
    {
      pItem = NULL;
    }

    if (ppParentUserContext != NULL)
    {
      if (pParentItem != NULL && pParentItem->m_pDirectoryInfo != NULL)
        *ppParentUserContext = pParentItem->m_pDirectoryInfo->m_pUserContext;
    }
  }

  return pItem;
}

KShieldDirectory* KShieldDirectoryTree::FindMatchRest(PWSTR pwszFullPath, PVOID* ppUserContext, PVOID* ppParentUserContext)
{
  KLocker locker(&m_KSynchroObject);

  KShieldDirectory* pParentItem;
  KShieldDirectory* pItem = FindMatchRestFrom(m_pRoot, pwszFullPath, &pParentItem);
  if (pItem != NULL && pItem->m_pDirectoryInfo != NULL)
  {
    if (pItem->m_pDirectoryInfo->m_pUserContext != NULL)
    {
      if (ppUserContext != NULL)
        *ppUserContext = pItem->m_pDirectoryInfo->m_pUserContext;
    }
    else
    {
      pItem = NULL;
    }

    if (ppParentUserContext != NULL)
    {
      if (pParentItem != NULL && pParentItem->m_pDirectoryInfo != NULL)
        *ppParentUserContext = pParentItem->m_pDirectoryInfo->m_pUserContext;
    }
  }

  return pItem;
}

KShieldDirectory* KShieldDirectoryTree::FindFrom(KShieldDirectory* pRoot, PWSTR pwszFullPath, KShieldDirectory** ppParentDir)
{
  KLocker locker(&m_KSynchroObject);

  if (pRoot == NULL)
    pRoot = m_pRoot;

  if (pRoot == NULL || pwszFullPath == NULL)
    return NULL;

  int nPathLen = wcslen(pwszFullPath);
  PWSTR pwszFullPathSave = new WCHAR[nPathLen + sizeof(WCHAR)];
  if (pwszFullPathSave == NULL)
    return NULL;
  wcscpy(pwszFullPathSave, pwszFullPath);

  KShieldDirectory* pItem = pRoot;
  PWSTR pwszLast;

  PWSTR pwszToken = _wcstok(pwszFullPathSave, L"\\/", &pwszLast);
  while (pwszToken != NULL)
  {
    pItem = pItem->Find(pwszToken);
    if (pItem == NULL)
      break;
    pwszToken = _wcstok(NULL, L"\\/", &pwszLast);
  }

  if (ppParentDir != NULL)
  {
    *ppParentDir = NULL;
    if (pItem != NULL)
      *ppParentDir = pItem->m_pParentDirectory;
  }

  delete[] pwszFullPathSave;

  return pItem;
}

KShieldDirectory* KShieldDirectoryTree::FindMatchFrom(KShieldDirectory* pRoot, PWSTR pwszFullPath, KShieldDirectory** ppParentDir)
{
  KLocker locker(&m_KSynchroObject);

  if (pRoot == NULL)
    pRoot = m_pRoot;

  if (pRoot == NULL || pwszFullPath == NULL)
    return NULL;

  int nPathLen = wcslen(pwszFullPath);
  PWSTR pwszFullPathSave = new WCHAR[nPathLen + sizeof(WCHAR)];
  if (pwszFullPathSave == NULL)
    return NULL;
  wcscpy(pwszFullPathSave, pwszFullPath);

  KShieldDirectory* pItem = pRoot;
  PWSTR pwszLast;

  PWSTR pwszToken = _wcstok(pwszFullPathSave, L"\\/", &pwszLast);
  while (pwszToken != NULL)
  {
    pItem = pItem->FindMatch(pwszToken);
    if (pItem == NULL)
      break;
    pwszToken = _wcstok(NULL, L"\\/", &pwszLast);
  }

  if (ppParentDir != NULL)
  {
    *ppParentDir = NULL;
    if (pItem != NULL)
      *ppParentDir = pItem->m_pParentDirectory;
  }

  delete[] pwszFullPathSave;

  return pItem;
}

KShieldDirectory* KShieldDirectoryTree::FindMatchRestFrom(KShieldDirectory* pRoot, PWSTR pwszFullPath, KShieldDirectory** ppParentDir)
{
  KLocker locker(&m_KSynchroObject);

  if (pRoot == NULL)
    pRoot = m_pRoot;

  if (pRoot == NULL || pwszFullPath == NULL)
    return NULL;

  KShieldDirectory* pItem = pRoot;
  KShieldDirectory* pItemPrev;
  PWSTR pwszToken = _skipdelimit(pwszFullPath, L"\\/");
  PWSTR pwszNextToken;
  WCHAR wSym;
  while (*pwszToken != 0)
  {
    pwszNextToken = _nextdelimit(pwszToken, L"\\/");
    wSym = *pwszNextToken;
    *pwszNextToken = 0;
    pItemPrev = pItem;
    pItem = pItem->FindMatch(pwszToken);
    *pwszNextToken = wSym;
    if (pItem == NULL || pItem->m_pDirectoryInfo == NULL)
    {
      if (pItem == NULL && *pwszNextToken != 0)
        pItem = pItemPrev->FindMatch(pwszToken);
      break;
    }
    if (pItem->m_pDirectoryInfo->m_bCompareRest == TRUE && pItem->IsEmpty() == TRUE)
    {
      if (MatchW(pwszToken, pItem->m_pDirectoryInfo->m_pwszName) == TRUE)
        break;
    }

    pwszToken = _skipdelimit(pwszNextToken, L"\\/");
  }

  if (ppParentDir != NULL)
  {
    *ppParentDir = NULL;
    if (pItem != NULL)
      *ppParentDir = pItem->m_pParentDirectory;
  }

  return pItem;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区视频在线观看2022| 亚洲国产一区二区三区| 亚洲欧美日韩中文播放 | 国产精品综合网| 欧美三级中文字幕| 中文字幕日韩一区| 国产一区亚洲一区| 337p亚洲精品色噜噜狠狠| 综合色天天鬼久久鬼色| 国产成人av影院| 欧美成人在线直播| 日韩福利视频网| 欧美人狂配大交3d怪物一区| 综合久久久久久| 99久久久久久99| 国产精品久久久久国产精品日日 | 精品少妇一区二区三区在线播放 | 91精品国产综合久久精品app| 国产精品无人区| 国产iv一区二区三区| 精品国产髙清在线看国产毛片| 亚洲va欧美va人人爽| 在线观看免费视频综合| 亚洲欧美一区二区三区极速播放 | 在线综合视频播放| 性做久久久久久免费观看| 在线亚洲高清视频| 一区二区三区四区蜜桃 | 欧美成人vps| 麻豆国产欧美一区二区三区| 欧美一区二区三区在线观看 | 秋霞电影一区二区| 在线播放一区二区三区| 午夜影院在线观看欧美| 欧美色图天堂网| 午夜日韩在线电影| 日韩精品中文字幕一区二区三区| 青青国产91久久久久久| 精品日韩一区二区三区| 国产精品99久久久久久有的能看| 久久久美女毛片| 成人免费三级在线| 亚洲欧美激情一区二区| 在线观看不卡视频| 日日欢夜夜爽一区| 26uuu色噜噜精品一区| 国产成人一级电影| 亚洲欧美日韩电影| 欧美日韩国产美| 国产在线一区观看| 最新国产成人在线观看| 欧美日韩免费视频| 久久99国产精品免费网站| 久久精品日产第一区二区三区高清版 | 蜜桃av一区二区| 国产日产亚洲精品系列| 91蜜桃传媒精品久久久一区二区| 午夜久久福利影院| 久久久影院官网| 色哟哟一区二区| 玖玖九九国产精品| 国产欧美精品一区aⅴ影院| 色婷婷激情久久| 美国十次了思思久久精品导航| 日本一区二区不卡视频| 欧美日韩视频专区在线播放| 精一区二区三区| 亚洲在线中文字幕| 国产欧美日韩在线看| 欧美亚洲国产一卡| 国产福利视频一区二区三区| 夜夜操天天操亚洲| 精品电影一区二区三区| 91久久精品网| 国产露脸91国语对白| 香蕉乱码成人久久天堂爱免费| 久久精品日韩一区二区三区| 在线播放中文字幕一区| 色一情一伦一子一伦一区| 国内成人精品2018免费看| 亚洲一区二区偷拍精品| 国产欧美日韩视频在线观看| 日韩一区二区不卡| 欧美在线free| 99久久久久久| 精品中文av资源站在线观看| 一二三四区精品视频| 中文字幕制服丝袜成人av | 久久精品噜噜噜成人88aⅴ| 中文字幕一区二区三区蜜月| 精品国产伦一区二区三区观看方式 | 日韩三级免费观看| 91黄视频在线| jlzzjlzz欧美大全| 国产精品一级黄| 久久66热偷产精品| 日本三级亚洲精品| 亚洲午夜久久久久久久久电影网| 国产精品免费看片| 国产日韩精品一区二区三区| 日韩精品一区二区三区四区视频 | 色94色欧美sute亚洲线路一久 | 美女免费视频一区| 日本成人在线看| 午夜伦欧美伦电影理论片| 亚洲综合视频在线观看| 亚洲精品国产成人久久av盗摄 | 久久久久国产精品麻豆| 26uuu国产电影一区二区| 欧美一区二区女人| 欧美一区二区三区四区久久| 欧美精品在线一区二区三区| 欧美日韩在线直播| 欧美日韩视频在线一区二区| 欧美日本韩国一区二区三区视频| 在线观看一区二区精品视频| 色综合色综合色综合| 91国内精品野花午夜精品| 欧日韩精品视频| 欧美日本韩国一区二区三区视频 | 国产精品人成在线观看免费| 中文字幕欧美激情| 亚洲精选视频在线| 亚洲欧美二区三区| 午夜a成v人精品| 久久99久久久久| 国产在线视视频有精品| 国产成a人亚洲| 91亚洲男人天堂| 欧美图片一区二区三区| 在线成人av影院| 国产亚洲欧美色| 亚洲欧洲av另类| 五月激情综合色| 国产激情一区二区三区| 色综合天天狠狠| 欧美日韩激情一区二区三区| 欧美一区二区视频在线观看2020 | 欧美自拍丝袜亚洲| 欧美精品18+| 2021久久国产精品不只是精品| 久久精品人人做人人爽97| 亚洲精选在线视频| 极品瑜伽女神91| 91猫先生在线| 欧美成人精品福利| 亚洲精选一二三| 国产麻豆成人精品| 91极品视觉盛宴| 久久久蜜臀国产一区二区| 亚洲综合在线免费观看| 韩国女主播一区二区三区| 色综合久久99| 国产亚洲一区二区三区在线观看 | 正在播放亚洲一区| 亚洲国产精品成人综合| 香蕉成人伊视频在线观看| 国产91精品一区二区麻豆网站| 欧美中文字幕不卡| 欧美国产综合一区二区| 日韩不卡一区二区三区| 99r国产精品| www精品美女久久久tv| 亚洲综合色视频| 成人av影院在线| 日韩色视频在线观看| 一区二区三区在线观看欧美| 国产成人综合精品三级| 日韩欧美在线网站| 尤物视频一区二区| 成人性生交大合| 精品国产网站在线观看| 亚洲高清在线精品| 91黄视频在线观看| 国产精品护士白丝一区av| 国产乱子伦视频一区二区三区 | 国产精品久久综合| 国产在线精品免费| 日韩一级免费观看| 亚洲第一福利视频在线| 99久久婷婷国产精品综合| 国产欧美精品日韩区二区麻豆天美| 亚洲成人高清在线| 欧洲精品视频在线观看| 亚洲人xxxx| 色婷婷国产精品| 亚洲视频一区在线观看| 成人黄色国产精品网站大全在线免费观看| 制服.丝袜.亚洲.另类.中文| 香蕉乱码成人久久天堂爱免费| 91高清在线观看| 亚洲综合丝袜美腿| 欧美日韩免费电影| 亚洲国产精品综合小说图片区| 色综合久久久久| 五月天婷婷综合| 日韩欧美国产综合一区| 男人操女人的视频在线观看欧美 | 欧美日韩亚洲综合在线| 亚洲最大成人网4388xx|