12345678910111213141516171819202122232425262728293031323334353637 |
- using System;
- using System.Diagnostics.CodeAnalysis;
- using System.Runtime.ConstrainedExecution;
- using Microsoft.Win32.SafeHandles;
- namespace Standard;
- internal sealed class SafeGdiplusStartupToken : SafeHandleZeroOrMinusOneIsInvalid
- {
- private SafeGdiplusStartupToken() : base(true)
- {
- }
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
- protected override bool ReleaseHandle()
- {
- Status status = NativeMethods.GdiplusShutdown(this.handle);
- return status == Status.Ok;
- }
- [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
- [SuppressMessage("Microsoft.Usage", "CA2201:DoNotRaiseReservedExceptionTypes")]
- public static SafeGdiplusStartupToken Startup()
- {
- SafeGdiplusStartupToken safeGdiplusStartupToken = new SafeGdiplusStartupToken();
- IntPtr handle;
- StartupOutput startupOutput;
- if (NativeMethods.GdiplusStartup(out handle, new StartupInput(), out startupOutput) == Status.Ok)
- {
- safeGdiplusStartupToken.handle = handle;
- return safeGdiplusStartupToken;
- }
- safeGdiplusStartupToken.Dispose();
- throw new Exception("Unable to initialize GDI+");
- }
- }
|