2008-09-11 21 views
2

誰かが私にAllocateAndInitializeSid関数をC#コードから呼び出す完全で実用的な例を教えてくれますか?C#からAllocateAndInitializeSid関数を呼び出す方法は?

私はthisが見つかりました:

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_AUTHORITYPSIDタイプで何をすべきでしょうか?どのように私はそれらを渡す必要があります - refまたはoutを使用して?

答えて

1

があっ
[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); 

    } 
0

プラットフォームインボークの場合、www.pinvoke.netはあなたの新しい親友です!

http://www.pinvoke.net/default.aspx/advapi32/AllocateAndInitializeSid.html

+0

。 1番目のパラメータはMSDNによると 'SID_IDENTIFIER_AUTHORITY構造体へのポインタ'であり、pinvoke.netはそれがIntPtrだと言います。それは同じですか?どのようにthiiポインタを作成する必要がありますか? _complete_の例を投稿してください。私はオンラインで見つけたものすべてを試しました。私はそれを動作させることはできません。 –

1

は、.NET 2.0以降をターゲットにしている場合は、クラスSystem.Security.Principal.SecurityIdentifierは、SIDをラップし、あなたは、エラーが発生しやすいのWin32 APIを避けることができます。

あなたの質問に対する答えは正確ではありませんが、それが有用かもしれないことを知っている人。 P/Invoke Interop Assistantを使用して

関連する問題