When an NDIS component such as a LWF originates an OID Set request such as OID_GEN_CURRENT_PACKET_FILTER, NetAdapterCx reads the NDIS_OID_REQUEST, extracts the necessary information from the InformationBuffer, and calls the client driver's EVT_NET_ADAPTER_SET_RECEIVE_FILTER callback. Even though it reads from InformationBuffer, it does not set the NDIS_OID_REQUEST.DATA.SET_INFORMATION.BytesRead member, which has been causing issues (i.e. nmap/npcap#628) for our NDIS LWF that was being strict about checking this member. We are relaxing our code to work around the issue, but NetAdapterCx ought to update it to avoid issues in the future.
|
NxTranslationApp::SetPacketFilter( |
|
NDIS_OID_REQUEST const & Request |
|
) |
|
{ |
|
auto const buffer = reinterpret_cast<ULONG *>(Request.DATA.SET_INFORMATION.InformationBuffer); |
|
auto const bufferLength = Request.DATA.SET_INFORMATION.InformationBufferLength; |
|
|
|
CX_RETURN_NTSTATUS_IF( |
|
STATUS_BUFFER_TOO_SMALL, |
|
bufferLength < sizeof(ULONG)); |
|
|
|
CX_RETURN_NTSTATUS_IF_MSG( |
|
STATUS_INVALID_PARAMETER, |
|
! (buffer + bufferLength > buffer), |
|
"InformationBuffer + InformationBufferLength results in integer overflow."); |
|
|
|
m_packetFilter = *buffer; |
|
auto addressList = m_multicastAddressList.count() > 0U |
|
? &m_multicastAddressList[0] |
|
: reinterpret_cast<IF_PHYSICAL_ADDRESS const *>(nullptr); |
|
|
|
return m_adapterDispatch->SetReceiveFilter( |
|
m_adapter, |
|
m_packetFilter, |
|
m_multicastAddressList.count(), |
|
addressList); |
|
} |
When an NDIS component such as a LWF originates an OID Set request such as
OID_GEN_CURRENT_PACKET_FILTER, NetAdapterCx reads theNDIS_OID_REQUEST, extracts the necessary information from theInformationBuffer, and calls the client driver'sEVT_NET_ADAPTER_SET_RECEIVE_FILTERcallback. Even though it reads from InformationBuffer, it does not set theNDIS_OID_REQUEST.DATA.SET_INFORMATION.BytesReadmember, which has been causing issues (i.e. nmap/npcap#628) for our NDIS LWF that was being strict about checking this member. We are relaxing our code to work around the issue, but NetAdapterCx ought to update it to avoid issues in the future.Network-Adapter-Class-Extension/netcx/translator/nxtranslationapp.cpp
Lines 1022 to 1048 in ca1e33c