/// <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); }
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); } }
/// <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))); }
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); }
/// <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();
public static extern Win32Error DavGetExtendedError(HANDLE hFile, out Win32Error ExtError, StringBuilder ExtErrorString, ref uint cChSize);
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);
// 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();