16,473
社区成员
发帖
与我相关
我的任务
分享
//SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E978-E325-11CE-BFC1-08002BE10318} 相同类名存在多项
lReg = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E978-E325-11CE-BFC1-08002BE10318}",0, KEY_ALL_ACCESS, &hKey);
if(lReg != ERROR_SUCCESS)
{
printf( "Open Registry Error!\n ");
return ab_SetErrorKs(KS_ERR_FAILED);
}
//查询子项数量
memset(szSubKey, 0, sizeof(szSubKey));
lReg = RegQueryInfoKeyA(hKey, NULL, NULL, NULL, NULL, NULL, NULL, &dwValueNumber, &dwMaxValueLen, NULL, NULL, NULL);
if(lReg != ERROR_SUCCESS)
{
printf( "Getting Info Error!\n ");
return ab_SetErrorKs(KS_ERR_FAILED);
}
//这里遍历所有“{4D36E978-E325-11CE-BFC1-08002BE10318}”项目,找出我要的Ports
for(i = 0; i < dwValueNumber; i ++)
{
dwValueNameLen = sizeof(szValueName);
memset(szValueName, 0, sizeof(szValueName));
lReg = RegEnumValueA(hKey, i, szValueName, &dwValueNameLen, NULL, NULL, NULL, NULL);
if ((lReg != ERROR_SUCCESS) && (lReg != ERROR_NO_MORE_ITEMS))
{
printf( "Enum Registry Error!\n");
return ab_SetErrorKs(KS_ERR_FAILED);
}
dwValueNameLen = sizeof(szValueName);
memset(szValueName, 0, sizeof(szValueName));
lReg = RegQueryValueExA(hKey, szValueName, NULL, NULL, (LPBYTE)szValueName, &dwValueSize);
if ((lReg != ERROR_SUCCESS) && (lReg != ERROR_NO_MORE_ITEMS))
{
continue;
}
if(strstr(szValueName, "Ports"))
{
printf("\r\n ++++ szComName: %s\r\n", szValueName);
break;
}
}
//获取Ports子项目的数量,运行正常
lReg = RegQueryInfoKeyA(hKey, NULL, NULL, NULL, &dwValueNumber, &dwMaxValueLen, NULL, NULL, NULL, NULL, NULL, NULL);
printf("\r\n .... dwValueNumber = %d, dwMaxValueLen = %d\r\n\r\n", dwValueNumber, dwMaxValueLen);
//这里我已经找出该项目的子项目,名称为了0000,0001,0002等
for(i = 0; i < dwValueNumber; i ++)
{
memset(szValueName, 0, sizeof(szValueName));
dwValueNameLen = sizeof(szValueName);
lReg = RegEnumKeyExA(hKey, i, (LPBYTE)szValueName, &dwValueNameLen, NULL, NULL, NULL, NULL);
if(lReg != ERROR_SUCCESS)
continue;
printf("\r\n %s", szValueName);
}