|
原帖由 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;
- }
复制代码 |
|