how to set NdisSetNblFlag () and NET_BUFFER_LIST_INFO () in NDIS for windows 7 ?

i am doing support to mobile boradband NDIS type dongle for my application . so using microsoft document i done some INF file change and Filter file .

[MYDRIVE.ndi.AddReg]

HKR, Ndi\Interfaces, UpperRange, , “noupper”
HKR, Ndi\Interfaces, LowerRange, , “nolower”
HKR, Ndi\Interfaces, FilterMediaTypes, , “nolower, ethernet, wan, ndis5, ppip”

and in virtual INF file

[DRIVENET.ndi]

Characteristics = 0x81 ; NCF_HAS_UI & NCF_VIRTUAL
*IfType = IF_TYPE_ETHERNET_CSMACD,IF_TYPE_WWANPP
*MediaType = NdisMedium802_3,NdisMediumWirelessWan
*PhysicalMediaType = NdisPhysicalMedium802_3,NdisPhysicalMediumWirelessWan
CopyFiles = MDVNET.CopyFiles
AddReg = MDVNET.Reg

in driver entry.cpp file

NDIS_MEDIUM g_aMediumArray = {
NdisMedium802_3,
NdisMediumWan,
NdisMediumWirelessWan,
};

in filter.cpp

NDIS_STATUS CFilter::Attach(
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_FILTER_ATTACH_PARAMETERS AttachParameters
) {

if (
(AttachParameters->MiniportMediaType != NdisMedium802_3)
&& (AttachParameters->MiniportMediaType != NdisMediumWan)
&& (AttachParameters->MiniportMediaType != NdisMediumNative802_11)
&& (AttachParameters->MiniportMediaType != NdisMediumWirelessWan)
) {
status = NDIS_STATUS_INVALID_PARAMETER;
goto exit
}
}

i am doing support to mobile boradband NDIS type dongle for my application . so using microsoft document i done some INF file change and Filter file .

[MYDRIVE.ndi.AddReg]

HKR, Ndi\Interfaces, UpperRange, , “noupper”
HKR, Ndi\Interfaces, LowerRange, , “nolower”
HKR, Ndi\Interfaces, FilterMediaTypes, , “nolower, ethernet, wan, ndis5, ppip”

and in virtual INF file

[DRIVENET.ndi]

Characteristics = 0x81 ; NCF_HAS_UI & NCF_VIRTUAL
*IfType = IF_TYPE_ETHERNET_CSMACD,IF_TYPE_WWANPP
*MediaType = NdisMedium802_3,NdisMediumWirelessWan
*PhysicalMediaType = NdisPhysicalMedium802_3,NdisPhysicalMediumWirelessWan
CopyFiles = MDVNET.CopyFiles
AddReg = MDVNET.Reg

in driver entry.cpp file

NDIS_MEDIUM g_aMediumArray = {
NdisMedium802_3,
NdisMediumWan,
NdisMediumWirelessWan,
};

in filter.cpp

NDIS_STATUS CFilter::Attach(
IN NDIS_HANDLE NdisFilterHandle,
IN PNDIS_FILTER_ATTACH_PARAMETERS AttachParameters
) {

if (
(AttachParameters->MiniportMediaType != NdisMedium802_3)
&& (AttachParameters->MiniportMediaType != NdisMediumWan)
&& (AttachParameters->MiniportMediaType != NdisMediumNative802_11)
&& (AttachParameters->MiniportMediaType != NdisMediumWirelessWan)
) {
status = NDIS_STATUS_INVALID_PARAMETER;
goto exit
}

if (AttachParameters->MiniportMediaType == NdisMediumWirelessWan) {

PnpDevice = true;

}
}

VOID CFilter::SendNetBufferLists(
IN PNET_BUFFER_LIST NetBufferLists,
IN NDIS_PORT_NUMBER PortNumber,
IN ULONG SendFlags
) {

while (pNetBufferList) {

pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pNetBufferList);
NET_BUFFER_LIST_NEXT_NBL(pNetBufferList) = NULL;

PNET_BUFFER pNewNetBuffer = NET_BUFFER_LIST_FIRST_NB(pNewNetBufferList);
NET_BUFFER_FIRST_MDL(pNewNetBuffer) = NET_BUFFER_FIRST_MDL(pNetBuffer);
NET_BUFFER_DATA_LENGTH(pNewNetBuffer) = NET_BUFFER_DATA_LENGTH(pNetBuffer);
NET_BUFFER_DATA_OFFSET(pNewNetBuffer) = NET_BUFFER_DATA_OFFSET(pNetBuffer);
NET_BUFFER_CURRENT_MDL(pNewNetBuffer) = NET_BUFFER_CURRENT_MDL(pNetBuffer);
NET_BUFFER_CURRENT_MDL_OFFSET(pNewNetBuffer) = NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer);
NDIS_SET_NET_BUFFER_LIST_CANCEL_ID(pNewNetBufferList, NDIS_GET_NET_BUFFER_LIST_CANCEL_ID(pNetBufferList));
NdisCopySendNetBufferListInfo(pNewNetBufferList, pNetBufferList);

pNewNetBufferList->SourceHandle = m_hFilter;
pNewNetBufferList->ParentNetBufferList = pNetBufferList;

if (PnpDevice == true ) {

NdisSetNblFlag(pNewNetBufferList, NDIS_NBL_FLAGS_IS_IPV4);
NET_BUFFER_LIST_INFO(pNewNetBufferList, NetBufferListFrameType) = (PVOID)(ULONG_PTR)RtlUshortByteSwap(0x0800);

}

VOID CFilter::ReceiveNetBufferLists(
IN PNET_BUFFER_LIST NetBufferLists,
IN NDIS_PORT_NUMBER PortNumber,
IN ULONG /* NumberOfNetBufferLists */,
IN ULONG ReceiveFlags)
{
while (pNetBufferList) {
pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pNetBufferList);
NET_BUFFER_LIST_NEXT_NBL(pNetBufferList) = NULL;

PNET_BUFFER pNewNetBuffer = NET_BUFFER_LIST_FIRST_NB(pNewNetBufferList);
NET_BUFFER_FIRST_MDL(pNewNetBuffer) = NET_BUFFER_FIRST_MDL(pNetBuffer);
NET_BUFFER_DATA_LENGTH(pNewNetBuffer) = NET_BUFFER_DATA_LENGTH(pNetBuffer);
NET_BUFFER_DATA_OFFSET(pNewNetBuffer) = NET_BUFFER_DATA_OFFSET(pNetBuffer);
NET_BUFFER_CURRENT_MDL(pNewNetBuffer) = NET_BUFFER_CURRENT_MDL(pNetBuffer);
NET_BUFFER_CURRENT_MDL_OFFSET(pNewNetBuffer) = NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer);
NDIS_SET_NET_BUFFER_LIST_CANCEL_ID(pNewNetBufferList, NDIS_GET_NET_BUFFER_LIST_CANCEL_ID(pNetBufferList));
NdisCopyReceiveNetBufferListInfo(pNewNetBufferList, pNetBufferList);

if (ReceiveFlags & NDIS_RECEIVE_FLAGS_RESOURCES) {
NdisFIndicateReceiveNetBufferLists(m_hFilter, pNewNetBufferList, PortNumber, 1, NDIS_RECEIVE_FLAGS_RESOURCES | (ReceiveFlags & ~NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL));
NdisFreeNetBufferList(pNewNetBufferList);
} else {
pNewNetBufferList->SourceHandle = m_hFilter;
pNewNetBufferList->ParentNetBufferList = pNetBufferList;

if (PnpDevice == true) {

NdisSetNblFlag(pNewNetBufferList, NDIS_NBL_FLAGS_IS_IPV4);
NET_BUFFER_LIST_INFO(pNewNetBufferList, NetBufferListFrameType) = (PVOID)(ULONG_PTR)RtlUshortByteSwap(0x0800);
}
else
{
ISystem::Error(“-------:: m_bIsPnpDevice: is FALSE not detecting MB, status\n”);
}

}

why can’t this work ? not connecting with NDIS . please help me