var powerRequest = IntPtr.Zero;
var powerSuccess = false;
try
{
Debug.WriteLine("Suspending system sleep");
POWER_REQUEST_CONTEXT powerRequestContext;
powerRequestContext.Version = POWER_REQUEST_CONTEXT_VERSION;
powerRequestContext.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING;
powerRequestContext.SimpleReasonString = "Compacting database";
powerRequest = Imports.PowerCreateRequest(ref powerRequestContext);
if (powerRequest == IntPtr.Zero)
{
var error = Marshal.GetLastWin32Error();
Debug.WriteLine($"{nameof(Imports.PowerCreateRequest)} failed, error={error}");
}
else if (! (powerSuccess = Imports.PowerSetRequest(powerRequest, PowerRequestType.PowerRequestSystemRequired)))
{
var error = Marshal.GetLastWin32Error();
Debug.WriteLine($"{nameof(Imports.PowerSetRequest)} failed, error={error}");
}
}
finally
{
if (powerRequest != IntPtr.Zero)
{
Debug.WriteLine("Resuming system sleep");
if (powerSuccess)
{
if (! Imports.PowerClearRequest(powerRequest, PowerRequestType.PowerRequestSystemRequired))
{
var error = Marshal.GetLastWin32Error();
Debug.WriteLine($"{nameof(Imports.PowerClearRequest)} failed, error={error}");
}
}
if (! Imports.CloseHandle(powerRequest))
{
var error = Marshal.GetLastWin32Error();
Debug.WriteLine($"{nameof(Imports.CloseHandle)} failed, error={error}");
}
}
}