Вы должны сами упорядочить массив строк.Объявление должно выглядеть следующим образом:
[PreserveSig]
int QueryVolumeGuidPathNames(out IntPtr pathArray, out uint numberOfPaths);
И код должен напоминать это:
IntPtr pathPtr;
int count;
var result = new List<string>();
int hr = obj.QueryVolumeGuidPathNames(out pathPtr, out count);
if (hr < 0) throw new COMException("Oops", hr);
for (int ix = 0; ix < count; ++ix) {
IntPtr strPtr = Marshal.ReadIntPtr(pathPtr, ix * IntPtr.Size);
result.Add(Marshal.PtrToStringUni(strPtr));
Marshal.FreeCoTaskMem(strPtr);
}
Marshal.FreeCoTaskMem(pathPtr);
Не проверено, конечно.