深度剖析WinPcap之(七)——获得与释放网络适配器设备列表(3)
2009-09-11 00:00:00 来源:WEB开发网在NPF中由NPF_IoControl函数中的如下代码处理该操作。
NTSTATUS NPF_IoControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
…
switch (FunctionCode){
…
case BIOCSETOID:
case BIOCQUERYOID:
…
}
…
}
函数PacketGetLinkLayerFromRegistry()获得一个已打开适配器的NetType结构体,该结构体包含适配器的链路层的类型与速度(单位为bps)。函数原型如下:
static BOOLEAN PacketGetLinkLayerFromRegistry(
LPADAPTER AdapterObject, NetType *type
)
参数AdapterObject为一个已打开适配器的句柄,参数type是一个指向 NetType结构体的指针,它将被函数用链路层的类型与速度值填充。参数type的LinkType成员可以为下列的值之一:
Ø NdisMedium802_3: Ethernet (802.3)
Ø NdisMediumWan: WAN
Ø NdisMedium802_5: Token Ring (802.5)
Ø NdisMediumFddi: FDDI
Ø NdisMediumAtm: ATM
Ø NdisMediumArcnet878_2: ARCNET (878.2)
如果函数成功,返回非0值,否则返回0值。
该函数主要依赖于PacketRequest()函数实现,主要代码如下所示:
static BOOLEAN PacketGetLinkLayerFromRegistry(
LPADAPTER AdapterObject, NetType *type)
{
…
//获得链路层的类型
OidData->Oid = OID_GEN_MEDIA_IN_USE;
OidData->Length = sizeof (ULONG);
Status = PacketRequest(AdapterObject,FALSE,OidData);
type->LinkType=*((UINT*)OidData->Data);
//获得链路层的速度
OidData->Oid = OID_GEN_LINK_SPEED;
OidData->Length = sizeof (ULONG);
Status = PacketRequest(AdapterObject,FALSE,OidData);
…
}
- ››深度解释攻击linux服务器的四种级别
- ››剖析java.util.concurrent锁
- ››剖析Android智能手机系统的更多功能
- ››深度分析地方社区网站的内容定位
- ››剖析Windows Azure Platform框架与组成
- ››剖析使用 ObjectOutputStream 可能引起的内存泄漏...
- ››剖析EWebEditor编辑器漏洞攻击案例
- ››剖析开源云:构建 Infrastructure as a Service 块...
- ››深度剖析 Android 和 iPhone OS
- ››深度分析:HTML5能否成为Flash终结者
- ››深度挖掘 更多Windows 7快捷模式
- ››深度挖掘 Windows 7快捷模式
更多精彩
赞助商链接