private static extern int FormatMessage( FormatFlags dwFlags, IntPtr lpSource, uint dwMessageId, int dwLanguageId, out SafeLocalAllocHandle lpBuffer, int nSize, IntPtr Arguments );
/// <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) { SafeLocalAllocHandle buffer = null; if (FormatMessage(FormatFlags.AllocateBuffer | FormatFlags.FromHModule | FormatFlags.FromSystem | FormatFlags.IgnoreInserts, GetModuleHandle("ntdll.dll"), status, 0, out buffer, 0, IntPtr.Zero) > 0) { using (buffer) { return(Marshal.PtrToStringUni(buffer.DangerousGetHandle()).Trim()); } } return(String.Empty); }
static extern bool ConvertStringSidToSid( string StringSid, out SafeLocalAllocHandle Sid);
static extern bool ConvertStringSecurityDescriptorToSecurityDescriptor( string StringSecurityDescriptor, int StringSDRevision, out SafeLocalAllocHandle SecurityDescriptor, out int SecurityDescriptorSize);
static extern bool ConvertSecurityDescriptorToStringSecurityDescriptor( byte[] SecurityDescriptor, int RequestedStringSDRevision, SecurityInformation SecurityInformation, out SafeLocalAllocHandle StringSecurityDescriptor, out int StringSecurityDescriptorLen);