1.5.2.1.1.2  PacketSetReadEvt函数
函数PacketSetReadEvt分配与捕获实例相关联的读事件信号,并把它传递给内核驱动程序,并存储在一个_ADAPTER结构体中。函数原型如下:
BOOLEAN PacketSetReadEvt(LPADAPTER AdapterObject);
参数AdapterObject指向一个适配器。
如果函数成功,返回非0值,
 
BOOLEAN PacketSetReadEvt(LPADAPTER AdapterObject)
{
    DWORD BytesReturned;
    HANDLE hEvent;
 
    if (AdapterObject->ReadEvent != NULL)
    {
        SetLastError(ERROR_INVALID_FUNCTION);
        return FALSE;
    }
 
    /*创建读事件信号*/
    hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
 
    if (hEvent == NULL)
    {
        //创建失败,函数返回
        return FALSE;
    }
 
    /*传递给内核驱动*/
    if(DeviceIoControl(AdapterObject->hFile,
            BIOCSETEVENTHANDLE,
            &hEvent,
            sizeof(hEvent),
            NULL,
            0,
            &BytesReturned,
            NULL)==FALSE)
    {//失败,函数返回
       
        return FALSE;
    }
 
/*赋给AdapterObject->ReadEvent*/
    AdapterObject->ReadEvent = hEvent;
 
/*timeout设置为0,无超时*/
    AdapterObject->ReadTimeOut=0;
 
    return TRUE;
}
函数PacketOpenAdapter调用该函数,用来分配读事件信号,并把它通过ioctl调用传递给驱动程序,赋给AdapterObject所指的_ADAPTER结构。
函数最后由NPF驱动程序的NPF_IoControl函数的case BIOCSETEVENTHANDLE: 分支语句在底层实现。
 
1.5.2.1.1.3  PacketSetMaxLookaheadsize函数
函数PacketSetMaxLookaheadsize给驱动程序的Packet_tap函数设置尽可能最大的前视缓冲区。参数AdapterObject是指向ADAPTER对象的一个指针。如果函数成功返回非0值。
主要代码如下:
BOOLEAN PacketSetMaxLookaheadsize (LPADAPTER AdapterObject)
{
    BOOLEAN    Status;
    ULONG      IoCtlBufferLength=(sizeof(PACKET_OID_DATA)+sizeof(ULONG)-1);
    PPACKET_OID_DATA  OidData;
 
OidData = GlobalAllocPtr(GMEM_MOVEABLE | GMEM_ZEROINIT,
IoCtlBufferLength);
    if (OidData == NULL) {
        //内存分配失败
        Status = FALSE;
    }
    else
    {
        //设置前视缓冲区大小为NIC驱动程序能提供的最大可用值
        OidData->Oid=OID_GEN_MAXIMUM_LOOKAHEAD;
        OidData->Length=sizeof(ULONG);
        Status=PacketRequest(AdapterObject,FALSE,OidData);
//查看当前视缓冲区的大小
        OidData->Oid=OID_GEN_CURRENT_LOOKAHEAD;
        Status=PacketRequest(AdapterObject,TRUE,OidData);
        GlobalFreePtr(OidData);
    }
 
    return Status;
}
函数主要调用PacketRequest函数实现参数的查询/设置功能。