【Inline Hook应用篇】限制剪切板(针对文件类型)

  • 限制剪切板,主要是限制不允许粘贴。我们对这两个系统API进行挂钩:
GetClipboardData和OleGetClipboard

//!<限制剪切板
InitHook("user32.dll", "GetClipboardData", (DWORD)hook_GetClipboardData);
InitHook("ole32.dll", "OleGetClipboard", (DWORD)hook_OleGetClipboard);
HANDLE _stdcall hook_GetClipboardData( UINT uFormat )
{ 
    if (CF_HDROP == uFormat)
    {//如果是文件,直接返回NULL
        return NULL;
    }

    HANDLE hRet;   

    PAPIHOOK32_ENTRY phk = g_HookEntry[1];//我这边是用了全局数组存储InitHook New出来的指针

    //恢复API头8个字节   
    RESTORE_OLDADDRESS(phk);
    /* 这里可以添加想要进行的处理过程*/    
    //真正执行API函数   
    hRet = GetClipboardData( uFormat );    
    //写入跳转语句,继续Hook   
    SET_NEWADDRESS(phk);

    return hRet;
} 
HRESULT _stdcall hook_OleGetClipboard( IDataObject ** ppDataObj )
{ 
    HRESULT hRet;   

    PAPIHOOK32_ENTRY phk= g_HookEntry[2];

    //恢复API头8个字节   
    RESTORE_OLDADDRESS( phk);
    /* 这里可以添加想要进行的处理过程*/    
    //真正执行API函数   
    hRet = OleGetClipboard( ppDataObj );    
    //写入跳转语句,继续Hook   
    SET_NEWADDRESS( phk);

    // 判断是否是文件类型
    FORMATETC cFmt = {(CLIPFORMAT) CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};
    HRESULT hTemp = (*ppDataObj)->QueryGetData( &cFmt);
    if ( S_OK == hTemp)
    {
        return CLIPBRD_E_CANT_OPEN ;
    }

    return hRet;
} 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值