win4

1.4 packet.dll對應的函數接口 1.4.1 關鍵結構體_ADAPTER_INFO結構體_ADAPTER_INFO包含了系統上所安裝適配器的可理解信息,包含用戶所需的所有附加信息。該結構體的定義如下:typedef struct _ADAPTER_INFO { struct _ADAPTER_INFO *Next; //指向鏈表中的下一個節點 CHAR Name[ADAPTER_NAME_LENGTH + 1]; //描述該適配器的名字 CHAR Description[ADAPTER_DESC_LENGTH + 1]; //適配器可理解的描述 UINT MacAddressLen; //鏈路層地址的長度 UCHAR MacAddress[MAX_MAC_ADDR_LENGTH]; //鏈路層地址 NetType LinkLayer; //適配器的物理特性。該NetType結構體//包含了該適配器得鏈路類型與速度 PNPF_IF_ADDRESS_ITEM pNetworkAddresses;//指向一個網絡地址鏈表,//每一個節點描述該適配器的所有網絡地址 UINT Flags; //適配器標識。使用Netmon API或dagc API,//告訴該適配器是否用不同的方式對待。}ADAPTER_INFO, *PADAPTER_INFO; 在packetNtx/Dll/AdInfo.c文件中聲明瞭下列兩個全局變量:PADAPTER_INFO g_AdaptersInfoList = NULL; HANDLE g_AdaptersInfoMutex = NULL; 其中g_AdaptersInfoList爲全局適配器的鏈表,當應用程序連接packet.dll時創建該鏈表。g_AdaptersInfoMutex是保護g_AdaptersInfoList鏈表的互斥信號。注意,把ADAPTER_INFO 作爲一個參數的API,都假設獲取了該互斥信號後再進行訪問。換句話說,如果哪個API沒有把ADAPTER_INFO 作爲一個參數,那麼對g_AdaptersInfoList的訪問就需要先獲得該互斥信號後再進行訪問。示例代碼如下所示:void PacketPopulateAdaptersInfoList(){ …/**調用者不使用g_AdaptersInfoList作爲參數,*應該獲得g_AdaptersInfoMutex互斥信號,*/ WaitForSingleObject(g_AdaptersInfoMutex, INFINITE); /*訪問g_AdaptersInfoList參數 */ if(g_AdaptersInfoList) { …}…/*釋放g_AdaptersInfoMutex互斥信號*/ ReleaseMutex(g_AdaptersInfoMutex); …} 結構體_NPF_IF_ADDRESS_ITEM包含一個適配器所有網絡地址節點的鏈表。該結構體定義如下:typedef struct _NPF_IF_ADDRESS_ITEM{ npf_if_addr Addr; //網絡地址 struct _NPF_IF_ADDRESS_ITEM *Next; //指向鏈表的下一個節點}NPF_IF_ADDRESS_ITEM, *PNPF_IF_ADDRESS_ITEM; 結構體_NPF_IF_ADDRESS_ITEM中的成員npf_if_addr存儲網絡適配器的網絡地址。函數PacketGetNetInfoEx()使用該結構體,以返回適配器的網絡地址。該結構體定義如下:typedef struct npf_if_addr { struct sockaddr_storage IPAddress; //IP地址 struct sockaddr_storage SubnetMask; //網絡掩碼地址 struct sockaddr_storage Broadcast; //廣播地址}npf_if_addr;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章