请问如何能做到: 枚举网卡时,找到的是网卡,而不是 对应的 数据包计划程序微型端口?现在用GetAdapterInfo函数总是找到 网卡的 数据包计划程序微型端口我想找到的是
"Realtek RTL8139 Family PCI Fast Ethernet NIC"
而不是
"Realtek RTL8139 Family PCI Fast Ethernet NIC - 数据包计划程序微型端口"因为我想用QueryDosDeviceA来根据设备名称找到对应的 “设备对象名”恳请诸位救我

解决方案 »

  1.   

    读取注册表 “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards”//-----------------------------------------------------------------  
      // 取得所有网卡信息  
      //-----------------------------------------------------------------  
      BOOL   GetAdapterInfo()  
      {  
      //   这里的代码适合WINDOWS2000,对于NT需要读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows   NT\CurrentVersion\NetworkCards  
      HKEY   hKey,   hSubKey,   hNdiIntKey;  
       
      if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,  
      "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards",  
      0,  
      KEY_READ,  
      &hKey)   !=   ERROR_SUCCESS)  
      return   FALSE;  
       
      DWORD   dwIndex   =   0;  
      DWORD   dwBufSize   =   256;  
      DWORD   dwDataType;  
      char   szSubKey[256];  
      unsigned   char   szData[256];  
       
      while(RegEnumKeyEx(hKey,   dwIndex++,   szSubKey,   &dwBufSize,   NULL,   NULL,   NULL,   NULL)   ==   ERROR_SUCCESS)  
      {  
      //AfxMessageBox(szSubKey);  
      if(RegOpenKeyEx(hKey,   szSubKey,   0,   KEY_READ,   &hSubKey)   ==   ERROR_SUCCESS)  
      {  
      if(RegOpenKeyEx(hSubKey,   "Ndi\\Interfaces",   0,   KEY_READ,   &hNdiIntKey)   ==   ERROR_SUCCESS)  
      {  
      dwBufSize   =   256;  
      if(RegQueryValueEx(hNdiIntKey,   "LowerRange",   0,   &dwDataType,   szData,   &dwBufSize)   ==   ERROR_SUCCESS)  
      {  
      if(strcmp((char*)szData,   "ethernet")   ==   0) // 判断是不是以太网卡  
      {  
      dwBufSize   =   256;  
      if(RegQueryValueEx(hSubKey,   "DriverDesc",   0,   &dwDataType,   szData,   &dwBufSize)   ==   ERROR_SUCCESS)  
      {  
      ADAPTER_INFO   *pAI   =   new   ADAPTER_INFO;  
      pAI->strDriverDesc   =   (LPCTSTR)szData;  
      //AfxMessageBox((LPCTSTR)szData);  
      dwBufSize   =   256;  
      if(RegQueryValueEx(hSubKey,   "NetCfgInstanceID",   0,   &dwDataType,   szData,   &dwBufSize)   ==   ERROR_SUCCESS)  
      {  
      pAI->strName   =   (LPCTSTR)szData;  
      //AfxMessageBox((LPCTSTR)szData);  
      RegGetIP(pAI,   (LPCTSTR)szData);  
      //AfxMessageBox((LPCTSTR)szData);  
      }  
      AdapterInfoVector.push_back(pAI); //   加入到容器中  
      }  
      }  
      }  
      RegCloseKey(hNdiIntKey);  
      }  
      RegCloseKey(hSubKey);  
      }  
       
      dwBufSize   =   256;  
      } /*   end   of   while   */  
       
      RegCloseKey(hKey);   
      

  2.   

    XP系统用 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards 代码注释里面不是有吗?我已经改成xp的了
      

  3.   

    #include "Iphlpapi.h"
    #include "Winsock2.h"
    #include <vector>
    #pragma comment(lib,"Iphlpapi.lib")class AdapterInfo : public MIB_IFROW
    { public:
    CString strMacAddress;
    CString strDescrption;
    }typedef std::vector<AdapterInfo> AdapterInfoVector;HRESULT CPDTool::GetAdapterInfo( AdapterInfoVector& infoVector )
    {
    HRESULT hr = E_FAIL;
    ULONG dwSize = 0;
    byte* pBuffer = NULL; try
    {
    infoVector.clear();
    GetIfTable( NULL, &dwSize, TRUE );
    ASSERT( dwSize > 0 );
    pBuffer = new byte[dwSize];
    ZeroMemory( pBuffer, dwSize );
    PMIB_IFTABLE pIfTable = (PMIB_IFTABLE)pBuffer;
    ASSERT( GetIfTable( pIfTable, &dwSize, TRUE ) == NO_ERROR );
    for ( DWORD i = 0; i < pIfTable->dwNumEntries; i++ )
    {
    MIB_IFROW *pIfRow = (MIB_IFROW *) &(pIfTable->table[i]);
    AdapterInfo adapterInfo;
    memcpy( ((PMIB_IFROW)&adapterInfo), (MIB_IFROW *) &(pIfTable->table[i]), sizeof(MIB_IFROW)); adapterInfo.strMacAddress.Empty();

    for ( int j = 0; j < (int) pIfRow->dwPhysAddrLen; j++) 
    {
    CString strTemp;
    if ( j == ( pIfRow->dwPhysAddrLen - 1) )
    {
    strTemp.Format( _T("%.2X\n"), (int) pIfRow->bPhysAddr[j] );
    }
    else
    {
    strTemp.Format( _T("%.2X-"), (int) pIfRow->bPhysAddr[j]);
    }
    adapterInfo.strMacAddress += strTemp;
    }
    adapterInfo.strDescrption.Empty();

    BYTE bDescr[MAXLEN_IFDESCR + sizeof(TCHAR)];
    ZeroMemory( bDescr, sizeof(bDescr) );
    memcpy( bDescr, pIfRow->bDescr, pIfRow->dwDescrLen);
    adapterInfo.strDescrption = (CHAR*)bDescr;

    infoVector.push_back( adapterInfo ); }
    hr = S_OK;
    }
    catch(...)
    {
    } if ( pBuffer )
    {
    delete []pBuffer;
    }
    return hr;
    }