Con lo del array creo que te puedo ayudar. El tipo STI_DEVICE_INFORMATION si que lo tienes, pues un array, no es mas que eso un array:
Código Delphi
[-]
type
STI_DEVICE_INFORMATION_ARRAY = array[0..0] of STI_DEVICE_INFORMATION;
PSTI_DEVICE_INFORMATION_ARRAY = ^STI_DEVICE_INFORMATION_ARRAY;
Para utilizarlo, lo hacemos como cualquier otro array:
Código Delphi
[-]
var
...
pBuffer: PSTI_DEVICE_INFORMATION_ARRAY;
i: integer;
begin
...
hr:=StillImage.GetDeviceList(dwType,dwFlags,dwItemsReturned,pBuffer);
for i:= 0 to dwItemsReturned - 1 do
begin
pBuffer^[i].szDeviceInternalName;
end;