كيفية استدعاء AllocateAndInitializeSid وظيفة من C# ؟
سؤال
يمكن للشخص أن تعطيني كامل سبيل المثال العمل من استدعاء AllocateAndInitializeSid
وظيفة من التعليمات البرمجية C#?
وجدت هذا:
BOOL WINAPI AllocateAndInitializeSid(
__in PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
__in BYTE nSubAuthorityCount,
__in DWORD dwSubAuthority0,
__in DWORD dwSubAuthority1,
__in DWORD dwSubAuthority2,
__in DWORD dwSubAuthority3,
__in DWORD dwSubAuthority4,
__in DWORD dwSubAuthority5,
__in DWORD dwSubAuthority6,
__in DWORD dwSubAuthority7,
__out PSID *pSid
);
وأنا لا أعرف كيفية بناء توقيع هذه الطريقة - ماذا علي أن أفعل مع PSID_IDENTIFIER_AUTHORITY
و PSID
أنواع ؟ كيف يجب أن تمر عليها - باستخدام ref
أو out
?
المحلول
باستخدام P/استدعاء Interop مساعد:
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct SidIdentifierAuthority {
/// BYTE[6]
[System.Runtime.InteropServices.MarshalAsAttribute(
System.Runtime.InteropServices.UnmanagedType.ByValArray,
SizeConst = 6,
ArraySubType =
System.Runtime.InteropServices.UnmanagedType.I1)]
public byte[] Value;
}
public partial class NativeMethods {
/// Return Type: BOOL->int
///pIdentifierAuthority: PSID_IDENTIFIER_AUTHORITY->_SID_IDENTIFIER_AUTHORITY*
///nSubAuthorityCount: BYTE->unsigned char
///nSubAuthority0: DWORD->unsigned int
///nSubAuthority1: DWORD->unsigned int
///nSubAuthority2: DWORD->unsigned int
///nSubAuthority3: DWORD->unsigned int
///nSubAuthority4: DWORD->unsigned int
///nSubAuthority5: DWORD->unsigned int
///nSubAuthority6: DWORD->unsigned int
///nSubAuthority7: DWORD->unsigned int
///pSid: PSID*
[System.Runtime.InteropServices.DllImportAttribute("advapi32.dll", EntryPoint = "AllocateAndInitializeSid")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool AllocateAndInitializeSid(
[System.Runtime.InteropServices.InAttribute()]
ref SidIdentifierAuthority pIdentifierAuthority,
byte nSubAuthorityCount,
uint nSubAuthority0,
uint nSubAuthority1,
uint nSubAuthority2,
uint nSubAuthority3,
uint nSubAuthority4,
uint nSubAuthority5,
uint nSubAuthority6,
uint nSubAuthority7,
out System.IntPtr pSid);
}
نصائح أخرى
إذا كنت تستهدف .الصافي 2.0 أو في وقت لاحق ، النظام الطبقي.الأمن.الرئيسية.SecurityIdentifier يلتف SID و يسمح لك لتجنب عرضة للخطأ Win32 واجهات برمجة التطبيقات.
ليس بالضبط إجابة على سؤالك, ولكن من يدري قد تكون مفيدة.
على منصة الاحتجاج www.pinvoke.net هو أفضل صديق جديد!
http://www.pinvoke.net/default.aspx/advapi32/AllocateAndInitializeSid.html
لا تنتمي إلى StackOverflow