📄 txrxbase.cpp
字号:
// TxRxBase.cpp: implementation of the CTxRxBase class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TxRxBase.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTxRxBase::CTxRxBase()
:m_ThreadRunning(0)
{
ZeroMemory(&m_HookAdapter, sizeof(HookAdapter));
}
CTxRxBase::~CTxRxBase()
{
m_ThreadRunning = 0;
Sleep(100);
if( m_HookAdapter.m_OverLapped.hEvent )
{
CloseHandle( m_HookAdapter.m_OverLapped.hEvent );
}
}
BOOLEAN CTxRxBase::HP_UpdateAdapterCurrentAddress( PHookAdapter pAdapter )
{
W32N_REQUEST W32N_Request;
NDIS_STATUS nNdisStatus;
//
// Get Link Address, If Necessary
//
W32N_Request.NdisRequest.RequestType = NdisRequestQueryInformation;
W32N_Request.NdisRequest.DATA.QUERY_INFORMATION.InformationBuffer = pAdapter->m_CurrentAddress;
W32N_Request.NdisRequest.DATA.QUERY_INFORMATION.InformationBufferLength = 32;
W32N_Request.NdisRequest.DATA.QUERY_INFORMATION.BytesWritten = 0;
W32N_Request.NdisRequest.DATA.QUERY_INFORMATION.BytesNeeded = 0;
W32N_Request.NdisRequest.DATA.QUERY_INFORMATION.Oid = OID_802_3_CURRENT_ADDRESS;
nNdisStatus = W32N_MakeNdisRequest(
pAdapter->m_hDevice,
&W32N_Request,
&pAdapter->m_OverLapped,
TRUE // Synchronous
);
if( nNdisStatus )
{
return( FALSE );
}
return TRUE;
}
BOOLEAN CTxRxBase::HP_SetPacketFilter( PHookAdapter pAdapter, ULONG nPacketFilter )
{
W32N_REQUEST W32N_Request;
NDIS_STATUS nNdisStatus;
W32N_Request.NdisRequest.RequestType = NdisRequestSetInformation;
W32N_Request.NdisRequest.DATA.SET_INFORMATION.Oid = OID_GEN_CURRENT_PACKET_FILTER;
W32N_Request.NdisRequest.DATA.SET_INFORMATION.InformationBuffer = &nPacketFilter;
W32N_Request.NdisRequest.DATA.SET_INFORMATION.InformationBufferLength = sizeof( ULONG );
W32N_Request.NdisRequest.DATA.SET_INFORMATION.BytesRead = 0;
W32N_Request.NdisRequest.DATA.SET_INFORMATION.BytesNeeded = 0;
nNdisStatus = W32N_MakeNdisRequest(
pAdapter->m_hDevice,
&W32N_Request,
&pAdapter->m_OverLapped,
TRUE // Synchronous
);
if( nNdisStatus )
{
return( FALSE );
}
return( TRUE );
}
bool CTxRxBase::Create(HANDLE hDevice)
{
if (!hDevice) return FALSE;
this->m_HookAdapter.m_hDevice = hDevice;
this->m_AdapterInfo.hNICAdapterDevice= hDevice;
m_HookAdapter.m_OverLapped.hEvent = CreateEvent(
NULL, // Security Attributes
FALSE, // Auto-Reset
FALSE, // Initial State Signaled
NULL // Event-object Name
);
if( !m_HookAdapter.m_OverLapped.hEvent )
{
return FALSE;
}
ResetEvent( m_HookAdapter.m_OverLapped.hEvent );
HP_UpdateAdapterCurrentAddress(&m_HookAdapter);
W32N_DisableLoopback(
m_HookAdapter.m_hDevice,
MSrcAddr + 0, // Offset Of Source Address Into Packet
ETHER_ADDR_LENGTH, // Length Of Address
m_HookAdapter.m_CurrentAddress // Address Byte Bytes
);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -