Move the Settings class to Eraser.Plugins for plugins to store persistent state information. This will be passed to plugins as part of the Init function, where the PluginInfo? instance will be provided, including the Persistent Store for the plugin.

Still not compilable, but one major change: when Dispose from Host is called, we should reset the global instance to null.
Also repositioned the declaration for LoadPlugin?(string) to be more logically grouped.

Fixed an obscure crash when running the unlocker code under Vista SP2 - the NtQuerySystemInformation? call seems to return a wrong result when we query only for size. So, we will keep querying until we get all the entries we need (using the do-while loop and when the call returns NT_SUCCESS). Should fix ​http://bbs.heidi.ie/viewtopic.php?f=2&t=8337.

10/30/2011:

Merged revision(s) 2339 from trunk/eraser: Fixed initialisation order. The settings panel should be initialised first because it loads settings and may raise a dialog for invalid settings. The scheduler may then be affected and be in a deadlock when it receives events from the Executor instance. Potential fix for ​http://bbs.heidi.ie/viewtopic.php?f=2&t=8207&p=24805#p24535.

Fixed initialisation order. The settings panel should be initialised first because it loads settings and may raise a dialog for invalid settings. The scheduler may then be affected and be in a deadlock when it receives events from the Executor instance. Potential fix for ​http://bbs.heidi.ie/viewtopic.php?f=2&t=8207&p=24805#p24535.

Merged revision(s) 2335-2337 from trunk/eraser: Allow file unlocking to be done in the actual erasure as well, in addition to when finding stream ADSes. This allows a greater number of files to be unlocked. Addresses #394.

Supplants r2335: if we still cannot erase the file after 1 retry, throw a new SharingViolationException? with the program name locking the file. This will prevent the file from being deleted simplistically.

Supplants r2335: Do not force a full re-erasure if the file cannot be deleted. At that stage, the file data is erased, if the file cannot be deleted, impact times will be impacted negatively. TryEraseStream? will only deal with stream data.

As such, when we have to run the unlocking code a second time, we should throw a Sharing Violation exception instead of silently swallowing the error.

Closes #396: Document circumventing of UAC for Free Space Erasures.
A short paragraph has been added, indicating the background and the most common workaround for the problem. A link to the forum where all documented workarounds are also provided.

Merged revision(s) 2326 from trunk/eraser: The title of the balloon tip should be "Task Completed" and not "Task Executed" for clarity. This was suggested by Jackjack in #388.
Fixes #388: balloon tips wording post wiping

We can use a higher significance level of 0.5; this yields slightly more accurate ETAs since more false samples are rejected (some good ones are rejected too -- but that's okay as we intend to just make this a little more elaborate than simple averages)

The event handler for the checked changed event for each of the recurring schedule types may be called from outside the three buttons. For such instances, do not change the checked state (since sender is none of the three, all will be reset to blank)

Be explicit about the behaviour of the schedule check boxes. Since we handle the checking ourselves, we need to be careful of when the boxes are triggered and reset the states properly. Fixes the bug described in ​http://bbs.heidi.ie/viewtopic.php?p=24697#p24697