Смекни!
smekni.com

Разработка программы "Формирование и проверка контрольной суммы кластеров" (стр. 4 из 5)

foreach (ManagementObject wmi_HD in searcher.Get())

{

HardDrive hd = new HardDrive();

#region hd.Model

try

{

hd.Model = wmi_HD["Model"].ToString();

}

catch (Exception)

{

hd.Model = "Unknown";

}

#endregion

#region hd.Type

try

{

hd.Type = wmi_HD["InterfaceType"].ToString();

}

catch (Exception)

{

hd.Type = "Unknown";

}

#endregion

#region hd.BytesPerSector

try

{

hd.BytesPerSector = wmi_HD["BytesPerSector"].ToString();

}

catch (Exception)

{

hd.BytesPerSector = "Unknown";

}

#endregion

#region hd.MediaType

try

{

hd.MediaType = wmi_HD["MediaType"].ToString();

}

catch (Exception)

{

hd.MediaType = "Unknown";

}

#endregion

#region hd.Partitions

try

{

hd.Partitions = wmi_HD["Partitions"].ToString();

}

catch (Exception)

{

hd.Partitions = "Unknown";

}

#endregion

#region hd.SectorsPerTrack

try

{

hd.SectorsPerTrack = wmi_HD["SectorsPerTrack"].ToString();

}

catch (Exception)

{

hd.SectorsPerTrack = "Unknown";

}

#endregion

#region hd.Signature

try

{

hd.Signature = wmi_HD["Signature"].ToString();

}

catch (Exception)

{

hd.Signature = "Unknown";

}

#endregion

#region hd.size

try

{

hd.Size = wmi_HD["Size"].ToString();

}

catch (Exception)

{

hd.Size = "0";

}

#endregion

#region hd.Status

try

{

hd.Status = wmi_HD["Status"].ToString();

}

catch (Exception)

{

hd.Status = "Unknown";

}

#endregion

#region hd.TotalCylonders

try

{

hd.TotalCylinders = wmi_HD["TotalCylinders"].ToString();

}

catch (Exception)

{

hd.TotalCylinders = "Unknown";

}

#endregion

#region hd.TotalHeads

try

{

hd.TotalHeads = wmi_HD["TotalHeads"].ToString();

}

catch (Exception)

{

hd.TotalHeads = "Unknown";

}

#endregion

#region hd.TotalSectors

try

{

hd.TotalSectors = wmi_HD["TotalSectors"].ToString();

}

catch (Exception)

{

hd.TotalSectors = "Unknown"; }

#endregion

#region hd.TotalTracks

try

{

hd.TotalTracks = wmi_HD["TotalTracks"].ToString(); }

catch (Exception)

{

hd.TotalTracks = "Unknown"; }

#endregion

#region hd.TracksPerCylinder

try

{

hd.TracksPerCylinder = wmi_HD["TracksPerCylinder"].ToString(); }

catch (Exception)

{

hd.TracksPerCylinder = "Unknown"; }

#endregion

#region hd.SeralNo

if (OSXP != true)

{

try

{

hd.SerialNo = wmi_HD["SerialNumber"].ToString(); }

catch (Exception)

{

hd.SerialNo = "Unknown";

} }

else

{ }

#endregion

#region hd.FirmwareRevision

try

{

hd.FirmwareRevision = wmi_HD["FirmwareRevision"].ToString(); }

catch (Exception)

{

hd.FirmwareRevision = " "; }

#endregion

hdCollection.Add(hd);

hd = null;

Num_Hdd = Num_Hdd + 1;

TotalSize = TotalSize + double.Parse(wmi_HD["Size"].ToString());

}

#region //Getting HDD's serial under XP

if (OSXP == true)

{

searcher = new

ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

int i = 0;

foreach (ManagementObject wmi_HD in searcher.Get())

{

// get the hard drive from collection

// using index

HardDrive hd = (HardDrive)hdCollection[i];

// get the hardware serial no.

if (wmi_HD["SerialNumber"] == null)

hd.SerialNo = "None";

else

hd.SerialNo = wmi_HD["SerialNumber"].ToString();

++i;

}

}

#endregion

searcher = new

ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk");

foreach (ManagementObject wmi_HD in searcher.Get())

{

// get how much Freespace the HDD have left...

if (wmi_HD["FreeSpace"] == null)

{

//do nothing

}

else

{

if (wmi_HD["DriveType"].ToString() == "3")

{

TotalSpaceLeft += double.Parse(wmi_HD["FreeSpace"].ToString());

}

}

}

// HDD_info_Done = true;

searcher = null;

#endregion

}

private void AddHDDItemToListview()

{

//Makes the Search group:::......

ListViewGroup HDDGroup = new ListViewGroup();

HDDGroup.Header = "HardDrive(s) :";

HDDGroup.HeaderAlignment = HorizontalAlignment.Left;

HDDGroup.Name = "HardDrive(s)";

//Adds the search group...

listView1.Groups.Add(HDDGroup);

int i = 0;

foreach (HardDrive x in hdCollection)

{

AddItemToListview(HDDGroup, i, x.Model.ToString(), 0, "1");

i++; }

HDDGroup = null; }

private void AddItemToListview(ListViewGroup GroupName, int IndexNumber, string ItemName, int ImageIndex, string ItemTAG)

{

ListViewItem NewItem = new ListViewItem();

ListViewItem.ListViewSubItem NewSubItem = new ListViewItem.ListViewSubItem();

NewSubItem.Text = IndexNumber.ToString();

NewSubItem.Name = "Subitem1";

NewItem.SubItems.Add(NewSubItem);

NewItem.SubItems.Add(NewSubItem);

NewItem.Name = ItemName;

NewItem.Text = ItemName;

NewItem.Group = GroupName;

NewItem.ImageIndex = ImageIndex;

NewItem.Tag = ItemTAG;

listView1.Items.Add(NewItem);

NewItem = null;

NewSubItem = null;

// Group = null; }

private void WriteHDDText()

{

HardDrive Hd = null;

bool fail = false;

try

{

Hd = (HardDrive)hdCollection[int.Parse(listView1.SelectedItems[0].SubItems[1].Text)]; }

catch (Exception)

{

Hd = null;

fail = true; }

if (fail != true)

{

Hd = (HardDrive)hdCollection[int.Parse(listView1.SelectedItems[0].SubItems[1].Text)];

double size_temp = double.Parse(Hd.Size);

if (analiz == false)

{

richTextBox1.Clear();

richTextBox1.Text = ("\n" +

"Model:\n" +

"--------------------------------------------------------\n" +

"Model : " + Hd.Model.ToString() + "\n" +

"Type : " + Hd.Type.ToString() + "\n" +

"Serial No. : " + Hd.SerialNo.ToString() + "\n" +

"Firmware Revision : " + Hd.FirmwareRevision.ToString() + "\n" +

"\n" +

"Characteristics:\n" +

"--------------------------------------------------------\n" +

"Media Type : " + Hd.MediaType.ToString() + "\n" +

"Partitions : " + Hd.Partitions.ToString() + "\n" +

"Signature : " + Hd.Signature.ToString() + "\n" +

"Size : " + Hd.Size.ToString() + " Byte (" + Math.Round((((size_temp / 1024) / 1024) / 1024), 2) + " GB)" + "\n" +

"\n" +

"Status : " + Hd.Status.ToString() + "\n" +

"\n" +

"Tracks:\n" +

"--------------------------------------------------------\n" +

"Total Cylinders : " + Hd.TotalCylinders.ToString() + "\n" +

"Total Heads : " + Hd.TotalHeads.ToString() + "\n" +

"Total Sectors : " + Hd.TotalSectors.ToString() + "\n" +

"Total Tracks : " + Hd.TotalTracks.ToString() + "\n" +

"Bytes Pr. Sector : " + Hd.BytesPerSector.ToString() + "\n" +

"Sector Pr. Tracks : " + Hd.SectorsPerTrack.ToString() + "\n" +

"Tracks Pr. Cylinder : " + Hd.TracksPerCylinder.ToString() + "\n"

); }

else

{

richTextBox2.Clear();

richTextBox2.Text = ("\n" +

"Model:\n" +

"--------------------------------------------------------\n" +

"Model : " + Hd.Model.ToString() + "\n" +

"Type : " + Hd.Type.ToString() + "\n" +

"Serial No. : " + Hd.SerialNo.ToString() + "\n" +

"Firmware Revision : " + Hd.FirmwareRevision.ToString() + "\n" +

"\n" +

"Characteristics:\n" +

"--------------------------------------------------------\n" +

"Media Type : " + Hd.MediaType.ToString() + "\n" +

"Partitions : " + Hd.Partitions.ToString() + "\n" +

"Signature : " + Hd.Signature.ToString() + "\n" +

"Size : " + Hd.Size.ToString() + " Byte (" + Math.Round((((size_temp / 1024) / 1024) / 1024), 2) + " GB)" + "\n" +

"\n" +

"Status : " + Hd.Status.ToString() + "\n" +

"\n" +

"Tracks:\n" +

"--------------------------------------------------------\n" +

"Total Cylinders : " + Hd.TotalCylinders.ToString() + "\n" +

"Total Heads : " + Hd.TotalHeads.ToString() + "\n" +

"Total Sectors : " + Hd.TotalSectors.ToString() + "\n" +

"Total Tracks : " + Hd.TotalTracks.ToString() + "\n" +

"Bytes Pr. Sector : " + Hd.BytesPerSector.ToString() + "\n" +

"Sector Pr. Tracks : " + Hd.SectorsPerTrack.ToString() + "\n" +

"Tracks Pr. Cylinder : " + Hd.TracksPerCylinder.ToString() + "\n"

); }

size_temp = 0;

}

Hd = null;

}

private void listView1_SelectedIndexChanged(object sender, EventArgs e)

{

int selected_index;

try

{

//MessageBox.Show(listView1.SelectedItems[0].Tag.ToString());

selected_index = listView1.SelectedItems[0].Index;

switch (listView1.SelectedItems[0].Tag.ToString())

{

case "1":

WriteHDDText();

break;

} }

catch (Exception)

{

//Do nothing

} }

private void button1_Click(object sender, EventArgs e)

{

if (analiz == false)

analiz = true;

else

analiz = false;

GetHardDiskInfo();

WriteHDDText();

}

private void button2_Click(object sender, EventArgs e)

{

Form2 f2 = new Form2();

f2.Show();

}

}

}

//Form2.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

using System.Collections;

namespace kurs_pogulyat

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

//CRC 32

private void button1_Click(object sender, EventArgs e)

{

// Читаемфайл test.txt

System.IO.FileStream stream1 = System.IO.File.OpenRead(textBox1.Text.ToString());

textBox3.Text=(string.Format("{0:X}", CalculateCRC(stream1))).ToString();

}

/// <summary>

/// Вычисление CRC32

/// </summary>

/// <param name="stream"></param>

/// <returns></returns>

public static uint CalculateCRC(System.IO.Stream stream)

{

const int buffer_size = 1024;

const uint POLYNOMIAL = 0xEDB88320;

uint result = 0xFFFFFFFF;

uint Crc32;

byte[] buffer = new byte[buffer_size];

uint[] table_CRC32 = new uint[256];

unchecked

{

// Инициалиазациятаблицы

for (int i = 0; i < 256; i++)

{

Crc32 = (uint)i;

for (int j = 8; j > 0; j--)

{

if ((Crc32 & 1)==1)

Crc32 = (Crc32 >> 1) ^ POLYNOMIAL;

else

Crc32 >>= 1;

}

table_CRC32[i] = Crc32;

}

/

// Чтениеизбуфера

int count = stream.Read(buffer, 0, buffer_size);

// Вычисление CRC

while (count > 0)

{

for (int i = 0; i < count; i++)

{

result = ((result) >> 8)

^ table_CRC32[(buffer[i])

^ ((result) & 0x000000FF)];

}

count = stream.Read(buffer, 0, buffer_size);

}

}

return ~result;

}

//MD5

private void button2_Click(object sender, EventArgs e)

{

textBox4.Text = MD5File(textBox2.Text.ToString()).ToString();

}

//статические переменные

private static UInt32 A;

private static UInt32 B;

private static UInt32 C;

private static UInt32 D;

//номербитасдвиг

private const int S11 = 7;

private const int S12 = 12;

private const int S13 = 17;

private const int S14 = 22;

private const int S21 = 5;

private const int S22 = 9;

private const int S23 = 14;

private const int S24 = 20;

private const int S31 = 4;

private const int S32 = 11;

private const int S33 = 16;

private const int S34 = 23;

private const int S41 = 6;

private const int S42 = 10;

private const int S43 = 15;

private const int S44 = 21;

/* сдвиги

r[ 0..15] := {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22}

r[16..31] := {5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20}

r[32..47] := {4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23}

r[48..63] := {6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21}*/

/* F, G, H и I основные функции алгоритма вычисления MD5

F(X,Y,Z) =(X&Y)|((~X)&Z)

G(X,Y,Z) =(X&Z)|(Y&(~Z))

H(X,Y,Z) =X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

*/

private static UInt32 F(UInt32 x, UInt32 y, UInt32 z)

{

return (x & y) | ((~x) & z);

}

private static UInt32 G(UInt32 x, UInt32 y, UInt32 z)

{

return (x & z) | (y & (~z));

}

private static UInt32 H(UInt32 x, UInt32 y, UInt32 z)

{

return x ^ y ^ z;

}

private static UInt32 I(UInt32 x, UInt32 y, UInt32 z)

{

return y ^ (x | (~z));

}

// FF, GG, HH, и II преобразоания для раундов 1, 2, 3, и 4.

private static void FF(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)

{

a = a + F(b, c, d) + mj + ti;

a = a << s | a >> (32 - s);

a += b;

}

private static void GG(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)

{

a = a + G(b, c, d) + mj + ti;

a = a << s | a >> (32 - s);

a += b;

}

private static void HH(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)

{

a = a + H(b, c, d) + mj + ti;

a = a << s | a >> (32 - s);

a += b;

}

private static void II(ref UInt32 a, UInt32 b, UInt32 c, UInt32 d, UInt32 mj, int s, UInt32 ti)

{

a = a + I(b, c, d) + mj + ti;

a = a << s | a >> (32 - s);

a += b;

}

private static void MD5_Init()

{

A = 0x67452301; //впамяти0x01234567

B = 0xefcdab89; //впамяти, 0x89abcdef

C = 0x98badcfe; //в памяти, 0xfedcba98

D = 0x10325476; //в памяти, 0x76543210

}

private static UInt32[] MD5_Append(byte[] input)

{

int zeros = 0;

int ones = 1;

int size = 0;

int n = input.Length;

int m = n % 64; //остаток от деления

if (m < 56)

{

zeros = 55 - m;

size = n - m + 64;

}

else

{

zeros = 63 - m + 56;

size = n + 64 - m + 64;

}

ArrayList bs = new ArrayList(input);

if (ones == 1)

{

bs.Add((byte)0x80); // 0x80 = $10000000