//HighMemoryMappedIoSpace private void HMMIOtoolStripTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { DeviceData data = contextMenuStrip.Tag as DeviceData; ulong mb; if (ulong.TryParse(HMMIOtoolStripTextBox.Text, out mb)) { var vm = data.Item1; ulong bytes = mb * 1024 * 1024; if (bytes != vm.HighMemoryMappedIoSpace && bytes != 0) { try { PowerShellWrapper.SetHighMemoryMappedIoSpace(vm, bytes); //Success contextMenuStrip.Close(); return; } catch (Exception ex) { MessageBox.Show(ex.Message, "错误"); } } } //Failed HMMIOtoolStripTextBox.Text = (data.Item1.HighMemoryMappedIoSpace / 1024 / 1024).ToString(); } }
//添加设备 private void 添加设备ToolStripMenuItem_Click(object sender, EventArgs e) { DeviceData data = contextMenuStrip.Tag as DeviceData; CimInstance dev = new PnpDeviceForm().GetResult(); if (dev != null) { string name = dev.CimInstanceProperties["Name"] != null ? dev.CimInstanceProperties["Name"].Value as string : null; if (name == null) { name = ""; } if (MessageBox.Show("确定添加设备“" + name + "”到虚拟机“" + data.Item1.Name + "”吗?", "确认", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { PowerShellWrapper.AddVMAssignableDevice(data.Item1, dev); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误"); } UpdateVM(); } } }
//更新虚拟机和设备显示 private void UpdateVM() { listView1.Groups.Clear(); listView1.Items.Clear(); //获取虚拟机列表 var vms = PowerShellWrapper.GetVM(); var groups = new List <ListViewGroup>(); foreach (var vm in vms) { ListViewGroup group = new ListViewGroup("[" + vm.State + "]" + vm.Name); groups.Add(group); } //获取每个虚拟机下设备列表 var lviss = new List <ListViewItem> [vms.Count]; Parallel.For(0, vms.Count, (int i) => { var vm = vms[i]; var group = groups[i]; lviss[i] = new List <ListViewItem>(); var lvis = lviss[i]; foreach (var dd in PowerShellWrapper.GetVMAssignableDevice(vm)) { var dev = PowerShellWrapper.GetPnpDevice(dd.InstanceID); //string name = dev.CimInstanceProperties["Name"] != null ? dev.CimInstanceProperties["Name"].Value as string : null; string name = dd.Name; string clas = dev.CimInstanceProperties["PnpClass"] != null ? dev.CimInstanceProperties["PnpClass"].Value as string : null; lvis.Add(new ListViewItem(new string[] { name != null ? name : "", clas != null ? clas : "", dd.LocationPath }, group) { Tag = new DeviceData(vm, dd), }); } lvis.Add(new ListViewItem("...", group) { Tag = new DeviceData(vm, null), }); }); //更新ListView listView1.BeginUpdate(); foreach (var group in groups) { listView1.Groups.Add(group); } foreach (var lvis in lviss) { foreach (var lvi in lvis) { listView1.Items.Add(lvi); } } listView1.EndUpdate(); }
//GuestControlledCacheTypes private void GCCTtoolStripMenuItem_Click(object sender, EventArgs e) { DeviceData data = contextMenuStrip.Tag as DeviceData; try { PowerShellWrapper.SetGuestControlledCacheTypes(data.Item1, !GCCTtoolStripMenuItem.Checked); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误"); } }
//移除设备 private void 移除设备ToolStripMenuItem_Click(object sender, EventArgs e) { DeviceData data = contextMenuStrip.Tag as DeviceData; if (MessageBox.Show("确定从虚拟机“" + data.Item1.Name + "”移除设备“" + data.Item2.Name + "”吗?", "确认", MessageBoxButtons.YesNo) == DialogResult.Yes) { try { PowerShellWrapper.RemoveVMAssignableDevice(data.Item1, data.Item2); } catch (Exception ex) { MessageBox.Show(ex.Message, "错误"); } UpdateVM(); } }
//LowMemoryMappedIoSpace private void LMMIOtoolStripTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { DeviceData data = contextMenuStrip.Tag as DeviceData; uint mb; if (uint.TryParse(LMMIOtoolStripTextBox.Text, out mb)) { var vm = data.Item1; uint bytes = mb * 1024 * 1024; uint lowMMIO = 0; try { //这句会莫名其妙抛出异常 lowMMIO = data.Item1.LowMemoryMappedIoSpace; } catch { } if ((lowMMIO == 0 || bytes != lowMMIO) && bytes != 0) { try { PowerShellWrapper.SetLowMemoryMappedIoSpace(vm, bytes); //Success contextMenuStrip.Close(); return; } catch (Exception ex) { MessageBox.Show(ex.Message, "错误"); } } } //Failed LMMIOtoolStripTextBox.Text = (data.Item1.LowMemoryMappedIoSpace / 1024 / 1024).ToString(); } }
private void PnpDeviceForm_Load(object sender, EventArgs e) { Devices = PowerShellWrapper.GetPnpDevice(); UpdateDevices(); }