1.5.2.1.1.2 PacketSetReadEvt函數
函數PacketSetReadEvt分配與捕獲實例相關聯的讀事件信號,並把它傳遞給內核驅動程序,並存儲在一個_ADAPTER結構體中。函數原型如下:
BOOLEAN PacketSetReadEvt(LPADAPTER AdapterObject);
BOOLEAN PacketSetReadEvt(LPADAPTER AdapterObject)
if (AdapterObject->ReadEvent != NULL)
SetLastError(ERROR_INVALID_FUNCTION);
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if(DeviceIoControl(AdapterObject->hFile,
/*賦給AdapterObject->ReadEvent*/
AdapterObject->ReadEvent = hEvent;
AdapterObject->ReadTimeOut=0;
函數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)
ULONG IoCtlBufferLength=(sizeof(PACKET_OID_DATA)+sizeof(ULONG)-1);
PPACKET_OID_DATA OidData;
OidData = GlobalAllocPtr(GMEM_MOVEABLE | GMEM_ZEROINIT,
//設置前視緩衝區大小爲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);
函數主要調用PacketRequest函數實現參數的查詢/設置功能。