public static String[] ListAllPhysicalDevices(Status status = null) { using (StatusChecker checker = new StatusChecker(status)) { byte[] nameBuffer = new byte[2048]; GCHandle nameHandle = GCHandle.Alloc(nameBuffer, GCHandleType.Pinned); TfInvoke.tfeListAllPhysicalDevices( nameHandle.AddrOfPinnedObject(), checker.Status); nameHandle.Free(); String nameResult = System.Text.Encoding.ASCII.GetString(nameBuffer); String[] names = nameResult.TrimEnd('\0', '\n').Split('\n'); return(names); } }