Subversion Repositories Code-Repo

Compare Revisions

No changes between revisions

Ignore whitespace Rev 38 → Rev 39

/SWAT DriveLogger/tags/Release_1.3/DriveLogger/AboutBox.cs
0,0 → 1,30
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
 
namespace DriveLogger
{
partial class AboutBox : Form
{
public AboutBox()
{
InitializeComponent();
this.Text = "Program Info";
this.labelProductName.Text = "SWAT DriveLogger";
this.labelVersion.Text = "Version 1.3";
this.labelCopyright.Text = "Copyright to Kevin Lee @ Virginia Tech";
this.labelCompanyName.Text = "Author: Kevin Lee";
this.textBoxDescription.Text = "This program has been written by Kevin Lee for use " +
"in Virginia Tech's SWAT (Software Assistance and " +
"Triage) office at Torgeson 2080. Distribution without " +
"notification to the author is strongly discouraged. " +
"Claiming credit for this program without being the " +
"author is prohibited. Questions and comments can be " +
"sent to klee482@vt.edu.";
}
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/LabelPrompt.Designer.cs
0,0 → 1,88
namespace DriveLogger
{
partial class LabelPrompt
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
 
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
 
#region Windows Form Designer generated code
 
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.lbl_Prompt = new System.Windows.Forms.Label();
this.txt_Prompt = new System.Windows.Forms.TextBox();
this.btn_Prompt = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// lbl_Prompt
//
this.lbl_Prompt.AutoSize = true;
this.lbl_Prompt.Location = new System.Drawing.Point(37, 9);
this.lbl_Prompt.Name = "lbl_Prompt";
this.lbl_Prompt.Size = new System.Drawing.Size(81, 13);
this.lbl_Prompt.TabIndex = 0;
this.lbl_Prompt.Text = "Enter Drive Info";
//
// txt_Prompt
//
this.txt_Prompt.Location = new System.Drawing.Point(12, 25);
this.txt_Prompt.Name = "txt_Prompt";
this.txt_Prompt.Size = new System.Drawing.Size(130, 20);
this.txt_Prompt.TabIndex = 1;
//
// btn_Prompt
//
this.btn_Prompt.Location = new System.Drawing.Point(40, 51);
this.btn_Prompt.Name = "btn_Prompt";
this.btn_Prompt.Size = new System.Drawing.Size(75, 23);
this.btn_Prompt.TabIndex = 2;
this.btn_Prompt.Text = "Ok";
this.btn_Prompt.UseVisualStyleBackColor = true;
this.btn_Prompt.Click += new System.EventHandler(this.btn_Prompt_Click);
//
// LabelPrompt
//
this.AcceptButton = this.btn_Prompt;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(154, 86);
this.ControlBox = false;
this.Controls.Add(this.btn_Prompt);
this.Controls.Add(this.txt_Prompt);
this.Controls.Add(this.lbl_Prompt);
this.Name = "LabelPrompt";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Device Information";
this.TopMost = true;
this.ResumeLayout(false);
this.PerformLayout();
 
}
 
#endregion
 
private System.Windows.Forms.Label lbl_Prompt;
private System.Windows.Forms.TextBox txt_Prompt;
private System.Windows.Forms.Button btn_Prompt;
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/MainForm.cs
0,0 → 1,281
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;
// Imported class for drive insertion event handling
using Dolinay;
 
namespace DriveLogger
{
/// <summary>
/// Struct used for storing detailed information for each drive that is detected
/// </summary>
public struct DriveEntry
{
public DateTime time;
public string drive;
public string label;
public string size;
public string owner;
}
public partial class MainForm : Form
{
// List of drives that are displayed in the listview
private static List<DriveEntry> driveList = new List<DriveEntry>();
// Log location for the debug and logging texts
private static string logLocation = "C:\\DriveLog.txt";
private static int deviceRemovalRefreshInterval = 1000;
public MainForm()
{
// Disable thread safe checking.
// !! -- NEED TO IMPLEMENT THREAD SAFE UPDATING OF FORM -- !!
CheckForIllegalCrossThreadCalls = false;
 
// Clears the list of DriveEntry structs
driveList.Clear();
InitializeComponent();
// Initializes a new DriveDetector class used to detect new drive events
DriveDetector driveDetector = new DriveDetector();
driveDetector.DeviceArrived += new DriveDetectorEventHandler(driveDetector_DeviceArrived);
//driveDetector.DeviceRemoved += new DriveDetectorEventHandler(driveDetector_DeviceRemoved);
this.listView_Drives.AfterLabelEdit += new LabelEditEventHandler(listView_Drives_AfterLabelEdit);
 
// KeyPreview events for keyboard shortcuts
this.KeyPreview = true;
this.KeyPress += new KeyPressEventHandler(MainForm_KeyPress);
// Appends new session start text to log file
using (StreamWriter sw = File.AppendText(logLocation))
{
sw.WriteLine("-- New Session Started --");
sw.WriteLine("Initializing form details");
}
// Adds columns to the listview
this.listView_Drives.Columns.Add("Owner", 145, HorizontalAlignment.Left);
this.listView_Drives.Columns.Add("Time", 130, HorizontalAlignment.Center);
this.listView_Drives.Columns.Add("Drive", 40, HorizontalAlignment.Center);
this.listView_Drives.Columns.Add("Label", 109, HorizontalAlignment.Center);
this.listView_Drives.Columns.Add("Size", 60, HorizontalAlignment.Center);
 
paintDriveListbox();
 
// Creates and runs a background worker for detecting if drives have been
// removed and refreshing the listview accordingly
BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
 
// Starts the background worker thread
bgWorker.RunWorkerAsync();
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
// currentDrives holds a list of 'previous' drives to compare to
List<string> currentDrives = new List<string>();
// newDrives holds a list of the most current drives detected
DriveInfo[] newDrives = DriveInfo.GetDrives();
// Sets the two lists of drives to hold the same drives
foreach (DriveInfo drive in newDrives)
{
currentDrives.Add(drive.Name);
}
// Loop that checks for drives that are removed
while (true)
{
// Updates the list of current drives
newDrives = DriveInfo.GetDrives();
// If the count of current drives is more than the count of previous drives
if (newDrives.Length < currentDrives.Count)
{
// Goes through each list and finds the drive that was recently removed
bool removedDriveFound = false;
foreach (string str in currentDrives)
{
removedDriveFound = false;
// Loop here checks for non-matching entries in the two lists
foreach (DriveInfo drive in newDrives)
{
// If entries match, drive was not removed
if (str == drive.Name)
{
removedDriveFound = true;
break;
}
}
// If list mismatch is detected, remove from driveList
if (removedDriveFound == false)
{
driveRemoved(str);
}
}
// Clears and refreshes the currentDrives list
currentDrives.Clear();
foreach (DriveInfo drive in newDrives)
{
currentDrives.Add(drive.Name);
}
}
else
{
// Sets the two lists to hold the same drives
currentDrives.Clear();
foreach (DriveInfo drive in newDrives)
{
currentDrives.Add(drive.Name);
}
}
// Sleeps the thread for a second
System.Threading.Thread.Sleep(deviceRemovalRefreshInterval);
}
}
private void driveRemoved(string str)
{
// Removes the passed drive from driveList
foreach (DriveEntry entry in driveList)
{
if (str == entry.drive)
{
driveList.Remove(entry);
using (StreamWriter sw = File.AppendText(logLocation))
{
sw.WriteLine("Drive Removed -- [" + entry.time.ToString() + "]\t" + entry.drive + "\t\"" + entry.label + "\"\t" + entry.size);
}
break;
}
}
 
paintDriveListbox();
}
void listView_Drives_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
// Logs the new label if it is changed
if (e.Label != null)
{
using (StreamWriter sw = File.AppendText(logLocation))
{
ListViewItem entry = listView_Drives.Items[e.Item];
 
sw.WriteLine("Label \"" + e.Label + "\" added to drive " + entry.SubItems[2].Text);
}
}
}
void MainForm_KeyPress(object sender, KeyPressEventArgs e)
{
switch (e.KeyChar)
{
case '?':
AboutBox window = new AboutBox();
window.ShowDialog();
break;
}
}
private void paintDriveListbox()
{
// Updates the listview
this.listView_Drives.BeginUpdate();
 
this.listView_Drives.Items.Clear();
 
// Adds each entry from the driveList into the listView
foreach (DriveEntry entry in driveList)
{
if (entry.owner != "System Reserved")
{
ListViewItem item = new ListViewItem();
item.Text = entry.owner;
ListViewItem.ListViewSubItem subTime = new ListViewItem.ListViewSubItem();
subTime.Text = entry.time.ToString();
item.SubItems.Add(subTime);
ListViewItem.ListViewSubItem subDrive = new ListViewItem.ListViewSubItem();
subDrive.Text = entry.drive;
item.SubItems.Add(subDrive);
ListViewItem.ListViewSubItem subLabel = new ListViewItem.ListViewSubItem();
subLabel.Text = entry.label;
item.SubItems.Add(subLabel);
ListViewItem.ListViewSubItem subSize = new ListViewItem.ListViewSubItem();
subSize.Text = entry.size;
item.SubItems.Add(subSize);
 
this.listView_Drives.Items.Add(item);
}
}
 
this.listView_Drives.EndUpdate();
}
void driveDetector_DeviceArrived(object sender, DriveDetectorEventArgs e)
{
// Event call for when a new drive is detected by DriveDetector
 
// Disable e.HookQueryRemoved to prevent a hook being attached to the volume
//e.HookQueryRemove = true;
 
// Creates and populates a new DriveEntry
DriveEntry newEntry = new DriveEntry();
newEntry.time = DateTime.Now;
newEntry.drive = e.Drive;
 
DriveInfo tempDrive = null;
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo drive in allDrives)
{
if (drive.IsReady)
{
if (drive.Name == newEntry.drive)
{
tempDrive = drive;
break;
}
}
}
newEntry.label = tempDrive.VolumeLabel;
newEntry.size = (tempDrive.TotalSize / 1073741824).ToString() + " GB";
 
// Pops up a dialog asking for a new label unless the partition is a system partition
if (newEntry.label != "System Reserved")
{
LabelPrompt label = new LabelPrompt();
label.ShowDialog();
newEntry.owner = label.driveLabel;
}
else
newEntry.owner = "System Reserved";
 
// Adds the new DriveEntry into driveList
driveList.Add(newEntry);
 
using (StreamWriter sw = File.AppendText(logLocation))
{
sw.WriteLine("Drive Attached -- [" + newEntry.time.ToString() + "]\t\"" + newEntry.owner + "\"\t" + newEntry.drive + "\t\"" + newEntry.label + "\"\t" + newEntry.size);
}
 
paintDriveListbox();
}
//void driveDetector_DeviceRemoved(object sender, DriveDetectorEventArgs e)
//{
// //DriveEntry entryToRemove = new DriveEntry();
// foreach (DriveEntry entry in driveList)
// {
// if (e.Drive == entry.drive)
// {
// //entryToRemove = entry;
// driveList.Remove(entry);
// break;
// }
// }
// //driveList.Remove(entryToRemove);
 
// using (StreamWriter sw = File.AppendText(logLocation))
// {
// //sw.WriteLine("Drive Removed -- [" + entryToRemove.time.ToString() + "]\t" + entryToRemove.drive + "\t\"" + entryToRemove.label + "\"\t" + entryToRemove.size);
// }
 
// paintDriveListbox();
//}
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.exe
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.pdb
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.vshost.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.vshost.exe
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Debug/DriveLogger.vshost.exe.manifest
0,0 → 1,11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Release/DriveLogger.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Release/DriveLogger.exe
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Release/DriveLogger.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/bin/Release/DriveLogger.pdb
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.exe
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.pdb
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.AboutBox.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.AboutBox.resources
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.csproj.FileListAbsolute.txt
0,0 → 1,31
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\bin\Debug\DriveLogger.exe
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\bin\Debug\DriveLogger.pdb
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\ResolveAssemblyReference.cache
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.MainForm.resources
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.Properties.Resources.resources
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\GenerateResource.read.1.tlog
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\GenerateResource.write.1.tlog
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.exe
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.pdb
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.AboutBox.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.exe
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.pdb
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Debug\DriveLogger.exe
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Debug\DriveLogger.pdb
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\ResolveAssemblyReference.cache
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.AboutBox.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.MainForm.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.Properties.Resources.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\GenerateResource.read.1.tlog
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\GenerateResource.write.1.tlog
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.exe
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.pdb
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Debug\DriveLogger.exe
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Debug\DriveLogger.pdb
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\ResolveAssemblyReference.cache
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.AboutBox.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.LabelPrompt.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.MainForm.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\DriveLogger.Properties.Resources.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\GenerateResource.read.1.tlog
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Debug\GenerateResource.write.1.tlog
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/GenerateResource.read.1.tlog
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/GenerateResource.read.1.tlog
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/GenerateResource.write.1.tlog
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/GenerateResource.write.1.tlog
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.MainForm.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.MainForm.resources
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.Properties.Resources.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Debug/DriveLogger.Properties.Resources.resources
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.exe
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.pdb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.pdb
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/GenerateResource.read.1.tlog
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/GenerateResource.read.1.tlog
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.AboutBox.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.AboutBox.resources
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.csproj.FileListAbsolute.txt
0,0 → 1,31
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\bin\Release\DriveLogger.exe
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\bin\Release\DriveLogger.pdb
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\ResolveAssemblyReference.cache
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.AboutBox.resources
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.MainForm.resources
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.Properties.Resources.resources
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\GenerateResource.read.1.tlog
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\GenerateResource.write.1.tlog
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.exe
c:\users\kevin\documents\visual studio 2010\Projects\DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.pdb
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Release\DriveLogger.exe
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Release\DriveLogger.pdb
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\ResolveAssemblyReference.cache
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.AboutBox.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.MainForm.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.Properties.Resources.resources
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\GenerateResource.read.1.tlog
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\GenerateResource.write.1.tlog
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.exe
C:\Users\Administrator\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.pdb
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Release\DriveLogger.exe
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\bin\Release\DriveLogger.pdb
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\ResolveAssemblyReference.cache
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.AboutBox.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.LabelPrompt.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.MainForm.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.Properties.Resources.resources
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\GenerateResource.read.1.tlog
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\GenerateResource.write.1.tlog
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.exe
C:\Users\Kevin\Documents\Visual Studio 2010\Projects\SWAT DriveLogger\DriveLogger\obj\x86\Release\DriveLogger.pdb
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/GenerateResource.write.1.tlog
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/GenerateResource.write.1.tlog
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.MainForm.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.MainForm.resources
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.Properties.Resources.resources
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/obj/x86/Release/DriveLogger.Properties.Resources.resources
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/AboutBox.resx
0,0 → 1,366
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="logoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAIIAAAEECAYAAADkneyMAAAABGdBTUEAAOD8YVAtlgAAAvdpQ0NQUGhv
dG9zaG9wIElDQyBwcm9maWxlAAA4y2NgYJ7g6OLkyiTAwFBQVFLkHuQYGREZpcB+noGNgZkBDBKTiwsc
AwJ8QOy8/LxUBlTAyMDw7RqIZGC4rAsyi4E0wJoMtBhIHwBio5TU4mQg/QWI08tLCoDijDFAtkhSNphd
AGJnhwQ5A9ktDAxMPCWpFSC9DM75BZVFmekZJQqGlpaWCo4p+UmpCsGVxSWpucUKnnnJ+UUF+UWJJakp
QLVQO0CA1yW/RME9MTNPwchAlYHKABSOEBYifBBiCJBcWlQGD0oGBgEGBQYDBgeGAIZEhnqGBQxHGd4w
ijO6MJYyrmC8xyTGFMQ0gekCszBzJPNC5jcsliwdLLdY9VhbWe+xWbJNY/vGHs6+m0OJo4vjC2ci5wUu
R64t3JrcC3ikeKbyCvFO4hPmm8Yvw79YQEdgh6Cr4BWhVKEfwr0iKiJ7RcNFv4hNEjcSvyJRISkneUwq
X1pa+oRMmay67C25PnkX+T8KWxULlfSU3iqvVSlQNVH9qXZQvUsjVFNJ84PWAe1JOqm6VnqCeq/0jxgs
MKw1ijG2NZE3ZTZ9aXbBfKfFEssJVnXWuTZxtoF2rvbWDsaOOk5qzkouCq7ybgruyh7qnrpeJt42Pu6+
wX4J/vkB9YETg5YG7wq5GPoynClCLtIqKiK6ImZm7J64BwlsibpJYckNKWtSb6ZzZFhkZmbNzb6Yy55n
n19RsKnwXbF2SVbpqrI3FfqVJVW7ahhrveqm1j9s1GuqaT7bKtdW2H60U7qrqPt0r2pfY//diTaTZk/+
OzV+2uEZGjP7Z32fkzD39HzzBUsXiSxuXfJtWebyeytDVp1e47J233rLDds2mWzestVk2/YdVjv373bd
c3Zf2P4HB3MO/TzSfkz8+IqT1qfOnUk+++v8pIval45eSbz67/qcmza37t6pv6d8/8TDvMdiT/Y/y3wh
8vLg6/y38u8ufGj6ZPr51dcF38N/Cvw69af1n+P//wANAA8013ReGAAAAAlwSFlzAAA45QAAOOUBPhHE
IQAANQ1JREFUeF7t3VePNEfVB3B/Bb4DQkJwbQkhhC+MxAUW2GCTjbGNeRzAgI0DmJxNzjnnnHMwyeSc
c44m58y8/BqO33I9Hap7umerd7ek1e7OdFd31fnXyafqmGOOOWZz+HM4B//BwOEkHM5Bg4H/AuGwHcwZ
SBbBIRAOJgT+O+pDIBxk6idjPwTCIRAOOcIhBv5/Bg48R/jnP/+5+c1vfrP51re+tfn4xz+++cAHPrD5
2Mc+tvnmN7+5+d3vfndgsHJggPCvf/1r89WvfnXzvve9b/OqV71q87KXvWzzrGc9a/PYxz5288xnPnPz
5je/efPWt761+c7Pc5/73M3DHvawzSMe8YjNs5/97M2Xv/zlDdDs17bvgfDLX/6yIeyjH/3ozdOe9rTN
u9/97s2nP/3pzXe/+93NT37yk81f//rXXtq6/ytf+UoDnMc//vGb173udZsf//jH+w4P+xYIv//975sV
/8AHPrBZ6X/4wx+2Jt5f/vKXzWc+85mGQzzhCU/YXHnllVv3WUsH+xIIb3nLWzb3v//9N2984xs3//73
vxeZ6+9///ubF77whQ2n+eEPf7jIM3bZ6b4Cwne+853Nfe9734YTzMEBSghBqXzqU5+6+dCHPlRyebXX
7BsgWP2XXnrp5nOf+9zOJ5si+vznP3/znOc8Z7UK5b4AAplN8//HP/6xcxCkD3zb297WWBlDCuievmTH
w1cPhBe96EXNaqylvfe9723AsDZTc9VA4BN4+tOfXgsGrn6PN7zhDZvnPe951b1X3wutFgi8f4985COr
XXn8DmsyL1cJhG9/+9ubCy64oGoXMH2Fr4Els4a2OiCQvfe5z32a2EDt7Wc/+1kjuv72t7/V/qrry0d4
xzvesSr5y53NLV17WxVH4CR68IMfvDrzjGmLO9TcVgWEV7ziFRvu47U1kcuXvvSlVb/2aoCAG1x++eWr
kLc5xcU7+DuuuuqqasGwGiCIIPpZqn3ve99rwtQPfehDm59XvvKVm7///e+zPQ5XwNFqbasAAkuBbiC0
vESTlCJYJXCE8/jhrBK7kL00R/vzn/+8eeITn7gRyq6xrQIInEdLeere8573NCKnLU7xwQ9+cPOkJz1p
NrrRbz7ykY/M1t+cHa0CCBwzS8T8//SnPzU+iT47n/dyrlXMESZCWWOrHggULNHFJdqHP/zhQU4j8eTn
P//5LI8XrmZKAmBtrXogvP/9799g39s0Wvuvf/3ro5JVAEzmcldz32Me85jNH//4x20ef4175U184Qtf
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
</value>
</data>
</root>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/DriveLogger.csproj
0,0 → 1,151
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{024728DC-A9B5-4A78-A4CD-8EF5B211CE3D}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DriveLogger</RootNamespace>
<AssemblyName>DriveLogger</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Terminal.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AboutBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="AboutBox.designer.cs">
<DependentUpon>AboutBox.cs</DependentUpon>
</Compile>
<Compile Include="DriveDetector.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LabelPrompt.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LabelPrompt.Designer.cs">
<DependentUpon>LabelPrompt.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="AboutBox.resx">
<DependentUpon>AboutBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="LabelPrompt.resx">
<DependentUpon>LabelPrompt.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<Content Include="Terminal.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4 Client Profile %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/LabelPrompt.cs
0,0 → 1,26
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;
 
namespace DriveLogger
{
public partial class LabelPrompt : Form
{
public string driveLabel = "";
public LabelPrompt()
{
InitializeComponent();
}
 
private void btn_Prompt_Click(object sender, EventArgs e)
{
driveLabel = this.txt_Prompt.Text;
this.Close();
}
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/LabelPrompt.resx
0,0 → 1,120
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/MainForm.Designer.cs
0,0 → 1,71
namespace DriveLogger
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
 
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
 
#region Windows Form Designer generated code
 
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.listView_Drives = new System.Windows.Forms.ListView();
this.SuspendLayout();
//
// listView_Drives
//
this.listView_Drives.AutoArrange = false;
this.listView_Drives.Dock = System.Windows.Forms.DockStyle.Fill;
this.listView_Drives.FullRowSelect = true;
this.listView_Drives.GridLines = true;
this.listView_Drives.LabelEdit = true;
this.listView_Drives.Location = new System.Drawing.Point(0, 0);
this.listView_Drives.MultiSelect = false;
this.listView_Drives.Name = "listView_Drives";
this.listView_Drives.Size = new System.Drawing.Size(488, 111);
this.listView_Drives.TabIndex = 0;
this.listView_Drives.UseCompatibleStateImageBehavior = false;
this.listView_Drives.View = System.Windows.Forms.View.Details;
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(488, 111);
this.ControlBox = false;
this.Controls.Add(this.listView_Drives);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "SWAT DriveLogger";
this.ResumeLayout(false);
 
}
 
#endregion
 
private System.Windows.Forms.ListView listView_Drives;
}
}
 
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/AboutBox.Designer.cs
0,0 → 1,186
namespace DriveLogger
{
partial class AboutBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
 
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
 
#region Windows Form Designer generated code
 
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox));
this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
this.logoPictureBox = new System.Windows.Forms.PictureBox();
this.labelProductName = new System.Windows.Forms.Label();
this.labelVersion = new System.Windows.Forms.Label();
this.labelCopyright = new System.Windows.Forms.Label();
this.labelCompanyName = new System.Windows.Forms.Label();
this.textBoxDescription = new System.Windows.Forms.TextBox();
this.okButton = new System.Windows.Forms.Button();
this.tableLayoutPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit();
this.SuspendLayout();
//
// tableLayoutPanel
//
this.tableLayoutPanel.ColumnCount = 2;
this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F));
this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F));
this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0);
this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0);
this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1);
this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2);
this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3);
this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4);
this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5);
this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9);
this.tableLayoutPanel.Name = "tableLayoutPanel";
this.tableLayoutPanel.RowCount = 6;
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F));
this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265);
this.tableLayoutPanel.TabIndex = 0;
//
// logoPictureBox
//
this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image")));
this.logoPictureBox.Location = new System.Drawing.Point(3, 3);
this.logoPictureBox.Name = "logoPictureBox";
this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6);
this.logoPictureBox.Size = new System.Drawing.Size(131, 259);
this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.logoPictureBox.TabIndex = 12;
this.logoPictureBox.TabStop = false;
//
// labelProductName
//
this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill;
this.labelProductName.Location = new System.Drawing.Point(143, 0);
this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17);
this.labelProductName.Name = "labelProductName";
this.labelProductName.Size = new System.Drawing.Size(271, 17);
this.labelProductName.TabIndex = 19;
this.labelProductName.Text = "Product Name";
this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// labelVersion
//
this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill;
this.labelVersion.Location = new System.Drawing.Point(143, 26);
this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17);
this.labelVersion.Name = "labelVersion";
this.labelVersion.Size = new System.Drawing.Size(271, 17);
this.labelVersion.TabIndex = 0;
this.labelVersion.Text = "Version";
this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// labelCopyright
//
this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill;
this.labelCopyright.Location = new System.Drawing.Point(143, 52);
this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17);
this.labelCopyright.Name = "labelCopyright";
this.labelCopyright.Size = new System.Drawing.Size(271, 17);
this.labelCopyright.TabIndex = 21;
this.labelCopyright.Text = "Copyright";
this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// labelCompanyName
//
this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill;
this.labelCompanyName.Location = new System.Drawing.Point(143, 78);
this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0);
this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17);
this.labelCompanyName.Name = "labelCompanyName";
this.labelCompanyName.Size = new System.Drawing.Size(271, 17);
this.labelCompanyName.TabIndex = 22;
this.labelCompanyName.Text = "Company Name";
this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// textBoxDescription
//
this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill;
this.textBoxDescription.Location = new System.Drawing.Point(143, 107);
this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3);
this.textBoxDescription.Multiline = true;
this.textBoxDescription.Name = "textBoxDescription";
this.textBoxDescription.ReadOnly = true;
this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.textBoxDescription.Size = new System.Drawing.Size(271, 126);
this.textBoxDescription.TabIndex = 23;
this.textBoxDescription.TabStop = false;
this.textBoxDescription.Text = "Description";
//
// okButton
//
this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.okButton.Location = new System.Drawing.Point(339, 239);
this.okButton.Name = "okButton";
this.okButton.Size = new System.Drawing.Size(75, 23);
this.okButton.TabIndex = 24;
this.okButton.Text = "&OK";
//
// AboutBox
//
this.AcceptButton = this.okButton;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(435, 283);
this.Controls.Add(this.tableLayoutPanel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "AboutBox";
this.Padding = new System.Windows.Forms.Padding(9);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "AboutBox";
this.tableLayoutPanel.ResumeLayout(false);
this.tableLayoutPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit();
this.ResumeLayout(false);
 
}
 
#endregion
 
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel;
private System.Windows.Forms.PictureBox logoPictureBox;
private System.Windows.Forms.Label labelProductName;
private System.Windows.Forms.Label labelVersion;
private System.Windows.Forms.Label labelCopyright;
private System.Windows.Forms.Label labelCompanyName;
private System.Windows.Forms.TextBox textBoxDescription;
private System.Windows.Forms.Button okButton;
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/DriveDetector.cs
0,0 → 1,815
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms; // required for Message
using System.Runtime.InteropServices; // required for Marshal
using System.IO;
using Microsoft.Win32.SafeHandles;
// DriveDetector - rev. 1, Oct. 31 2007
 
namespace Dolinay
{
/// <summary>
/// Hidden Form which we use to receive Windows messages about flash drives
/// </summary>
internal class DetectorForm : Form
{
private Label label1;
private DriveDetector mDetector = null;
 
/// <summary>
/// Set up the hidden form.
/// </summary>
/// <param name="detector">DriveDetector object which will receive notification about USB drives, see WndProc</param>
public DetectorForm(DriveDetector detector)
{
mDetector = detector;
this.MinimizeBox = false;
this.MaximizeBox = false;
this.ShowInTaskbar = false;
this.ShowIcon = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Load += new System.EventHandler(this.Load_Form);
this.Activated += new EventHandler(this.Form_Activated);
}
 
private void Load_Form(object sender, EventArgs e)
{
// We don't really need this, just to display the label in designer ...
InitializeComponent();
 
// Create really small form, invisible anyway.
this.Size = new System.Drawing.Size(5, 5);
}
 
private void Form_Activated(object sender, EventArgs e)
{
this.Visible = false;
}
 
/// <summary>
/// This function receives all the windows messages for this window (form).
/// We call the DriveDetector from here so that is can pick up the messages about
/// drives arrived and removed.
/// </summary>
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
 
if (mDetector != null)
{
mDetector.WndProc(ref m);
}
}
 
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(13, 30);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(314, 13);
this.label1.TabIndex = 0;
this.label1.Text = "This is invisible form. To see DriveDetector code click View Code";
//
// DetectorForm
//
this.ClientSize = new System.Drawing.Size(360, 80);
this.Controls.Add(this.label1);
this.Name = "DetectorForm";
this.ResumeLayout(false);
this.PerformLayout();
 
}
} // class DetectorForm
 
 
// Delegate for event handler to handle the device events
public delegate void DriveDetectorEventHandler(Object sender, DriveDetectorEventArgs e);
/// <summary>
/// Our class for passing in custom arguments to our event handlers
///
/// </summary>
public class DriveDetectorEventArgs : EventArgs
{
 
 
public DriveDetectorEventArgs()
{
Cancel = false;
Drive = "";
HookQueryRemove = false;
}
 
/// <summary>
/// Get/Set the value indicating that the event should be cancelled
/// Only in QueryRemove handler.
/// </summary>
public bool Cancel;
 
/// <summary>
/// Drive letter for the device which caused this event
/// </summary>
public string Drive;
 
/// <summary>
/// Set to true in your DeviceArrived event handler if you wish to receive the
/// QueryRemove event for this drive.
/// </summary>
public bool HookQueryRemove;
 
}
 
/// <summary>
/// Detects insertion or removal of removable drives.
/// Use it in 1 or 2 steps:
/// 1) Create instance of this class in your project and add handlers for the
/// DeviceArrived, DeviceRemoved and QueryRemove events.
/// AND (if you do not want drive detector to creaate a hidden form))
/// 2) Override WndProc in your form and call DriveDetector's WndProc from there.
/// If you do not want to do step 2, just use the DriveDetector constructor without arguments and
/// it will create its own invisible form to receive messages from Windows.
/// </summary>
class DriveDetector : IDisposable
{
/// <summary>
/// Events signalized to the client app.
/// Add handlers for these events in your form to be notified of removable device events
/// </summary>
public event DriveDetectorEventHandler DeviceArrived;
public event DriveDetectorEventHandler DeviceRemoved;
public event DriveDetectorEventHandler QueryRemove;
 
/// <summary>
/// The easiest way to use DriveDetector.
/// It will create hidden form for processing Windows messages about USB drives
/// You do not need to override WndProc in your form.
/// </summary>
public DriveDetector()
{
DetectorForm frm = new DetectorForm(this);
frm.Show(); // will be hidden immediatelly
Init(frm, null);
}
 
/// <summary>
/// Alternate constructor.
/// Pass in your Form and DriveDetector will not create hidden form.
/// </summary>
/// <param name="control">object which will receive Windows messages.
/// Pass "this" as this argument from your form class.</param>
public DriveDetector(Control control)
{
Init(control, null);
}
 
/// <summary>
/// Consructs DriveDetector object setting also path to file which should be opened
/// when registering for query remove.
/// </summary>
///<param name="control">object which will receive Windows messages.
/// Pass "this" as this argument from your form class.</param>
/// <param name="FileToOpen">Optional. Name of a file on the removable drive which should be opened.
/// If null, root directory of the drive will be opened. Opening a file is needed for us
/// to be able to register for the query remove message. TIP: For files use relative path without drive letter.
/// e.g. "SomeFolder\file_on_flash.txt"</param>
public DriveDetector(Control control, string FileToOpen)
{
Init(control, FileToOpen);
}
 
/// <summary>
/// init the DriveDetector object
/// </summary>
/// <param name="intPtr"></param>
private void Init(Control control, string fileToOpen)
{
mFileToOpen = fileToOpen;
mFileOnFlash = null;
mDeviceNotifyHandle = IntPtr.Zero;
mRecipientHandle = control.Handle;
mDirHandle = IntPtr.Zero; // handle to the root directory of the flash drive which we open
mCurrentDrive = "";
}
 
/// <summary>
/// Gets the value indicating whether the query remove event will be fired.
/// </summary>
public bool IsQueryHooked
{
get
{
if (mDeviceNotifyHandle == IntPtr.Zero)
return false;
else
return true;
}
}
 
/// <summary>
/// Gets letter of drive which is currently hooked. Empty string if none.
/// See also IsQueryHooked.
/// </summary>
public string HookedDrive
{
get
{
return mCurrentDrive;
}
}
 
/// <summary>
/// Gets the file stream for file which this class opened on a drive to be notified
/// about it's removal.
/// This will be null unless you specified a file to open (DriveDetector opens root directory of the flash drive)
/// </summary>
public FileStream OpenedFile
{
get
{
return mFileOnFlash;
}
}
 
/// <summary>
/// Hooks specified drive to receive a message when it is being removed.
/// This can be achieved also by setting e.HookQueryRemove to true in your
/// DeviceArrived event handler.
/// By default DriveDetector will open the root directory of the flash drive to obtain notification handle
/// from Windows (to learn when the drive is about to be removed).
/// </summary>
/// <param name="fileOnDrive">Drive letter or relative path to a file on the drive which should be
/// used to get a handle - required for registering to receive query remove messages.
/// If only drive letter is specified (e.g. "D:\\", root directory of the drive will be opened.</param>
/// <returns>true if hooked ok, false otherwise</returns>
public bool EnableQueryRemove(string fileOnDrive)
{
if (fileOnDrive == null || fileOnDrive.Length == 0)
throw new ArgumentException("Drive path must be supplied to register for Query remove.");
if ( fileOnDrive.Length == 2 && fileOnDrive[1] == ':' )
fileOnDrive += '\\'; // append "\\" if only drive letter with ":" was passed in.
 
if (mDeviceNotifyHandle != IntPtr.Zero)
{
// Unregister first...
RegisterForDeviceChange(false, null);
}
 
if (Path.GetFileName(fileOnDrive).Length == 0 ||!File.Exists(fileOnDrive))
mFileToOpen = null; // use root directory...
else
mFileToOpen = fileOnDrive;
 
RegisterQuery(Path.GetPathRoot(fileOnDrive));
if (mDeviceNotifyHandle == IntPtr.Zero)
return false; // failed to register
 
return true;
}
 
/// <summary>
/// Unhooks any currently hooked drive so that the query remove
/// message is not generated for it.
/// </summary>
public void DisableQueryRemove()
{
if (mDeviceNotifyHandle != IntPtr.Zero)
{
RegisterForDeviceChange(false, null);
}
}
 
 
/// <summary>
/// Unregister and close the file we may have opened on the removable drive.
/// Garbage collector will call this method.
/// </summary>
public void Dispose()
{
RegisterForDeviceChange(false, null);
}
 
 
#region WindowProc
/// <summary>
/// Message handler which must be called from client form.
/// Processes Windows messages and calls event handlers.
/// </summary>
/// <param name="m"></param>
public void WndProc(ref Message m)
{
int devType;
char c;
 
if (m.Msg == WM_DEVICECHANGE)
{
// WM_DEVICECHANGE can have several meanings depending on the WParam value...
switch (m.WParam.ToInt32())
{
 
//
// New device has just arrived
//
case DBT_DEVICEARRIVAL:
 
devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME vol;
vol = (DEV_BROADCAST_VOLUME)
Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
 
// Get the drive letter
c = DriveMaskToLetter(vol.dbcv_unitmask);
 
 
//
// Call the client event handler
//
// We should create copy of the event before testing it and
// calling the delegate - if any
DriveDetectorEventHandler tempDeviceArrived = DeviceArrived;
if ( tempDeviceArrived != null )
{
DriveDetectorEventArgs e = new DriveDetectorEventArgs();
e.Drive = c + ":\\";
tempDeviceArrived(this, e);
// Register for query remove if requested
if (e.HookQueryRemove)
{
// If something is already hooked, unhook it now
if (mDeviceNotifyHandle != IntPtr.Zero)
{
RegisterForDeviceChange(false, null);
}
RegisterQuery(c + ":\\");
}
} // if has event handler
 
}
break;
 
 
 
//
// Device is about to be removed
// Any application can cancel the removal
//
case DBT_DEVICEQUERYREMOVE:
 
devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == DBT_DEVTYP_HANDLE)
{
// TODO: we could get the handle for which this message is sent
// from vol.dbch_handle and compare it against a list of handles for
// which we have registered the query remove message (?)
//DEV_BROADCAST_HANDLE vol;
//vol = (DEV_BROADCAST_HANDLE)
// Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_HANDLE));
// if ( vol.dbch_handle ....
//
// Call the event handler in client
//
DriveDetectorEventHandler tempQuery = QueryRemove;
if (tempQuery != null)
{
DriveDetectorEventArgs e = new DriveDetectorEventArgs();
e.Drive = mCurrentDrive; // drive which is hooked
tempQuery(this, e);
 
// If the client wants to cancel, let Windows know
if (e.Cancel)
{
m.Result = (IntPtr)BROADCAST_QUERY_DENY;
}
else
{
// Change 28.10.2007: Unregister the notification, this will
// close the handle to file or root directory also.
// We have to close it anyway to allow the removal so
// even if some other app cancels the removal we would not know about it...
RegisterForDeviceChange(false, null); // will also close the mFileOnFlash
}
 
}
}
break;
 
 
//
// Device has been removed
//
case DBT_DEVICEREMOVECOMPLETE:
 
devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == DBT_DEVTYP_VOLUME)
{
devType = Marshal.ReadInt32(m.LParam, 4);
if (devType == DBT_DEVTYP_VOLUME)
{
DEV_BROADCAST_VOLUME vol;
vol = (DEV_BROADCAST_VOLUME)
Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
c = DriveMaskToLetter(vol.dbcv_unitmask);
 
//
// Call the client event handler
//
DriveDetectorEventHandler tempDeviceRemoved = DeviceRemoved;
if (tempDeviceRemoved != null)
{
DriveDetectorEventArgs e = new DriveDetectorEventArgs();
e.Drive = c + ":\\";
tempDeviceRemoved(this, e);
}
 
// TODO: we could unregister the notify handle here if we knew it is the
// right drive which has been just removed
//RegisterForDeviceChange(false, null);
}
}
break;
}
 
}
 
}
#endregion
 
 
 
#region Private Area
 
/// <summary>
/// New: 28.10.2007 - handle to root directory of flash drive which is opened
/// for device notification
/// </summary>
private IntPtr mDirHandle = IntPtr.Zero;
 
/// <summary>
/// Class which contains also handle to the file opened on the flash drive
/// </summary>
private FileStream mFileOnFlash = null;
 
/// <summary>
/// Name of the file to try to open on the removable drive for query remove registration
/// </summary>
private string mFileToOpen;
 
/// <summary>
/// Handle to file which we keep opened on the drive if query remove message is required by the client
/// </summary>
private IntPtr mDeviceNotifyHandle;
 
/// <summary>
/// Handle of the window which receives messages from Windows. This will be a form.
/// </summary>
private IntPtr mRecipientHandle;
 
/// <summary>
/// Drive which is currently hooked for query remove
/// </summary>
private string mCurrentDrive;
 
 
// Win32 constants
private const int DBT_DEVTYP_DEVICEINTERFACE = 5;
private const int DBT_DEVTYP_HANDLE = 6;
private const int BROADCAST_QUERY_DENY = 0x424D5144;
private const int WM_DEVICECHANGE = 0x0219;
private const int DBT_DEVICEARRIVAL = 0x8000; // system detected a new device
private const int DBT_DEVICEQUERYREMOVE = 0x8001; // Preparing to remove (any program can disable the removal)
private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; // removed
private const int DBT_DEVTYP_VOLUME = 0x00000002; // drive type is logical volume
 
/// <summary>
/// Registers for receiving the query remove message for a given drive.
/// We need to open a handle on that drive and register with this handle.
/// Client can specify this file in mFileToOpen or we will open root directory of the drive
/// </summary>
/// <param name="drive">drive for which to register. </param>
private void RegisterQuery(string drive)
{
bool register = true;
 
if (mFileToOpen == null)
{
// Change 28.10.2007 - Open the root directory if no file specified - leave mFileToOpen null
// If client gave us no file, let's pick one on the drive...
//mFileToOpen = GetAnyFile(drive);
//if (mFileToOpen.Length == 0)
// return; // no file found on the flash drive
}
else
{
// Make sure the path in mFileToOpen contains valid drive
// If there is a drive letter in the path, it may be different from the actual
// letter assigned to the drive now. We will cut it off and merge the actual drive
// with the rest of the path.
if (mFileToOpen.Contains(":"))
{
string tmp = mFileToOpen.Substring(3);
string root = Path.GetPathRoot(drive);
mFileToOpen = Path.Combine(root, tmp);
}
else
mFileToOpen = Path.Combine(drive, mFileToOpen);
}
 
 
try
{
//mFileOnFlash = new FileStream(mFileToOpen, FileMode.Open);
// Change 28.10.2007 - Open the root directory
if (mFileToOpen == null) // open root directory
mFileOnFlash = null;
else
mFileOnFlash = new FileStream(mFileToOpen, FileMode.Open);
}
catch (Exception)
{
// just do not register if the file could not be opened
register = false;
}
 
 
if (register)
{
//RegisterForDeviceChange(true, mFileOnFlash.SafeFileHandle);
//mCurrentDrive = drive;
// Change 28.10.2007 - Open the root directory
if (mFileOnFlash == null)
RegisterForDeviceChange(drive);
else
// old version
RegisterForDeviceChange(true, mFileOnFlash.SafeFileHandle);
 
mCurrentDrive = drive;
}
 
 
}
 
 
/// <summary>
/// New version which gets the handle automatically for specified directory
/// Only for registering! Unregister with the old version of this function...
/// </summary>
/// <param name="register"></param>
/// <param name="dirPath">e.g. C:\\dir</param>
private void RegisterForDeviceChange(string dirPath)
{
IntPtr handle = Native.OpenDirectory(dirPath);
if (handle == IntPtr.Zero)
{
mDeviceNotifyHandle = IntPtr.Zero;
return;
}
else
mDirHandle = handle; // save handle for closing it when unregistering
 
// Register for handle
DEV_BROADCAST_HANDLE data = new DEV_BROADCAST_HANDLE();
data.dbch_devicetype = DBT_DEVTYP_HANDLE;
data.dbch_reserved = 0;
data.dbch_nameoffset = 0;
//data.dbch_data = null;
//data.dbch_eventguid = 0;
data.dbch_handle = handle;
data.dbch_hdevnotify = (IntPtr)0;
int size = Marshal.SizeOf(data);
data.dbch_size = size;
IntPtr buffer = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(data, buffer, true);
 
mDeviceNotifyHandle = Native.RegisterDeviceNotification(mRecipientHandle, buffer, 0);
 
}
 
/// <summary>
/// Registers to be notified when the volume is about to be removed
/// This is requierd if you want to get the QUERY REMOVE messages
/// </summary>
/// <param name="register">true to register, false to unregister</param>
/// <param name="fileHandle">handle of a file opened on the removable drive</param>
private void RegisterForDeviceChange(bool register, SafeFileHandle fileHandle)
{
if (register)
{
// Register for handle
DEV_BROADCAST_HANDLE data = new DEV_BROADCAST_HANDLE();
data.dbch_devicetype = DBT_DEVTYP_HANDLE;
data.dbch_reserved = 0;
data.dbch_nameoffset = 0;
//data.dbch_data = null;
//data.dbch_eventguid = 0;
data.dbch_handle = fileHandle.DangerousGetHandle(); //Marshal. fileHandle;
data.dbch_hdevnotify = (IntPtr)0;
int size = Marshal.SizeOf(data);
data.dbch_size = size;
IntPtr buffer = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(data, buffer, true);
 
mDeviceNotifyHandle = Native.RegisterDeviceNotification(mRecipientHandle, buffer, 0);
}
else
{
// close the directory handle
if (mDirHandle != IntPtr.Zero)
{
Native.CloseDirectoryHandle(mDirHandle);
// string er = Marshal.GetLastWin32Error().ToString();
}
 
// unregister
if (mDeviceNotifyHandle != IntPtr.Zero)
{
Native.UnregisterDeviceNotification(mDeviceNotifyHandle);
}
 
mDeviceNotifyHandle = IntPtr.Zero;
mDirHandle = IntPtr.Zero;
mCurrentDrive = "";
if (mFileOnFlash != null)
{
mFileOnFlash.Close();
mFileOnFlash = null;
}
}
 
}
 
/// <summary>
/// Gets drive letter from a bit mask where bit 0 = A, bit 1 = B etc.
/// There can actually be more than one drive in the mask but we
/// just use the last one in this case.
/// </summary>
/// <param name="mask"></param>
/// <returns></returns>
private static char DriveMaskToLetter(int mask)
{
char letter;
string drives = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 1 = A
// 2 = B
// 4 = C...
int cnt = 0;
int pom = mask / 2;
while (pom != 0)
{
// while there is any bit set in the mask
// shift it to the righ...
pom = pom / 2;
cnt++;
}
 
if (cnt < drives.Length)
letter = drives[cnt];
else
letter = '?';
 
return letter;
}
 
/* 28.10.2007 - no longer needed
/// <summary>
/// Searches for any file in a given path and returns its full path
/// </summary>
/// <param name="drive">drive to search</param>
/// <returns>path of the file or empty string</returns>
private string GetAnyFile(string drive)
{
string file = "";
// First try files in the root
string[] files = Directory.GetFiles(drive);
if (files.Length == 0)
{
// if no file in the root, search whole drive
files = Directory.GetFiles(drive, "*.*", SearchOption.AllDirectories);
}
if (files.Length > 0)
file = files[0]; // get the first file
 
// return empty string if no file found
return file;
}*/
#endregion
 
 
#region Native Win32 API
/// <summary>
/// WinAPI functions
/// </summary>
private class Native
{
// HDEVNOTIFY RegisterDeviceNotification(HANDLE hRecipient,LPVOID NotificationFilter,DWORD Flags);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, IntPtr NotificationFilter, uint Flags);
 
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern uint UnregisterDeviceNotification(IntPtr hHandle);
 
//
// CreateFile - MSDN
const uint GENERIC_READ = 0x80000000;
const uint OPEN_EXISTING = 3;
const uint FILE_SHARE_READ = 0x00000001;
const uint FILE_SHARE_WRITE = 0x00000002;
const uint FILE_ATTRIBUTE_NORMAL = 128;
const uint FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
static readonly IntPtr INVALID_HANDLE_VALUE = new IntPtr(-1);
 
 
// should be "static extern unsafe"
[DllImport("kernel32", SetLastError = true)]
static extern IntPtr CreateFile(
string FileName, // file name
uint DesiredAccess, // access mode
uint ShareMode, // share mode
uint SecurityAttributes, // Security Attributes
uint CreationDisposition, // how to create
uint FlagsAndAttributes, // file attributes
int hTemplateFile // handle to template file
);
 
 
[DllImport("kernel32", SetLastError = true)]
static extern bool CloseHandle(
IntPtr hObject // handle to object
);
 
/// <summary>
/// Opens a directory, returns it's handle or zero.
/// </summary>
/// <param name="dirPath">path to the directory, e.g. "C:\\dir"</param>
/// <returns>handle to the directory. Close it with CloseHandle().</returns>
static public IntPtr OpenDirectory(string dirPath)
{
// open the existing file for reading
IntPtr handle = CreateFile(
dirPath,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS | FILE_ATTRIBUTE_NORMAL,
0);
 
if ( handle == INVALID_HANDLE_VALUE)
return IntPtr.Zero;
else
return handle;
}
 
 
public static bool CloseDirectoryHandle(IntPtr handle)
{
return CloseHandle(handle);
}
}
 
// Structure with information for RegisterDeviceNotification.
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_HANDLE
{
public int dbch_size;
public int dbch_devicetype;
public int dbch_reserved;
public IntPtr dbch_handle;
public IntPtr dbch_hdevnotify;
public Guid dbch_eventguid;
public long dbch_nameoffset;
//public byte[] dbch_data[1]; // = new byte[1];
public byte dbch_data;
public byte dbch_data1;
}
 
// Struct for parameters of the WM_DEVICECHANGE message
[StructLayout(LayoutKind.Sequential)]
public struct DEV_BROADCAST_VOLUME
{
public int dbcv_size;
public int dbcv_devicetype;
public int dbcv_reserved;
public int dbcv_unitmask;
}
#endregion
 
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/DriveLogger.csproj.user
0,0 → 1,13
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>publish\</PublishUrlHistory>
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>en-US</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/MainForm.resx
0,0 → 1,142
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAAAAEAIACxAwAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAAlw
SFlzAAALEwAACxMBAJqcGAAAA2NJREFUWIXFl81vlFUUxn/nY8pMhwmJED+JG4KyZWX8IKLr6sTGrX+B
iU0TXKghUROMUUdrS9zq0oUbYGEFTIhAukcBbQhpNX6EVCLRdgqd9x4X7ztDO1OMdDrlJDezuHfuee7z
nPPc+0pEcC9Dil//dOqzr1CtRwRE96L2stQ9tYFkApGOjb326stAC8AbE1Mnfpi9Eq2IuFWMmxFxK0Vk
WUSkfKRWRJalvkakiIuXfozGJ5MnAHegYu4ju/fswfbvYuHZF0jvf84DXz7Fwn3PMHTwA94+Jezd/iSv
PHGG2auXEbnzKf9PPP7YXsx8BKg4UE4puH79L9LlPyld+oJrbx5l2x8zlH6f4cb+d5mfhfmYob7vb+au
ziF6m9C7iyCl4P6dO4lIAGUHhEjsKA9xYeYCiCDzV7j23PcA2K8/8cbzFxGCX36b4+FHHtowAxFBRFDb
UaMofvH2xM1/brBv94OY2Zo/SYAUGQvUG46IIMsymkuLnWL2fAa2DQ1x4MBBKpUKOb35EulX8C4AzWaT
s2fPdDrN8yRg5tRqNarVKiklVlZWEFFKJcfMCtr7A5NlGe6OmXdk1DYyEXAvYeZECOfOfUe9PkKrlSFi
mA3hXuprlEr5HiK0a4BODRBgprgrEcaHHzV4/dAhsoBvvp7GvdxTH3cbOdMK0QUgRRDQoQeE48eOs9xc
5vDht6hWhpment4EAIK7E0XODoA2GlVD1ciyxOjoKOPjYzQaE5w8eYpyuYyq9gUABNX8EGslSAEEZoqq
oCqMj48xOTnFt6dPUx0u6O+zIzoSEEXObgbMMHfUjBfrLyEiDG+voqarLqT+EKitx0BhMK6OmyMilLyE
iGyqDwiCa2E97ZwdNAHmWsjQr9Z3ACB5jp4ugNyY1HL6BwUgl8DXvCnW1ICbYTo4AILg69dA3gVqtgUM
GBC9RgR5iwy8BizfO/X6AKh6YUYDYgBB213Q4wMB7oYNUILciq23C/KejC2UIHp9INg6CYJ1bkMCVPPT
b6b7rY72/kRXEQKklEgpK15CgwEQEaSUkdLtt2X+JANEhfeOvIOK9vvy+g8EkCLld8wqALG4uHj+44mj
T6e0Nd+JqsLS0tJ5IASoAY8Cu1glyYCjBSwAP0uRtAKUGRz53RHAMtCUe/15/i9A38Suzxe8DwAAAABJ
RU5ErkJggg==
</value>
</data>
</root>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Program.cs
0,0 → 1,21
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
 
namespace DriveLogger
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Properties/AssemblyInfo.cs
0,0 → 1,36
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
 
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DriveLogger")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("DriveLogger")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2011")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
 
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("8afcedbe-01f7-40dd-adca-e46c209111a6")]
 
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Properties/Resources.Designer.cs
0,0 → 1,71
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
namespace DriveLogger.Properties
{
 
 
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
 
private static global::System.Resources.ResourceManager resourceMan;
 
private static global::System.Globalization.CultureInfo resourceCulture;
 
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
 
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DriveLogger.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
 
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Properties/Resources.resx
0,0 → 1,117
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
 
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Properties/Settings.Designer.cs
0,0 → 1,30
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
 
namespace DriveLogger.Properties
{
 
 
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
 
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
 
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Properties/Settings.settings
0,0 → 1,7
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Resources/Terminal.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Resources/Terminal.ico
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Terminal.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger/Terminal.ico
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger.suo
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/SWAT DriveLogger/tags/Release_1.3/DriveLogger.suo
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/SWAT DriveLogger/tags/Release_1.3/DriveLogger.sln
0,0 → 1,20

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DriveLogger", "DriveLogger\DriveLogger.csproj", "{024728DC-A9B5-4A78-A4CD-8EF5B211CE3D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{024728DC-A9B5-4A78-A4CD-8EF5B211CE3D}.Debug|x86.ActiveCfg = Debug|x86
{024728DC-A9B5-4A78-A4CD-8EF5B211CE3D}.Debug|x86.Build.0 = Debug|x86
{024728DC-A9B5-4A78-A4CD-8EF5B211CE3D}.Release|x86.ActiveCfg = Release|x86
{024728DC-A9B5-4A78-A4CD-8EF5B211CE3D}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal