ndis怎样将网卡设置为混杂模式?
(不用packet32包实现)

解决方案 »

  1.   

    NDIS_STATUS
    MPSetInformation( 
    IN NDIS_HANDLE MiniportAdapterContext,
    IN NDIS_OID Oid,
    IN PVOID InformationBuffer,
    IN ULONG InformationBufferLength,
    OUT PULONG BytesRead,
    OUT PULONG BytesNeeded
    )
    {
    }//
    // 设置驱动或者网卡的性能和状态这个函数中加入下面一段代码:
    //要使用ExAllocatePool函数得在#include <ndis.h>前加入#define NDIS_WDM 1,
    ////
    //1.广播模式 NDIS_PACKET_TYPE_BROADCAST 
    //2.多播模式 NDIS_PACKET_TYPE_MULTICAST 
    //3.直接模式 NDIS_PACKET_TYPE_DIRECTED 
    //4.混杂模式 NDIS_PACKET_TYPE_PROMISCUOUS 
    // 各种模式之间用'|'连接
    //#define NDIS_WDM 1 
    #include <ndis.h>NDIS_STATUS st;
    NDIS_REQUEST *pRequest;
    NDIS_OID oiddata;oiddata=NDIS_PACKET_TYPE_PROMISCUOUS;/*设置为混杂模式*/
    pRequest=ExAllocatePool(NonPagedPool,sizeof(NDIS_REQUEST));//分配内存
    if(NULL==pRequest)
    {
    DBGPRINT("Can not allocate buffer for requestn");
    }
    pRequest->RequestType=NdisRequestSetInformation;//设置请求命令
    pRequest->DATA.SET_INFORMATION.Oid=OID_GEN_CURRENT_PACKET_FILTER;
    pRequest->DATA.SET_INFORMATION.InformationBuffer=&oiddata;
    pRequest->DATA.SET_INFORMATION.InformationBufferLength=sizeof(NDIS_OID);NdisRequest(&st,pAdapt->BindingHandle,pRequest);//发送请求
    if(st!=NDIS_STATUS_PENDING)
    {
    if(pRequest){
    DBGPRINT("Free request\n");
    ExFreePool(pRequest);
    }
    }