AddTargetForm.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.IO;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using DiskAccessLibrary;
  9. using DiskAccessLibrary.Mod;
  10. using ISCSI.Server;
  11. using Utilities;
  12. namespace ISCSIConsole
  13. {
  14. public partial class AddTargetForm : Form
  15. {
  16. public static int m_targetNumber = 1;
  17. public const string DefaultTargetIQN = "iqn.1991-05.com.talaloni";
  18. private List<Disk> m_disks = new List<Disk>();
  19. private ISCSITarget m_target;
  20. public AddTargetForm()
  21. {
  22. InitializeComponent();
  23. #if Win32
  24. btnAddPhysicalDisk.Visible = true;
  25. btnAddVolume.Visible = true;
  26. if (!SecurityHelper.IsAdministrator())
  27. {
  28. btnAddPhysicalDisk.Enabled = false;
  29. btnAddVolume.Enabled = false;
  30. }
  31. #endif
  32. }
  33. private void AddTargetForm_Load(object sender, EventArgs e)
  34. {
  35. txtTargetIQN.Text = String.Format("{0}:target-{1:00}", DefaultTargetIQN, m_targetNumber);
  36. }
  37. private void btnCreateDiskImage_Click(object sender, EventArgs e)
  38. {
  39. if ((Control.ModifierKeys & Keys.Control) == Keys.Control)
  40. {
  41. CreateRAMDiskForm createRAMDisk = new CreateRAMDiskForm();
  42. DialogResult result = createRAMDisk.ShowDialog();
  43. if (result == DialogResult.OK)
  44. {
  45. var ramDisk = createRAMDisk.RAMDisk;
  46. AddDisk(ramDisk);
  47. }
  48. }
  49. else
  50. {
  51. CreateDiskImageForm createDiskImage = new CreateDiskImageForm();
  52. DialogResult result = createDiskImage.ShowDialog();
  53. if (result == DialogResult.OK)
  54. {
  55. DiskImage diskImage = createDiskImage.DiskImage;
  56. AddDisk(diskImage);
  57. }
  58. }
  59. }
  60. private void btnAddDiskImage_Click(object sender, EventArgs e)
  61. {
  62. SelectDiskImageForm selectDiskImage = new SelectDiskImageForm();
  63. DialogResult result = selectDiskImage.ShowDialog();
  64. if (result == DialogResult.OK)
  65. {
  66. DiskImage diskImage = selectDiskImage.DiskImage;
  67. AddDisk(diskImage);
  68. }
  69. }
  70. private void btnAddPhysicalDisk_Click(object sender, EventArgs e)
  71. {
  72. #if Win32
  73. SelectPhysicalDiskForm selectPhysicalDisk = new SelectPhysicalDiskForm();
  74. DialogResult result = selectPhysicalDisk.ShowDialog();
  75. if (result == DialogResult.OK)
  76. {
  77. AddDisk(selectPhysicalDisk.SelectedDisk);
  78. }
  79. #endif
  80. }
  81. private void btnAddVolume_Click(object sender, EventArgs e)
  82. {
  83. #if Win32
  84. SelectVolumeForm selectVolume = new SelectVolumeForm();
  85. DialogResult result = selectVolume.ShowDialog();
  86. if (result == DialogResult.OK)
  87. {
  88. VolumeDisk volumeDisk = new VolumeDisk(selectVolume.SelectedVolume, selectVolume.IsReadOnly);
  89. AddDisk(volumeDisk);
  90. }
  91. #endif
  92. }
  93. private void AddDisk(Disk disk)
  94. {
  95. string description = String.Empty;
  96. string sizeString = FormattingHelper.GetStandardSizeString(disk.Size);
  97. if (disk is DiskImage)
  98. {
  99. description = ((DiskImage)disk).Path;
  100. }
  101. else if (disk is RAMDisk)
  102. {
  103. description = "RAM Disk";
  104. }
  105. else if (disk is UnmanagedGigabyteBlockSeparatedRamDisk)
  106. {
  107. description = "Unmanaged RAM Disk";
  108. }
  109. #if Win32
  110. else if (disk is PhysicalDisk)
  111. {
  112. description = String.Format("Physical Disk {0}", ((PhysicalDisk)disk).PhysicalDiskIndex);
  113. }
  114. else if (disk is VolumeDisk)
  115. {
  116. description = String.Format("Volume");
  117. }
  118. #endif
  119. ListViewItem item = new ListViewItem(description);
  120. item.SubItems.Add(sizeString);
  121. listDisks.Items.Add(item);
  122. m_disks.Add(disk);
  123. }
  124. private void btnRemove_Click(object sender, EventArgs e)
  125. {
  126. if (listDisks.SelectedIndices.Count > 0)
  127. {
  128. int selectedIndex = listDisks.SelectedIndices[0];
  129. LockUtils.ReleaseDisk(m_disks[selectedIndex]);
  130. m_disks.RemoveAt(selectedIndex);
  131. listDisks.Items.RemoveAt(selectedIndex);
  132. }
  133. }
  134. private void btnOK_Click(object sender, EventArgs e)
  135. {
  136. if (!ISCSINameHelper.IsValidIQN(txtTargetIQN.Text))
  137. {
  138. MessageBox.Show("Target IQN is invalid", "Error");
  139. return;
  140. }
  141. m_target = new ISCSITarget(txtTargetIQN.Text, m_disks);
  142. m_targetNumber++;
  143. this.DialogResult = DialogResult.OK;
  144. this.Close();
  145. }
  146. private void btnCancel_Click(object sender, EventArgs e)
  147. {
  148. this.DialogResult = DialogResult.Cancel;
  149. this.Close();
  150. }
  151. public ISCSITarget Target
  152. {
  153. get
  154. {
  155. return m_target;
  156. }
  157. }
  158. private void listDisks_SelectedIndexChanged(object sender, EventArgs e)
  159. {
  160. btnRemove.Enabled = (listDisks.SelectedIndices.Count > 0);
  161. }
  162. private void listDisks_ColumnWidthChanging(object sender, ColumnWidthChangingEventArgs e)
  163. {
  164. e.NewWidth = ((ListView)sender).Columns[e.ColumnIndex].Width;
  165. e.Cancel = true;
  166. }
  167. private void AddTargetForm_FormClosing(object sender, FormClosingEventArgs e)
  168. {
  169. if (this.DialogResult != DialogResult.OK)
  170. {
  171. LockUtils.ReleaseDisks(m_disks);
  172. }
  173. }
  174. private void AddTargetForm_KeyDown(object sender, KeyEventArgs e)
  175. {
  176. if (e.Control)
  177. {
  178. btnCreateDiskImage.Text = "Create RAM Disk";
  179. }
  180. }
  181. private void AddTargetForm_KeyUp(object sender, KeyEventArgs e)
  182. {
  183. btnCreateDiskImage.Text = "Create Virtual Disk";
  184. }
  185. private void AddTargetForm_Deactivate(object sender, EventArgs e)
  186. {
  187. btnCreateDiskImage.Text = "Create Virtual Disk";
  188. }
  189. }
  190. }