Я так понял это функция из HID.pas .
Вот есть такая процедура,она тоже вызывает аналогичную ошибку
Код:
procedure EnumDevices( List:TStrings);
var
DevInfo:HDEVINFO;
InfoData:SP_DEVINFO_DATA;
I,A,Size,DType:DWORD;
Buffer,PC:PChar;
GUID:TGUID;
begin
I:=0;
while True do begin
if CM_Enumerate_Classes(I,GUID,0)=CR_NO_SUCH_VALUE then Break;
DevInfo:=SetupDiGetClassDevs(@GUID,nil,0,DIGCF_PRESENT);
if DevInfo<>HDEVINFO(INVALID_HANDLE_VALUE) then try
InfoData.cbSize:=SizeOf(InfoData);
A:=0;
Buffer:=nil;
try
while SetupDiEnumDeviceInfo(DevInfo,A,InfoData) do begin
Size:=0;
while not SetupDiGetDeviceRegistryProperty(DevInfo,InfoData,SPDRP_HARDWAREID,DType,Pointer(Buffer),Size,Size) do
if GetLastError=ERROR_INSUFFICIENT_BUFFER then
ReallocMem(Buffer,Size)
else
Exit;
PC:=Buffer;
while PC^<>#0 do begin
List.Add(PC);
PC:=StrEnd(PC)+1;
end;
Inc(A);
end;
finally
FreeMem(Buffer);
end;
finally
SetupDiDestroyDeviceInfoList(DevInfo);
end;
Inc(I);
end;
end;
При вызове CM_Enumerate_Classes(I,GUID,0) появляется ошибка