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

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

?? hook.cpp

?? com寫的網絡ip地址掛起的程序
?? CPP
字號:
///////////////////////////////////////////////////
//
//  Hook.cpp - Copyright 1997, Don Box
//  
//  A host info channel hook
//
//

#include "hook.h"
#include <initguid.h>
#include "common.h"

#include <assert.h>


static NODE_INFO g_niThis;
DWORD g_dwTLSIndex;
HANDLE g_hheap;
HINSTANCE g_hInstance;

BOOL WINAPI DllMain(HINSTANCE h, DWORD dwReason, void *pv) {
// declare one process-wide channel hook instance
    static HostHook s_theHook;
    switch (dwReason)
    {
    case DLL_PROCESS_ATTACH:
        {
// turn on sockets if not already enabled in this process
            WSADATA wsad;
            WSAStartup(MAKEWORD(1,1), &wsad);
// acquire a TLS slot
            if ((g_dwTLSIndex = TlsAlloc()) == 0xFFFFFFFF)
                return FALSE;
// register the process-wide channel hook
            HRESULT hr = CoRegisterChannelHook(EXTENTID_HostHook, &s_theHook);
            if (FAILED(hr))
                return FALSE;
// initialize various globals including getting the current IP address
            g_hInstance = h;
            g_hheap = HeapCreate(0, 1, 0);
            g_niThis.pid = GetCurrentProcessId();
            char szHostName[1024];
            int res = gethostname(szHostName, 1024);
            if (res == 0) {
                HOSTENT *p = gethostbyname(szHostName);
                if (p)
                    memcpy(&g_niThis.ip, p->h_addr, 4);
            }
        }
        break;
    case DLL_THREAD_DETACH:
        {
// clean up any thread/call context acquired for this thread
            THREAD_CONTEXT *p = (THREAD_CONTEXT *)TlsGetValue(g_dwTLSIndex);
            if (p)
            {
                CALL_CONTEXT *pc = p->pCurrentCall;
                while (pc)
                {
                    p->pCurrentCall = p->pCurrentCall->pNext;
                    HeapFree(g_hheap, 0, pc);
                    pc = p->pCurrentCall;
                }
                HeapFree(g_hheap, 0, p);
            }
        }
        break;
    case DLL_PROCESS_DETACH:
// release TLS slot and deallocate all memory
        if (g_dwTLSIndex != 0xFFFFFFFF)
            TlsFree(g_dwTLSIndex);
        HeapDestroy(g_hheap);
        break;
    }
    return TRUE;
}

// Helper routine to grab onto the current THREAD_CONTEXT
THREAD_CONTEXT *GetCurrentThreadContext(void)
{
// grab the pointer
    void *pv = TlsGetValue(g_dwTLSIndex);

// if this is the first time through, alloc and init
    if (pv == 0) 
    {
        pv = HeapAlloc(g_hheap, 0, sizeof(THREAD_CONTEXT));
        assert(pv);
        TlsSetValue(g_dwTLSIndex, pv);
        THREAD_CONTEXT& tc = *((THREAD_CONTEXT*)pv);
        tc.pCurrentCall = 0;
        tc.niThis = g_niThis;
        tc.niThis.tid = GetCurrentThreadId();
        tc.niTarget = tc.niThis;
    }
    return (THREAD_CONTEXT*)pv;
}

// Helper routine to push a new call context onto the current stack
// based (potentially) on a new incoming call
CALL_CONTEXT *PushCallContext(void *pvORPCTHIS)
{
// get TLS slot for this thread
    THREAD_CONTEXT *pThreadContext = GetCurrentThreadContext();
    assert(pThreadContext);

// allocate a new call context for this call    
    CALL_CONTEXT *pNewCallContext = (CALL_CONTEXT*)HeapAlloc(g_hheap, 0, sizeof(CALL_CONTEXT));
    assert(pNewCallContext);

// initialize new call context
    if (pvORPCTHIS)
    {
        memcpy(static_cast<HOOK_THIS*>(pNewCallContext), pvORPCTHIS, sizeof(HOOK_THIS));
    }
    else if (pThreadContext->pCurrentCall)
    {
        *pNewCallContext = *pThreadContext->pCurrentCall;
        pNewCallContext->niDirect = pThreadContext->niThis;
    }
    else
    {
        CoCreateGuid(&pNewCallContext->cid);
        pNewCallContext->niDirect = pNewCallContext->niIndirect = pThreadContext->niThis;
    }

// push context onto stack
    pNewCallContext->pNext = pThreadContext->pCurrentCall;
    pThreadContext->pCurrentCall = pNewCallContext;
    return pNewCallContext;
}

// Helper routine to pop current call context from the thread stack
void PopCallContext(void *pvORPCTHAT)
{
    THREAD_CONTEXT *pThreadContext = GetCurrentThreadContext();
    assert(pThreadContext);
    HOOK_THAT *pht = pThreadContext;

    if (pvORPCTHAT)
        *pht = *(HOOK_THAT*)pvORPCTHAT;
    else
        pThreadContext->niTarget = pThreadContext->niThis;
    
// pop the current call context
    if (pThreadContext->pCurrentCall)
    {
        CALL_CONTEXT *pctx = pThreadContext->pCurrentCall;
        pThreadContext->pCurrentCall = pThreadContext->pCurrentCall->pNext;
        HeapFree(g_hheap, 0, pctx);
    }
}

STDMETHODIMP 
HostHook::QueryInterface(REFIID riid, void **ppv)
{
    if (riid == IID_IUnknown)
        *ppv = static_cast<IUnknown*>(this);
    else if (riid == IID_IUnknown)
        *ppv = static_cast<IChannelHook*>(this);
    else
        return (*ppv = 0), E_NOINTERFACE;
    reinterpret_cast<IUnknown*>(*ppv)->AddRef();
    return S_OK;
}

STDMETHODIMP_(ULONG) 
HostHook::AddRef(void)
{
    return 2;
}

STDMETHODIMP_(ULONG) 
HostHook::Release(void)
{
    return 1;
}


// called in client prior to making a call
STDMETHODIMP_(void) 
HostHook::ClientGetSize(REFGUID uExtent, REFIID riid, ULONG *pDataSize)
{
    assert(uExtent == EXTENTID_HostHook);
    *pDataSize = sizeof(HOOK_THIS);
}

// called in client prior to making a call
STDMETHODIMP_(void) 
HostHook::ClientFillBuffer(REFGUID uExtent, REFIID riid, ULONG *pDataSize, void *pDataBuffer)
{
    assert(uExtent == EXTENTID_HostHook);
    CALL_CONTEXT *pContext = PushCallContext(0);
    HOOK_THIS *pORPCTHIS = (HOOK_THIS *)pDataBuffer;

    *pORPCTHIS = *pContext;

    *pDataSize = sizeof(HOOK_THIS);
}

// called in client just after a call completes
STDMETHODIMP_(void) 
HostHook::ClientNotify(REFGUID uExtent, REFIID riid, ULONG cbDataSize, void *pDataBuffer, DWORD lDataRep, HRESULT hrFault)
{
    assert(uExtent == EXTENTID_HostHook);
    assert(lDataRep == NDR_LOCAL_DATA_REPRESENTATION);
    PopCallContext(pDataBuffer);
}

// called in server just prior to invoking a call
STDMETHODIMP_(void) 
HostHook::ServerNotify(REFGUID uExtent, REFIID riid, ULONG cbDataSize, void *pDataBuffer, DWORD lDataRep)
{
    assert(uExtent == EXTENTID_HostHook);
    assert(lDataRep == NDR_LOCAL_DATA_REPRESENTATION);
    PushCallContext(pDataBuffer);
}

// called in server just after invoking a call
STDMETHODIMP_(void) 
HostHook::ServerGetSize(REFGUID uExtent, REFIID riid, HRESULT hrFault, ULONG *pDataSize)
{
    *pDataSize = sizeof(HOOK_THAT);
}

// called in server just after invoking a call
STDMETHODIMP_(void) 
HostHook::ServerFillBuffer(REFGUID uExtent, REFIID riid, ULONG *pDataSize, void *pDataBuffer, HRESULT hrFault)
{
    assert(uExtent == EXTENTID_HostHook);
    THREAD_CONTEXT *pThreadContext = GetCurrentThreadContext();
    HOOK_THAT *pORPCTHAT = (HOOK_THAT *)pDataBuffer;

    pORPCTHAT->niTarget = pThreadContext->niThis;
    
    *pDataSize = sizeof(HOOK_THAT);
    PopCallContext(0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品麻豆日日躁夜夜躁| 粉嫩嫩av羞羞动漫久久久| 亚洲免费在线视频一区 二区| 久久久99精品免费观看| 亚洲精品一线二线三线无人区| 日韩欧美国产一区二区在线播放| 4438亚洲最大| 欧美一级欧美一级在线播放| 在线播放中文字幕一区| 91麻豆精品91久久久久久清纯| 欧美一三区三区四区免费在线看| 欧美老年两性高潮| 91精品国产麻豆| 久久亚洲私人国产精品va媚药| www精品美女久久久tv| 久久免费偷拍视频| 国产精品沙发午睡系列990531| 亚洲人成人一区二区在线观看| 一区在线播放视频| 亚洲国产三级在线| 另类综合日韩欧美亚洲| 国产精品影视天天线| av一二三不卡影片| 欧美视频在线播放| 亚洲精品在线一区二区| 亚洲国产精品成人久久综合一区| 日韩理论片在线| 日日夜夜精品视频天天综合网| 人人爽香蕉精品| 国产激情91久久精品导航| 成人免费av在线| 欧美久久高跟鞋激| 精品免费99久久| 亚洲色图色小说| 蜜臀av在线播放一区二区三区| 国产成人亚洲综合a∨婷婷图片| 色素色在线综合| 欧美α欧美αv大片| 免费成人在线影院| 国产成人在线色| 欧美另类变人与禽xxxxx| 国产性做久久久久久| 亚洲一区二区综合| 国产精品456| 欧美日韩精品福利| 中文字幕中文字幕一区| 日韩电影免费一区| 色香蕉成人二区免费| 久久夜色精品国产欧美乱极品| 亚洲久草在线视频| 国产精品一二三区| 欧美丰满少妇xxxbbb| 亚洲欧美激情视频在线观看一区二区三区 | 成人av午夜电影| 3atv在线一区二区三区| 亚洲色图制服诱惑 | www国产成人| 亚洲高清免费一级二级三级| 成人国产精品免费观看| 2020国产精品自拍| 天天免费综合色| 在线观看av不卡| 亚洲欧洲精品一区二区精品久久久| 精品亚洲aⅴ乱码一区二区三区| 欧美日韩中文一区| 亚洲精品综合在线| 99热在这里有精品免费| 欧美韩国日本综合| 国产高清不卡一区| 久久只精品国产| 国产一区二区三区精品欧美日韩一区二区三区 | 国产一区二区三区免费观看| 日韩欧美一级在线播放| 日韩国产高清在线| 91.麻豆视频| 三级成人在线视频| 欧美日韩电影在线| 午夜国产精品一区| 欧美精品在线一区二区三区| 亚洲国产成人av| 精品视频在线免费看| 亚洲国产成人高清精品| 欧美日韩视频在线观看一区二区三区| 亚洲乱码精品一二三四区日韩在线 | 日本美女一区二区| 欧美一级一区二区| 国内精品国产三级国产a久久| 精品国产污污免费网站入口| 国产在线看一区| 国产欧美va欧美不卡在线| 国产成人aaaa| 日本成人在线网站| 久久免费午夜影院| www.性欧美| 亚洲福利电影网| 欧美r级在线观看| 成人手机在线视频| 一二三区精品视频| 91.麻豆视频| 高清国产一区二区三区| 成人欧美一区二区三区白人 | 国产福利精品一区二区| 中文字幕亚洲电影| 在线免费观看不卡av| 久久激情五月激情| 亚洲欧美中日韩| 日韩欧美色电影| www.性欧美| 久久精品久久99精品久久| 久久精品日韩一区二区三区| 色综合av在线| 久草精品在线观看| 亚洲欧美日本在线| 亚洲精品在线免费观看视频| 91网站最新网址| 久久99精品久久久久久| 亚洲精品中文在线影院| 精品国产免费人成电影在线观看四季 | 91一区二区在线| 久久丁香综合五月国产三级网站| 中文字幕一区三区| 久久综合九色综合欧美98| 色天天综合色天天久久| 国产91在线观看| 麻豆成人久久精品二区三区小说| 国产精品国产三级国产普通话蜜臀 | 精品国产一区二区三区av性色 | 三级影片在线观看欧美日韩一区二区| 精品国产1区2区3区| 欧洲生活片亚洲生活在线观看| 国产精品一区二区黑丝| 日日夜夜精品视频免费| 亚洲免费资源在线播放| 国产精品美女久久久久aⅴ| 日韩精品中文字幕在线不卡尤物| 91浏览器打开| 成人久久18免费网站麻豆| 九九九精品视频| 国产精品88888| 久久国产尿小便嘘嘘尿| 亚洲一区二区中文在线| 亚洲天堂av一区| 国产精品伦理在线| 国产亚洲va综合人人澡精品 | 国产成人精品亚洲午夜麻豆| 日韩二区三区四区| 天堂一区二区在线| 亚洲综合色区另类av| 亚洲美女在线一区| 亚洲人成网站色在线观看| 综合久久国产九一剧情麻豆| 中文字幕国产一区| 中文字幕不卡一区| 久久久www成人免费无遮挡大片| 欧美揉bbbbb揉bbbbb| 欧美情侣在线播放| 欧美一级理论片| 日韩一区二区视频在线观看| 欧美一级片免费看| 精品国产第一区二区三区观看体验 | 在线观看成人免费视频| 欧美在线观看视频一区二区三区| 欧美三级资源在线| 在线电影院国产精品| 日韩欧美卡一卡二| 国产亚洲精品超碰| 国产精品久久久久精k8 | 欧美日韩久久久久久| 制服丝袜av成人在线看| 日韩无一区二区| 久久免费视频色| 国产精品久久久久久久久免费丝袜 | 日本二三区不卡| 欧美日韩高清在线| 26uuu国产在线精品一区二区| 中文字幕二三区不卡| 亚洲视频在线一区| 日韩精彩视频在线观看| 国内精品视频一区二区三区八戒| 成人一区二区三区在线观看| 色偷偷一区二区三区| 777午夜精品免费视频| 久久久久久99精品| 一区二区三区蜜桃网| 免费视频一区二区| eeuss鲁一区二区三区| 欧美久久久久久久久久| 国产日韩欧美精品在线| 亚洲自拍另类综合| 国产酒店精品激情| 欧美色中文字幕| 国产日韩欧美激情| 日日摸夜夜添夜夜添亚洲女人| 国产一区二区导航在线播放| 99riav久久精品riav| 精品久久久久一区| 亚洲国产一区二区在线播放| 国产九九视频一区二区三区| 欧美视频日韩视频| 国产精品久久久久久福利一牛影视|