| 
 | 
原帖由 lxl1638 于 2007-1-6 01:53 PM 发表 
 
 
又来学习了,本人没有 PCI Express 之类的设备。下面是某ATI显卡的INF文件其中一行。其中的 PCI-E Edition 是不是 PCI Express ,它的设备类型是不是仍然用传统的 PCI 呢?(为了兼容,仍然用传统的PCI)。 
   
 
下面是代码片断,看其中的 "PCI" 注释掉了,就是说会枚举所有的美配置过的系统设备,通吃。但 ACPI 设备除外。 
 
 
-         // Lookup device
 
 -         HDEVINFO hDev = SetupDiGetClassDevs(NULL, NULL[color=Red]/*TEXT("PCI")*/[/color], 0, DIGCF_ALLCLASSES);
 
 -         if (hDev == INVALID_HANDLE_VALUE)
 
 -         {
 
 -                 return E_FAIL;
 
 -         }
 
  
-         // Build SPDRP_HARDWAREID list
 
 -         CHAR szDevID[MAX_STR];
 
 -         PSTR p = szDevID;
 
 -         SP_DEVINFO_DATA sdDev = {sizeof(SP_DEVINFO_DATA)};
 
 -         for (UINT i = 0; ((p - szDevID) < sizeof(szDevID)) && SetupDiEnumDeviceInfo(hDev, i, &sdDev); i++)
 
 -         {
 
 -                 // Exclude configured device
 
 -                 ULONG uProblem = 0;
 
 -                 ULONG uStatus = DN_HAS_PROBLEM;
 
 -                 CM_Get_DevNode_Status(&uStatus, &uProblem, sdDev.DevInst, 0);
 
 -                 if (uProblem != CM_PROB_NOT_CONFIGURED)
 
 -                 {
 
 -                         continue;
 
 -                 }
 
  
-                 // Exclude ACPI device
 
 -                 if (SetupDiGetDeviceRegistryPropertyA(hDev, &sdDev, SPDRP_HARDWAREID, NULL, (PBYTE) p, sizeof(szDevID) - (UINT) (p - szDevID), NULL) &&
 
 -                         (*((PDWORD) p) != 'IPCA'))
 
 -                 {
 
 -                         // Trim some stuff for quick search
 
 -                         for (UINT k = 0; *p; p++)
 
 -                         {
 
 -                                 if ((*p == '&') && (++k == 2))
 
 -                                 {
 
 -                                         *p = 0;
 
 -                                         break;
 
 -                                 }
 
 -                         }
 
 -                         p++;
 
 -                 }
 
 -         }
 
 -         *p = 0;
 
  
-         SetupDiDestroyDeviceInfoList(hDev);
 
 -         if (szDevID[0] == 0)
 
 -         {
 
 -                 // No device
 
 -                 return ERROR_NO_MATCH;
 
 -         }
 
 
  复制代码 |   
 
 
 
 |