أفضل وسيلة لحل اسم المستخدم عرض بواسطة SID؟

StackOverflow https://stackoverflow.com/questions/380031

  •  22-08-2019
  •  | 
  •  

سؤال

وأنا أقرأ قائمة الدول الجزرية الصغيرة النامية من التسجيل، HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList.

وكيف يمكن لأحد أن يحل اسم المستخدم عرض (على سبيل المثال DOMAIN\user، BUILT-IN\user) نظرا لسلسلة SID في C #؟

هل كانت مفيدة؟

المحلول

وظيفة API Win32 و<لأ href = "http://msdn.microsoft.com/en-us/library/windows/desktop/aa379166٪28v=vs.85٪29.aspx" يختلط = "نوفولو noreferrer" > يتم استخدام LookupAccountSid() للعثور على الاسم الذي يتوافق مع SID.

وLookupAccountSid() لديه توقيع التالية:

BOOL LookupAccountSid(LPCTSTR lpSystemName, PSID Sid,LPTSTR Name, LPDWORD cbName,
                       LPTSTR ReferencedDomainName, LPDWORD cbReferencedDomainName,
                       PSID_NAME_USE peUse);

المرجع .

وهنا يكمن P / استدعاء المرجعية (مع نموذج التعليمات البرمجية): HTTP: // شبكة الاتصالات العالمية .pinvoke.net / default.aspx / advapi32.LookupAccountSid

[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError = true)]
static extern bool LookupAccountSid (
  string lpSystemName,
  [MarshalAs(UnmanagedType.LPArray)] byte[] Sid,
  StringBuilder lpName,
  ref uint cchName,
  StringBuilder ReferencedDomainName,
  ref uint cchReferencedDomainName,
  out SID_NAME_USE peUse); 

نصائح أخرى

وفقط وجدت أنه على pinvoke.net .

والبديل إدارتها API: متوفر في صافي 2.0:

using System.Security.Principal;

// convert the user sid to a domain\name
string account = new SecurityIdentifier(stringSid).Translate(typeof(NTAccount)).ToString();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top