Ну не знаю. У меня работает - возвращает список гуидов.
Возможно, ты что-то с импортом функции напутал.
Код:
const
CR_SUCCESS = $00000000;
CR_NO_SUCH_VALUE = $00000025;
function CM_Enumerate_Classes(ulClassIndex : Cardinal; var ClassGuid : TGUID; ulFlags : Cardinal) : DWORD; stdcall; external 'Cfgmgr32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
Idx : Integer;
DevGUID : TGUID;
iRet : DWORD;
begin
Idx := 0;
iRet := CM_Enumerate_Classes(Idx,DevGUID,0);
While iRet = CR_SUCCESS Do
Begin
Memo1.Lines.Add(GUIDToString(DevGUID));
Inc(Idx);
iRet := CM_Enumerate_Classes(Idx,DevGUID,0);
End;
ShowMessage(Format('Last function return is %s',[IntToHex(iRet,2)]));
end;