private WiaItem GetItem(WiaDevice device) { if (ScanProfile.UseNativeUI) { var hwnd = Invoker.Current.InvokeGet(() => DialogParent.Handle); bool useWorker = Environment.Is64BitProcess && device.Version == WiaVersion.Wia10; if (useWorker) { WiaConfiguration config; using (var worker = workerServiceFactory.Create()) { config = worker.Service.Wia10NativeUI(device.Id(), hwnd); } var item = device.FindSubItem(config.ItemName); device.Properties.DeserializeEditable(device.Properties.Delta(config.DeviceProps)); item.Properties.DeserializeEditable(item.Properties.Delta(config.ItemProps)); return(item); } else { return(device.PromptToConfigure(hwnd)); } } else if (device.Version == WiaVersion.Wia10) { // In WIA 1.0, the root device only has a single child, "Scan" // https://docs.microsoft.com/en-us/windows-hardware/drivers/image/wia-scanner-tree return(device.GetSubItems().First()); } else { // In WIA 2.0, the root device may have multiple children, i.e. "Flatbed" and "Feeder" // https://docs.microsoft.com/en-us/windows-hardware/drivers/image/non-duplex-capable-document-feeder // The "Feeder" child may also have a pair of children (for front/back sides with duplex) // https://docs.microsoft.com/en-us/windows-hardware/drivers/image/simple-duplex-capable-document-feeder var items = device.GetSubItems(); var preferredItemName = ScanProfile.PaperSource == ScanSource.Glass ? "Flatbed" : "Feeder"; return(items.FirstOrDefault(x => x.Name() == preferredItemName) ?? items.First()); } }