WEB开发网
开发学院操作系统windows 2008 深度剖析WinPcap之(七)——获得与释放网络适配器设... 阅读

深度剖析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 BIOCS

在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);
    …
}

上一页  1 2 3 4 5 6 7  下一页

Tags:深度 剖析 WinPcap

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接