none
Die SetupDi's enumerate Hardware Resource in Win32 Applikation funktioniert unter windows8 x64 nicht RRS feed

  • Allgemeine Diskussion

  • Ich verwende SetupDi,CM_Get_First_Log_Conf in meiner Applikation, um den physikalischen Netzadapter zu finden.
    Meine Win32-Applikation funktioniert in windows7 x64 und in Windows8 x86. Leider funktioniert es in Windows8 x64 nicht.
    Beim Aufruf vom 'CM_Get_First_Log_Conf' bekomme ich den Fehler 'CR_CALL_NOT_IMPLEMENTED'.
    Wenn die Rouitne für x64 kompiliert wird, funktioniert es in Windows8 x64.
    Ich habe es auch unter Visual Studio 2012 getestet, das Ergebnis ist gleich.
    In der aktuellen DoKumentation von CM_Get_First_Log_Conf habe ich den Hinweis auf das neu Verhalten nicht gefunden. Kann jemand helfen?

    Hier ist der Auszug von meinem Source Code:
    #include <devguid.h>
    #include <Cfgmgr32.h>
    #include <SetupApi.h>

    #pragma comment( lib, "Setupapi.lib" )

    int GetNetAdapterResource()
    {
      int nRet=0;
      SP_DEVINFO_DATA DeviceInfoData;
      DWORD i;
      //Create a HDEVINFO with all present devices of Networking.
      HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_NET,
                   0, // Enumerator
                   0,
                   DIGCF_PRESENT);
      if (hDevInfo == INVALID_HANDLE_VALUE)
      {
         // Insert error handling here.
        nRet=GetLastError();
        return nRet;
      }
      // Enumerate through all devices in Set.
      DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
      for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
               &DeviceInfoData);i++)
      {
        LOG_CONF config;
        int nRetLogicalConfig= CM_Get_First_Log_Conf(&config
                                    ,DeviceInfoData.DevInst
                                    ,ALLOC_LOG_CONF);
        //nRetLogicalConfig=CR_CALL_NOT_IMPLEMENTED, wenn die Applikation win32 in Windows8 x64 gestartet ist.

        if(nRetLogicalConfig == CR_SUCCESS)
        {
          RES_DES prevResDes = (RES_DES)config;
          RES_DES resDes=0;
          RESOURCEID ReqResId = ResType_All;
          RESOURCEID resId = 0;
          ULONG dataSize=0;
          PBYTE resDesData=NULL;

          while(CM_Get_Next_Res_Des(&resDes,prevResDes,ReqResId,&resId,0)==CR_SUCCESS)
          {
            //...
            ;
          }
          CM_Free_Res_Des_Handle(prevResDes);
        }
      }
      SetupDiDestroyDeviceInfoList(hDevInfo);
      return nRet;
    }

    Mittwoch, 21. November 2012 14:45

Alle Antworten