/// <summary> /// Build a status from it's component parts. /// </summary> /// <param name="severity">The severity of the status code.</param> /// <param name="is_customer_code">Is this a customer code?</param> /// <param name="is_reserved">Is this a reserved code?</param> /// <param name="facility">The facility.</param> /// <param name="code">The status code.</param> /// <returns></returns> public static NtStatus BuildStatus(NtStatusSeverity severity, bool is_customer_code, bool is_reserved, NtStatusFacility facility, int code) { uint status = (uint)code | ((uint)facility << 16) | (is_reserved ? (1U << 28) : 0U) | (is_customer_code ? (1U << 29) : 0U) | ((uint)severity << 30); return((NtStatus)status); }
/// <summary> /// Convert an NTSTATUS to a message description. /// </summary> /// <param name="status">The status to convert.</param> /// <returns>The message description, or an empty string if not found.</returns> public static string GetNtStatusMessage(NtStatus status) { SafeLoadLibraryHandle module = SafeLoadLibraryHandle.Null; uint message_id = (uint)status; NtStatusFacility facility = status.GetFacility(); if (facility == NtStatusFacility.FACILITY_NTWIN32 || facility == NtStatusFacility.FACILITY_VISUALCPP) { module = SafeLoadLibraryHandle.GetModuleHandleNoThrow("kernel32.dll"); message_id = (uint)status.GetStatusCode(); } else { module = SafeLoadLibraryHandle.GetModuleHandleNoThrow("ntdll.dll"); } return(Win32Utils.FormatMessage(module, message_id)); }