<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Jeffrey Wall's WebLog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/jeffrey_wall/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/feed.xml</link>
    <description>This blog is provided &amp;quot;AS IS&amp;quot; with no warranties, and confers no rights.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:21:41 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>ESE links</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/ese-links</link>
      <pubDate>Mon, 05 Nov 2007 12:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2007/11/05/ese-links/</guid>
      <description><![CDATA[ESE API at MSDN:&nbsp; https://msdn2.microsoft.com/en-us/library/ms684493.aspx
New features in ESE...]]></description>
      <content:encoded><![CDATA[<P>ESE API at MSDN:&nbsp; <A href="https://msdn2.microsoft.com/en-us/library/ms684493.aspx" mce_href="https://msdn2.microsoft.com/en-us/library/ms684493.aspx">https://msdn2.microsoft.com/en-us/library/ms684493.aspx</A></P>
<P>New features in ESE for Vista/Server 2008: <A href="https://msdn2.microsoft.com/en-us/library/aa964797.aspx" mce_href="https://msdn2.microsoft.com/en-us/library/aa964797.aspx">https://msdn2.microsoft.com/en-us/library/aa964797.aspx</A></P>
<P mce_keep="true">ESE overview <A href="https://technet.microsoft.com/en-us/library/aa998171.aspx">https://technet.microsoft.com/en-us/library/aa998171.aspx</A></P>
<P mce_keep="true">Wikipedia article: <A href="https://en.wikipedia.org/wiki/Extensible_Storage_Engine">https://en.wikipedia.org/wiki/Extensible_Storage_Engine</A></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server 2005 Compact Edition Overview</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/sql-server-2005-compact-edition-overview</link>
      <pubDate>Mon, 05 Nov 2007 12:40:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2007/11/05/sql-server-2005-compact-edition-overview/</guid>
      <description><![CDATA[A good overview of SQL Server 2005 Compact...]]></description>
      <content:encoded><![CDATA[<P class=MsoNormal style="MARGIN: 0in 0in 0pt">A good overview of SQL Server 2005 Compact Edition</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt" mce_keep="true">&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><A href="https://msdn2.microsoft.com/en-us/library/bb380177.aspx"><FONT face=Verdana>https://msdn2.microsoft.com/en-us/library/bb380177.aspx</FONT></A></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p>&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Windows Contacts viewer in MCE</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/windows-contacts-viewer-in-mce</link>
      <pubDate>Mon, 11 Dec 2006 12:04:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2006/12/11/windows-contacts-viewer-in-mce/</guid>
      <description><![CDATA[Mobileware.net has released a contacts viewer for...]]></description>
      <content:encoded><![CDATA[<P>Mobileware.net has released a contacts viewer for MCE:<BR><A href="https://mobilewares.spaces.live.com/Blog/cns!78533A1A2E078194!163.entry">https://mobilewares.spaces.live.com/Blog/cns!78533A1A2E078194!163.entry</A></P>
<P>Some screen shots:<BR><A href="https://www.mobilewares.net/mce/bscscreens.htm">https://www.mobilewares.net/mce/bscscreens.htm</A></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>CLSID_OEEnvelope</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/clsid_oeenvelope</link>
      <pubDate>Thu, 02 Nov 2006 11:23:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2006/11/02/clsid_oeenvelope/</guid>
      <description><![CDATA[loadTOCNode(1, 'summary');

Several 2007 Microsoft Office applications provide an API that lets...]]></description>
      <content:encoded><![CDATA[
<SCRIPT type=text/javascript>loadTOCNode(1, 'summary');</SCRIPT>

<DIV class=sbody>Several 2007 Microsoft Office applications provide an API that lets a mail client interface with 2007 Office applications when the API is implemented by the mail client. This API provides an integrated experience for sending a copy of a 2007 Office document. If the default mail client implements the API, you can use the Microsoft Office Outlook 2007 mail envelope experience directly in 2007 Office applications.</DIV>
<P><A href="https://support.microsoft.com/kb/926453">https://support.microsoft.com/kb/926453</A></P>
<P mce_keep="true">&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Windows Mail Channel 9 video</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/windows-mail-channel-9-video</link>
      <pubDate>Mon, 24 Apr 2006 12:00:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2006/04/24/windows-mail-channel-9-video/</guid>
      <description><![CDATA[Windows Mail video link:https://channel9.msdn.com/Showpost.aspx?postid=116711]]></description>
      <content:encoded><![CDATA[<P>Windows Mail video link:<BR><A href="https://channel9.msdn.com/Showpost.aspx?postid=116711">https://channel9.msdn.com/Showpost.aspx?postid=116711</A><BR></P>]]></content:encoded>
    </item>
    <item>
      <title>Windows Contacts API</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/windows-contacts-api</link>
      <pubDate>Mon, 24 Apr 2006 11:50:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2006/04/24/windows-contacts-api/</guid>
      <description><![CDATA[Windows Vista includes&nbsp;significant changes to the Windows Address Book.
The WAB MAPI APIs are...]]></description>
      <content:encoded><![CDATA[<P>Windows Vista includes&nbsp;significant changes to the Windows Address Book.</P>
<P>The WAB MAPI APIs are still supported:<BR><A href="https://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/WinContacts/wincontacts/wc_entry_point.asp">https://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/WinContacts/wincontacts/wc_entry_point.asp</A></P>
<P>And there are new APIs in the SDK:<BR><A href="https://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/WinContacts/wincontacts/wc_entry_point.asp">https://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/WinContacts/wincontacts/wc_entry_point.asp</A></P>
<P>&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Double Buffer</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/double-buffer</link>
      <pubDate>Wed, 22 Sep 2004 12:27:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2004/09/22/double-buffer/</guid>
      <description><![CDATA[&nbsp; In a project planning meeting recently, I heard a coworker say "Double Buffer".&nbsp; I...]]></description>
      <content:encoded><![CDATA[<p><font face="Verdana"></font>&nbsp;</p> <p><font face="Verdana">In a project planning meeting recently, I heard a coworker say "Double Buffer".&nbsp; I figured that he meant a performance technique for animation or networking:</font></p> <p><font face="Verdana"><a href="https://www.codeproject.com/java/javadoublebuffer.asp">https://www.codeproject.com/java/javadoublebuffer.asp</a></font></p> <p><font face="Verdana">or like:</font></p> <p><font face="Verdana"><a href="https://www.usenix.org/publications/library/proceedings/osdi99/full_papers/pai/pai_html/node20.html">https://www.usenix.org/publications/library/proceedings/osdi99/full_papers/pai/pai_html/node20.html</a></font></p> <p><font face="Verdana">But he actually meant doubling the time estimate for each task in our project.&nbsp; <font face="Verdana">I couldn't stop myself from immediately suggesting that he read the book 'Critical Chain':</font></font></p> <p><font face="Verdana"><a href="https://www.amazon.com/exec/obidos/tg/detail/-/0884271536/104-9443640-3586327">https://www.amazon.com/exec/obidos/tg/detail/-/0884271536/104-9443640-3586327</a></p></font> <p><font face="Verdana">Or for a quicker overview:</font></p> <p><font face="Verdana"><a href="https://www.processimpact.com/articles/rainyday.pdf">https://www.processimpact.com/articles/rainyday.pdf</a></font></p> <p><font face="Verdana"></font>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Defrag API C# wrappers</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/defrag-api-c-wrappers</link>
      <pubDate>Mon, 13 Sep 2004 18:15:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2004/09/13/defrag-api-c-wrappers/</guid>
      <description><![CDATA[For my own amusement, I decided to wrap the NT Defrag APIs in C#.&nbsp;  It isn't great, but... I'll...]]></description>
      <content:encoded><![CDATA[<p>For my own amusement, I decided to wrap the NT Defrag APIs in C#.&nbsp; </p> <p>It isn't great, but... I'll give it the classic dev guarantee of "it works on my machine".&nbsp; <a href="https://www.thenetworkadministrator.com/top20.htm">https://www.thenetworkadministrator.com/top20.htm</a></p> <p>The MSDN documentation uses lots of very scary words like "IOCTL" and "DeviceIoControl" and the such.&nbsp; Hopefully, I've abstracted some of that away...</p> <p>&nbsp;</p> <p>First, you can get a bitmap of the cluster usage on the device...</p> <p><font face="Courier New"><font color="#0000ff">static</font> <font color="#0000ff">public</font> <font color="#008080">BitArray</font> GetVolumeMap(<font color="#0000ff">string</font> DeviceName)</p></font><font size="2"> <p><font face="Courier New"><font size="3"><font face="Times New Roman" color="#000000">Then you can get a map of a file - virtual clusters&nbsp;and logical clusters</font></font></font></p> <p><font face="Courier New"><font size="3"><font color="#0000ff">static</font> <font color="#0000ff">public</font> <font color="#008080">Array</font> GetFileMap(<font color="#0000ff">string</font> path)</font></font></p><font size="2"> <p><font color="#000000" size="3">Finally, you can move sections of a file around on a volume...</font></p> <p><font face="Arial"><font face="Courier New"><font size="3"><font color="#0000ff">static</font> <font color="#0000ff">public</font> <font color="#0000ff">void</font> MoveFile(<font color="#0000ff">string</font> deviceName, <font color="#0000ff">string</font> path, <font color="#008080">Int64</font> VCN, <font color="#008080">Int64</font> LCN, <font color="#008080">Int32</font> count)</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2"></font></font></font>&nbsp;</p> <p><font face="Arial"><font face="Courier New"><font size="2">Here's the whole thing, nearly guaranteed to break your file system if used.&nbsp; :-)</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">//<br />// a set of simple C# wrappers over the NT Defragmenter APIs<br />//</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">//<br />// Refrences</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">//<br />// <a href="https://www.sysinternals.com/ntw2k/info/defrag.shtml">https://www.sysinternals.com/ntw2k/info/defrag.shtml</a><br />// <br />// msdn how-to<br />// ms-help://MS.MSDNQTR.2004JUL.1033/fileio/base/defragmenting_files.htm<br />// <a href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/defragmenting_files.asp">https://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/defragmenting_files.asp</a><br />//<br />// FSCTL_GET_VOLUME_BITMAP<br />// <a href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/fsctl_get_volume_bitmap.asp">https://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/fsctl_get_volume_bitmap.asp</a><br />//<br />// interesting structures...<br />// FSCTL_MOVE_FILE<br />// FSCTL_GET_RETRIEVAL_POINTERS<br />// RETRIEVAL_POINTERS_BUFFER<br />// FSCTL_GET_RETRIEVAL_POINTERS<br />//<br />// DeviceIoControl<br />// <a href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/deviceiocontrol.asp">https://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/deviceiocontrol.asp</a><br />//</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">using System;<br />using System.Diagnostics;<br />using System.Collections;<br />using System.Runtime.InteropServices;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">namespace defraglib<br />{<br />&nbsp;&nbsp;&nbsp; public class IOWrapper<br />&nbsp;&nbsp;&nbsp; {</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // CreateFile constants<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_SHARE_READ = 0x00000001;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_SHARE_WRITE = 0x00000002;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_SHARE_DELETE = 0x00000004;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint OPEN_EXISTING = 3;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint GENERIC_READ = (0x80000000);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint GENERIC_WRITE = (0x40000000);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_FLAG_NO_BUFFERING = 0x20000000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_READ_ATTRIBUTES = (0x0080);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_WRITE_ATTRIBUTES = 0x0100;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint ERROR_INSUFFICIENT_BUFFER = 122;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DllImport("kernel32.dll", SetLastError = true)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static extern IntPtr CreateFile(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string lpFileName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint dwDesiredAccess,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint dwShareMode,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr lpSecurityAttributes,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint dwCreationDisposition,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint dwFlagsAndAttributes,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hTemplateFile);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DllImport("kernel32.dll", SetLastError = true)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static extern int CloseHandle(IntPtr hObject);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [DllImport("kernel32.dll", SetLastError = true)]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static extern bool DeviceIoControl(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hDevice,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint dwIoControlCode,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr lpInBuffer,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint nInBufferSize,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [Out] IntPtr lpOutBuffer,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint nOutBufferSize,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref uint lpBytesReturned,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr lpOverlapped);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static private IntPtr OpenVolume(string DeviceName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hDevice;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDevice = CreateFile(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @"<a href="file://\\.\">\\.\</a>" + DeviceName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GENERIC_READ | GENERIC_WRITE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE_SHARE_WRITE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OPEN_EXISTING,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((int)hDevice == -1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception(Marshal.GetLastWin32Error().ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hDevice;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static private IntPtr OpenFile(string path)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hFile;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hFile = CreateFile(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE_SHARE_READ | FILE_SHARE_WRITE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OPEN_EXISTING,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((int)hFile == -1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception(Marshal.GetLastWin32Error().ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return hFile;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// Get cluster usage for a device<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="DeviceName"&gt;use "c:"&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;a bitarray for each cluster&lt;/returns&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static public BitArray GetVolumeMap(string DeviceName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr pAlloc = IntPtr.Zero;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hDevice = IntPtr.Zero;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDevice = OpenVolume(DeviceName);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int64 i64 = 0;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GCHandle handle = GCHandle.Alloc(i64, GCHandleType.Pinned);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr p = handle.AddrOfPinnedObject();</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alloc off more than enough for my machine<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 64 megs == 67108864 bytes == 536870912 bits == cluster count<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // NTFS 4k clusters == 2147483648 k of storage == 2097152 megs == 2048 gig disk storage<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint q = 1024 * 1024 * 64; // 1024 bytes == 1k * 1024 == 1 meg * 64 == 64 megs</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint size = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAlloc = Marshal.AllocHGlobal((int)q);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr pDest = pAlloc;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool fResult = DeviceIoControl(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDevice,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FSConstants.FSCTL_GET_VOLUME_BITMAP,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (uint)Marshal.SizeOf(i64),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDest,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!fResult)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception(Marshal.GetLastWin32Error().ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handle.Free();</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object returned was...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;typedef struct <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;LARGE_INTEGER StartingLcn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LARGE_INTEGER BitmapSize;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;BYTE Buffer[1];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;} VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int64 StartingLcn = (Int64)Marshal.PtrToStructure(pDest, typeof(Int64));</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Assert(StartingLcn == 0);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDest = (IntPtr)((Int64)pDest + 8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int64 BitmapSize = (Int64)Marshal.PtrToStructure(pDest, typeof(Int64));</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int32 byteSize = (int)(BitmapSize / 8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byteSize++; // round up - even with no remainder</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr BitmapBegin = (IntPtr)((Int64)pDest + 8);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte[] byteArr = new byte[byteSize];</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marshal.Copy(BitmapBegin, byteArr, 0, (Int32)byteSize);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BitArray retVal = new BitArray(byteArr);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retVal.Length = (int)BitmapSize; // truncate to exact cluster count<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return retVal;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hDevice);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hDevice = IntPtr.Zero;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marshal.FreeHGlobal(pAlloc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAlloc = IntPtr.Zero;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// returns a 2*number of extents array - <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// the vcn and the lcn as pairs<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="path"&gt;file to get the map for ex: "c:\windows\explorer.exe" &lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;returns&gt;An array of [virtual cluster, physical cluster]&lt;/returns&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static public Array GetFileMap(string path)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hFile = IntPtr.Zero;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr pAlloc = IntPtr.Zero;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hFile = OpenFile(path);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int64 i64 = 0;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GCHandle handle = GCHandle.Alloc(i64, GCHandleType.Pinned);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr p = handle.AddrOfPinnedObject();</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint q = 1024 * 1024 * 64; // 1024 bytes == 1k * 1024 == 1 meg * 64 == 64 megs</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint size = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAlloc = Marshal.AllocHGlobal((int)q);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr pDest = pAlloc;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool fResult = DeviceIoControl(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hFile,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FSConstants.FSCTL_GET_RETRIEVAL_POINTERS,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (uint)Marshal.SizeOf(i64),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDest,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; q,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!fResult)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception(Marshal.GetLastWin32Error().ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handle.Free();</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returned back one of...<br />&nbsp;&nbsp;&nbsp;&nbsp; typedef struct RETRIEVAL_POINTERS_BUFFER {&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWORD ExtentCount;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER StartingVcn;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LARGE_INTEGER NextVcn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LARGE_INTEGER Lcn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } Extents[1];<br />&nbsp;&nbsp;&nbsp;&nbsp; } RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;<br />&nbsp;&nbsp;&nbsp;&nbsp;*/</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int32 ExtentCount = (Int32)Marshal.PtrToStructure(pDest, typeof(Int32));</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDest = (IntPtr)((Int64)pDest + 4);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int64 StartingVcn = (Int64)Marshal.PtrToStructure(pDest, typeof(Int64));</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug.Assert(StartingVcn == 0);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDest = (IntPtr)((Int64)pDest + 8);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // now pDest points at an array of pairs of Int64s.</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Array retVal = Array.CreateInstance(typeof(Int64), new int[2] { ExtentCount, 2 });</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; ExtentCount; i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int j = 0; j &lt; 2; j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Int64 v = (Int64)Marshal.PtrToStructure(pDest, typeof(Int64));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retVal.SetValue(v, new int[2] { i, j });<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDest = (IntPtr)((Int64)pDest + 8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return retVal;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hFile = IntPtr.Zero;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Marshal.FreeHGlobal(pAlloc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pAlloc = IntPtr.Zero;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// input structure for use in MoveFile<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private struct MoveFileData<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public IntPtr hFile;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Int64 StartingVCN;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Int64 StartingLCN;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Int32 ClusterCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// move a virtual cluster for a file to a logical cluster on disk, repeat for count clusters<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="deviceName"&gt;device to move on"c:"&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="path"&gt;file to muck with "c:\windows\explorer.exe"&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="VCN"&gt;cluster number in file to move&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="LCN"&gt;cluster on disk to move to&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /// &lt;param name="count"&gt;for how many clusters&lt;/param&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static public void MoveFile(string deviceName, string path, Int64 VCN, Int64 LCN, Int32 count)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hVol = IntPtr.Zero;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr hFile = IntPtr.Zero;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hVol = OpenVolume(deviceName);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hFile = OpenFile(path);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MoveFileData mfd = new MoveFileData();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mfd.hFile = hFile;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mfd.StartingVCN = VCN;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mfd.StartingLCN = LCN;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mfd.ClusterCount = count;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GCHandle handle = GCHandle.Alloc(mfd, GCHandleType.Pinned);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr p = handle.AddrOfPinnedObject();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint bufSize = (uint)Marshal.SizeOf(mfd);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uint size = 0;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool fResult = DeviceIoControl(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hVol,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FSConstants.FSCTL_MOVE_FILE,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bufSize,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero, // no output data from this FSCTL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref size,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IntPtr.Zero);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handle.Free();</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!fResult)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception(Marshal.GetLastWin32Error().ToString());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hVol);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CloseHandle(hFile);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2"><br />&nbsp;&nbsp;&nbsp; /// &lt;summary&gt;<br />&nbsp;&nbsp;&nbsp; /// constants lifted from winioctl.h from platform sdk<br />&nbsp;&nbsp;&nbsp; /// &lt;/summary&gt;<br />&nbsp;&nbsp;&nbsp; internal class FSConstants<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_DEVICE_FILE_SYSTEM = 0x00000009;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint METHOD_NEITHER = 3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint METHOD_BUFFERED = 0;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_ANY_ACCESS = 0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const uint FILE_SPECIAL_ACCESS = FILE_ANY_ACCESS;</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static uint FSCTL_GET_VOLUME_BITMAP = CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static uint FSCTL_GET_RETRIEVAL_POINTERS = CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static uint FSCTL_MOVE_FILE = CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_SPECIAL_ACCESS);</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static uint CTL_CODE(uint DeviceType, uint Function, uint Method, uint Access)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ((DeviceType) &lt;&lt; 16) | ((Access) &lt;&lt; 14) | ((Function) &lt;&lt; 2) | (Method);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">}</font></font></font></p> <p><font face="Arial"><font face="Courier New"><font size="2">&nbsp;</p></font></font></font></font></font>]]></content:encoded>
    </item>
    <item>
      <title>Defrag APIs</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/defrag-apis</link>
      <pubDate>Mon, 13 Sep 2004 17:36:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2004/09/13/defrag-apis/</guid>
      <description><![CDATA[I just recently re-discovered the NT file defrag APIs......]]></description>
      <content:encoded><![CDATA[<p>I just recently re-discovered the NT file defrag APIs...</p> <p><a href="https://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/defragmenting_files.asp">https://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/defragmenting_files.asp</a></p> <p>And I found a great defragmenter...</p> <p><a href="https://www.whitneyfamily.org/Hacks/?item=Defrag">https://www.whitneyfamily.org/Hacks/?item=Defrag</a></p> <p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Longhorn Communications Wiki</title>
      <link>https://docs.microsoft.com/archive/blogs/jeffrey_wall/longhorn-communications-wiki</link>
      <pubDate>Mon, 14 Jun 2004 14:08:00 GMT</pubDate>
      <dc:creator><![CDATA[Jeffrey Wall]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/jeffrey_wall/2004/06/14/longhorn-communications-wiki/</guid>
      <description><![CDATA[One of the PMs on the team has put together a wiki on...]]></description>
      <content:encoded><![CDATA[<P><FONT face="Courier New">One of the PMs on the team has put together a wiki on Channel9</FONT></P>
<P><A href="https://channel9.msdn.com/wiki/default.aspx/Channel9.LonghornCommunications"><FONT face="Courier New">https://channel9.msdn.com/wiki/default.aspx/Channel9.LonghornCommunications</FONT></A></P>
<P>&nbsp;</P>]]></content:encoded>
    </item>
  </channel>
</rss>