资源简介

自己实现的区分物理网卡并获取其网速的程序 没有实现hook其他进程 获得网速的功能

资源截图

代码片段和文件信息

bool IsLocalAdapter ( const char *pAdapterName ) const
{
    BOOL ret_value = FALSE;

#define NET_CARD_KEY “System/CurrentControlSet/Control/Network/{4D36E972-E325-11CE-BFC1-08002BE10318}“
    char szDataBuf[MAX_PATH+1];
    DWORD dwDataLen = MAX_PATH;
    DWORD dwType = REG_SZ;
    HKEY hNetKey = NULL;
    HKEY hLocalNet = NULL;

    if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE NET_CARD_KEY 0 KEY_READ &hNetKey))
        return FALSE;
    sprintf(szDataBuf “%s/Connection“ pAdapterName);
    if(ERROR_SUCCESS != RegOpenKeyEx(hNetKey szDataBuf 0 KEY_READ &hLocalNet))
    ...{
        RegCloseKey(hNetKey);
        return FALSE;
    }
    if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet “MediaSubType“ 0 &dwType (BYTE *)szDataBuf &dwDataLen))
    ...{
        goto ret;
    }
    if (*((DWORD *)szDataBuf)!=0x01)
        goto ret;
    dwDataLen = MAX_PATH;
    if (ERROR_SUCCESS != RegQueryValueEx(hLocalNet “;PnpInstanceID“ 0 &dwType (BYTE *)szDataBuf &dwDataLen))
    ...{
        goto ret;
    }
    if (strncmp(szDataBuf “;PCI“ strlen(“;PCI“)))
        goto ret;

    ret_value = TRUE;

ret:
    RegCloseKey(hLocalNet);
    RegCloseKey(hNetKey);

    return ret_value!=0;

}









SetupDiGetClassDevs // 获取设备信息集
SetupDiEnumDeviceInfo // 从设备信息集中枚举每个设备的具体信息
SetupDiGetDeviceRegistryProperty // 从注册表中读取PnP设备的属性
SetupDiSetClassInstallParams // 设置(包括取消)设备类的安装参数
SetupDiCallClassInstaller // 安装指定设备



/*我要介绍的方法是通过使用AdapterName来判断的。这个就要涉及到注册表和SetupDi函数了,或许有点复杂。
AdapterName是一个guid数据,这个数据可以让我们查询这个所在网卡信息。
HLM\\System\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}
\\{AdapterName}\\connection 下面去看看,在这个下面一般有MediaSubType,这个可以用来表示是否
为无线网卡,还有一个Name,这个是用于在网络连接中显示的名称,一般真实的pci板载网卡叫做本地连接
,当然也可以用这个方法来判断是否为物理网卡了。还有一个就是PnpInstanceId,这个指是有系统在
枚举pci的时候设置的,这个值其实就是device instance id,你可以在设备管理其中看到这个。
接下来就是我想说的用SetupDi来判断是否为物理网卡的方法了。其实这个挺简单的,只要我们知道物理网卡,
肯定是挂在某个bus上面的,因此对于虚拟网卡,肯定是没有bus号的。主要的代码在下面。我想应该可以说明白了。*/

unsigned char szGuid[] = “4D36E972-E325-11CE-BFC1-08002BE10318“;
HRESULT hr = UuidFromString(szGuid&guid);  
hDevInfo = SetupDiGetClassDevs(&guidNULLNULLDIGCF_PRESENT);  // get the device info
if (INVALID_HANDLE_VALUE == hDevInfo)
{
OutputDebugString(“SetupDiGetClassDevs failed“);
}


/*
The SetupDiEnumDeviceInfo function returns a SP_DEVINFO_DATA structure that 
specifies a device information element in a device information set.

SetupDiEnumDeviceInfo(
    __in  HDEVINFO DeviceInfoSet
    __in  DWORD MemberIndex
    __out PSP_DEVINFO_DATA DeviceInfoData
);


The SetupDiGetDeviceInstanceId function retrieves the device instance ID that is 
associated with a device information element.

BOOL SetupDiGetDeviceInstanceId(
_In_      HDEVINFO         DeviceInfoSet
_In_      PSP_DEVINFO_DATA DeviceInfoData
_Out_opt_ PTSTR            DeviceInstanceId
_In_      DWORD            DeviceInstanceIdSize
_Out_opt_ PDWORD         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-12-31 12:29  NetSpeed\
     目录           0  2015-12-28 11:03  NetSpeed\NetSpeedProc\
     目录           0  2015-12-28 00:31  NetSpeed\NetSpeedProc\Debug\
     文件      216064  2015-12-30 11:03  NetSpeed\NetSpeedProc\Debug\NetSpeedProc.exe
     文件     1858116  2015-12-30 11:03  NetSpeed\NetSpeedProc\Debug\NetSpeedProc.ilk
     文件     5286912  2015-12-30 11:03  NetSpeed\NetSpeedProc\Debug\NetSpeedProc.pdb
     目录           0  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\
     目录           0  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\
     文件        6358  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\BuildLog.htm
     文件          65  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\mt.dep
     文件        1196  2015-12-28 00:31  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProc.exe.embed.manifest
     文件        1260  2015-12-28 00:31  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProc.exe.embed.manifest.res
     文件        1120  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProc.exe.intermediate.manifest
     文件       33074  2015-12-28 10:23  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProc.obj
     文件    40894464  2015-12-28 00:31  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProc.pch
     文件       72760  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProc.res
     文件      362739  2015-12-28 11:28  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\NetSpeedProcDlg.obj
     文件       84303  2015-12-28 10:23  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\SettingDlg.obj
     文件       35068  2015-12-28 00:40  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\ShowNetSpeed.obj
     文件      571116  2015-12-28 00:31  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\stdafx.obj
     文件     1993728  2015-12-28 11:28  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\vc90.idb
     文件     3264512  2015-12-28 11:28  NetSpeed\NetSpeedProc\NetSpeedProc\Debug\vc90.pdb
     文件      109952  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProc.aps
     文件        1729  2015-12-24 09:50  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProc.cpp
     文件         481  2015-12-03 10:46  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProc.h
     文件        8867  2015-12-30 11:03  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProc.rc
     文件        5861  2015-12-18 14:42  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProc.vcproj
     文件        1427  2015-12-30 12:42  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProc.vcproj.QH-20150724ZFHD.Administrator.user
     文件       21361  2015-12-28 11:21  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProcDlg.cpp
     文件        4459  2015-12-28 10:21  NetSpeed\NetSpeedProc\NetSpeedProc\NetSpeedProcDlg.h
     文件        2827  2015-12-03 10:46  NetSpeed\NetSpeedProc\NetSpeedProc\ReadMe.txt
............此处省略33个文件信息

评论

共有 条评论