http://support.microsoft.com/default.aspx?scid=kb;en-us;259695
中HOWTO: Enumerate Hardware Devices by Using SetupDi Calls
#include <stdio.h>
   #include <windows.h>
   #include <setupapi.h>
   #include <devguid.h>
   #include <regstr.h>   int main( int argc, char *argv[ ], char *envp[ ] )
   {
       HDEVINFO hDevInfo;
       SP_DEVINFO_DATA DeviceInfoData;
       DWORD i;       // Create a HDEVINFO with all present devices.
       hDevInfo = SetupDiGetClassDevs(NULL,
           0, // Enumerator
           0,
           DIGCF_PRESENT | DIGCF_ALLCLASSES );
       
       if (hDevInfo == INVALID_HANDLE_VALUE)
       {
           // Insert error handling here.
           return 1;
       }
       
       // Enumerate through all devices in Set.
       
       DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
       for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
           &DeviceInfoData);i++)
       {
           DWORD DataT;
           LPTSTR buffer = NULL;
           DWORD buffersize = 0;
           
           // 
           // Call function with null to begin with, 
           // then use the returned buffer size 
           // to Alloc the buffer. Keep calling until
           // success or an unknown failure.
           // 
           while (!SetupDiGetDeviceRegistryProperty(
               hDevInfo,
               &DeviceInfoData,
               SPDRP_DEVICEDESC,
               &DataT,
               (PBYTE)buffer,
               buffersize,
               &buffersize))
           {
               if (GetLastError() == 
                   ERROR_INSUFFICIENT_BUFFER)
               {
                   // Change the buffer size.
                   if (buffer) LocalFree(buffer);
                   buffer = LocalAlloc(LPTR,buffersize);
               }
               else
               {
                   // Insert error handling here.
                   break;
               }
           }
           
           printf("Result:[%s]\n",buffer);
           
           if (buffer) LocalFree(buffer);
       }
       
       
       if ( GetLastError()!=NO_ERROR &&
            GetLastError()!=ERROR_NO_MORE_ITEMS )
       {
           // Insert error handling here.
           return 1;
       }
       
       //  Cleanup
       SetupDiDestroyDeviceInfoList(hDevInfo);
       
       return 0;
   }
编译时出现如下的错误:
main.obj : error LNK2001: unresolved external symbol __imp__SetupDiDestroyDeviceInfoList@4
main.obj : error LNK2001: unresolved external symbol __imp__SetupDiGetDeviceRegistryPropertyA@28
main.obj : error LNK2001: unresolved external symbol __imp__SetupDiEnumDeviceInfo@12
main.obj : error LNK2001: unresolved external symbol __imp__SetupDiGetClassDevsA@16
Debug/main.exe : fatal error LNK1120: 4 unresolved externals
Error executing link.exe.
请问:不知是什么原因,谢谢!