Beispiel #1
0
            /// <summary>Creates a SID for predefined aliases.</summary>
            /// <param name="WellKnownSidType">Member of the WELL_KNOWN_SID_TYPE enumeration that specifies what the SID will identify.</param>
            /// <param name="DomainSid">
            /// A pointer to a SID that identifies the domain to use when creating the SID. Pass <c>PSID.NULL</c> to use the local computer.
            /// </param>
            /// <returns>A <see cref="SafePSID"/> instance.</returns>
            public static SafePSID CreateWellKnown(WELL_KNOWN_SID_TYPE sidType, PSID domainSid = default)
            {
                var sz = 0U;

                CreateWellKnownSid(sidType, domainSid, Null, ref sz);
                if (sz == 0)
                {
                    Win32Error.ThrowLastError();
                }
                var newSid = new SafePSID((int)sz);

                if (!CreateWellKnownSid(sidType, domainSid, newSid, ref sz))
                {
                    Win32Error.ThrowLastError();
                }
                return(newSid);
            }
Beispiel #2
0
 public static void RegisterWaitChainCOMCallback()
 {
     using (var hLib = Kernel32.LoadLibrary(Lib.Ole32))
     {
         if (hLib.IsInvalid)
         {
             Win32Error.ThrowLastError();
         }
         var p1 = Kernel32.GetProcAddress(hLib, "CoGetCallState");
         if (p1 == IntPtr.Zero)
         {
             Win32Error.ThrowLastError();
         }
         var p2 = Kernel32.GetProcAddress(hLib, "CoGetActivationState");
         if (p2 == IntPtr.Zero)
         {
             Win32Error.ThrowLastError();
         }
         RegisterWaitChainCOMCallback(p1, p2);
     }
 }
Beispiel #3
0
 /// <summary>Initializes a new instance of the <see cref="WindowClass"/> class and registers the class name.</summary>
 /// <param name="className">
 /// <para>
 /// A string that specifies the window class name. The class name can be any name registered with RegisterClass or RegisterClassEx,
 /// or any of the predefined control-class names.
 /// </para>
 /// <para>
 /// The maximum length for <c>lpszClassName</c> is 256. If <c>lpszClassName</c> is greater than the maximum length, the
 /// RegisterClassEx function will fail.
 /// </para>
 /// </param>
 /// <param name="hInst">A handle to the instance that contains the window procedure for the class.</param>
 /// <param name="wndProc">
 /// A pointer to the window procedure. You must use the CallWindowProc function to call the window procedure. For more information,
 /// see WindowProc.
 /// </param>
 /// <param name="styles">The class style(s). This member can be any combination of the Class Styles.</param>
 /// <param name="hIcon">
 /// A handle to the class icon. This member must be a handle to an icon resource. If this member is <c>NULL</c>, the system provides
 /// a default icon.
 /// </param>
 /// <param name="hSmIcon">
 /// A handle to a small icon that is associated with the window class. If this member is <c>NULL</c>, the system searches the icon
 /// resource specified by the <c>hIcon</c> member for an icon of the appropriate size to use as the small icon.
 /// </param>
 /// <param name="hCursor">
 /// A handle to the class cursor. This member must be a handle to a cursor resource. If this member is <c>NULL</c>, an application
 /// must explicitly set the cursor shape whenever the mouse moves into the application's window.
 /// </param>
 /// <param name="hbrBkgd">
 /// A handle to the class background brush. This member can be a handle to the brush to be used for painting the background, or it
 /// can be a color value. A color value must be one of the following standard system colors (the value 1 must be added to the chosen color).
 /// <para>
 /// The system automatically deletes class background brushes when the class is unregistered by using <see cref="UnregisterClass"/>.
 /// An application should not delete these brushes.
 /// </para>
 /// <para>
 /// When this member is <c>NULL</c>, an application must paint its own background whenever it is requested to paint in its client
 /// area. To determine whether the background must be painted, an application can either process the WM_ERASEBKGND message or test
 /// the <c>fErase</c> member of the PAINTSTRUCT structure filled by the BeginPaint function.
 /// </para>
 /// </param>
 /// <param name="menuName">
 /// A string that specifies the resource name of the class menu, as the name appears in the resource file. If you use an integer to
 /// identify the menu, use the MAKEINTRESOURCE macro. If this member is <c>NULL</c>, windows belonging to this class have no default menu.
 /// </param>
 /// <param name="extraBytes">
 /// The number of extra bytes to allocate following the window-class structure. The system initializes the bytes to zero.
 /// </param>
 /// <param name="extraWinBytes">
 /// The number of extra bytes to allocate following the window instance. The system initializes the bytes to zero. If an application
 /// uses <c>WNDCLASSEX</c> to register a dialog box created by using the <c>CLASS</c> directive in the resource file, it must set
 /// this member to <c>DLGWINDOWEXTRA</c>.
 /// </param>
 public WindowClass(string className, HINSTANCE hInst, WindowProc wndProc, WindowClassStyles styles = 0, HICON hIcon = default, HICON hSmIcon = default,
                    HCURSOR hCursor = default, HBRUSH hbrBkgd = default, string menuName = null, int extraBytes = 0, int extraWinBytes = 0)
 {
     // TODO: Find way to hold on to wndProc ref
     wc = new WNDCLASSEX
     {
         cbSize        = (uint)Marshal.SizeOf(typeof(WNDCLASSEX)),
         lpfnWndProc   = wndProc,
         hInstance     = hInst,
         lpszClassName = className,
         style         = styles,
         hIcon         = hIcon,
         hIconSm       = hSmIcon,
         hCursor       = hCursor,
         hbrBackground = hbrBkgd,
         lpszMenuName  = menuName,
         cbClsExtra    = extraBytes,
         cbWndExtra    = extraWinBytes,
     };
     Atom = Win32Error.ThrowLastErrorIfNull(Macros.MAKEINTATOM(RegisterClassEx(wc)));
 }
Beispiel #4
0
        public static bool QueryServiceConfig2 <T>(IntPtr hService, ServiceConfigOption dwInfoLevel, out T configInfo)
        {
            var b = QueryServiceConfig2(hService, dwInfoLevel, IntPtr.Zero, 0, out uint size);

            configInfo = default(T);
            if (!b && Win32Error.GetLastError() != Win32Error.ERROR_INSUFFICIENT_BUFFER)
            {
                return(false);
            }
            if (size < Marshal.SizeOf(typeof(T)))
            {
                throw new ArgumentException("Type mismatch", nameof(configInfo));
            }
            using (var buf = new SafeHGlobalHandle((int)size))
            {
                if (!QueryServiceConfig2(hService, dwInfoLevel, (IntPtr)buf, size, out size))
                {
                    return(false);
                }
                configInfo = buf.ToStructure <T>();
            }
            return(true);
        }
Beispiel #5
0
 /// <summary>Converts a bool to a Win32Error.</summary>
 /// <param name="result">Result state.</param>
 /// <returns>Resulting error or <see cref="Win32Error.ERROR_SUCCESS"/> on success.</returns>
 public static Win32Error BoolToLastErr(bool result) => result ? Win32Error.ERROR_SUCCESS : Win32Error.GetLastError();
Beispiel #6
0
 public static extern Win32Error DavGetExtendedError(HANDLE hFile, out Win32Error ExtError, StringBuilder ExtErrorString, ref uint cChSize);
Beispiel #7
0
 public static extern Win32Error CredUICmdLinePromptForCredentials([In, Optional] string pszTargetName, IntPtr pContext, Win32Error dwAuthError, StringBuilder UserName, uint ulUserBufferSize,
                                                                   StringBuilder pszPassword, uint ulPasswordBufferSize, [MarshalAs(UnmanagedType.Bool)] ref bool pfSave, CredentialsDialogOptions dwFlags);
Beispiel #8
0
 // register the COM local server for the current running module this is for self registering applications
 public static HRESULT HRESULT_FROM_WIN32(Win32Error err) => err.ToHRESULT();