#define ADD_FILTER CTL_CODE(FILE_DEVICE_DRVFLTIP, DRVFLTIP_IOCTL_INDEX+2, METHOD_BUFFERED, FILE_WRITE_ACCESS)
DWORD CAddRuleDlg::AddFilter(IPFilter pf)
{
DWORD result = ipFltDrv.WriteIo(ADD_FILTER,& pf, sizeof(pf)); //函式呼叫
if (result != DRV_SUCCESS)
{
AfxMessageBox("Unable to add rule to the driver");
return FALSE;
}
else
return TRUE;
}
DWORD TDriver::WriteIo(DWORD code, PVOID buffer, DWORD count) //呼叫函式定義
{
if(driverHandle == NULL)
return DRV_ERROR_INVALID_HANDLE;
DWORD bytesReturned;
BOOL returnCode = DeviceIoControl(driverHandle, //呼叫DeviceIoControl()包過濾實作
code,
buffer,
count,
NULL,
0,
&bytesReturned,
NULL);
if(!returnCode)
return DRV_ERROR_IO;
return DRV_SUCCESS;
}
下圖為在函式AddFilter(IPFilter pf)中各變數測驗值

下圖為在函式WriteIo(DWORD code, PVOID buffer, DWORD count)中各變數測驗值

對應引數值是正確的,而且除錯結果沒有錯誤,但并沒有實際進行包過濾動作,不知是什么原因。
求教高手幫忙解決一下,這個問題,非常著急,十分感謝。
uj5u.com熱心網友回復:
檢查一下returnCode正常嗎?uj5u.com熱心網友回復:
成功運行后 returnCode 的值為1,定義成long型也是1,但我剛涉及包過濾不久,這個回傳值是否正常真不太清楚,檔案里只說成功后的回傳值為非零。希望可以幫忙解釋一下,十分感謝uj5u.com熱心網友回復:
把lpOutBuffer引數填上,看看回傳的結果是什么,檢查一下BytesReturned,總之,先查查設備對這個指令的反映,然后再根據情況看下一步怎么做uj5u.com熱心網友回復:
BytesReturned值為0,outputBuffer沒有回傳結果,說明設備沒有執行相關操作嗎?如果是,那就是設備驅動本身的問題嗎?我使用的是DrvFltip.sys檔案所含有的驅動,win7,VS2013環境,會不會與這個有關?那我要如何解決重做環境?
uj5u.com熱心網友回復:
這種情況下,可以先給設備發些別的指令,比如一些比較簡單、基礎性的code,看看這個設備能否正常相應,如果對什么指令都沒反應,通過別的渠道人工操縱一下這個設備試試,總之先看看設備本身正不正常,把問題鎖定在某個特定的環節轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/119851.html
標籤:網絡及通訊開發
下一篇:關于檔案過濾驅動的irp捕獲問題
