Как вызвать функцию 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?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
1 834
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Для платформы Invoke www.pinvoke.net - ваш новый лучший друг!

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

Был там. Первый параметр - это «указатель на структуру SID_IDENTIFIER_AUTHORITY» согласно MSDN, а pinvoke.net говорит, что это IntPtr. Это то же самое? Как мне создать этот указатель? Выложите, пожалуйста, пример полный. Я перепробовал все, что нашел в Интернете, и не могу заставить его работать.

Marek Grzenkowicz 11.09.2008 18:53

Если вы ориентируетесь на .NET 2.0 или более позднюю версию, класс System.Security.Principal.SecurityIdentifier обертывает SID и позволяет избежать подверженных ошибкам API-интерфейсов Win32.

Не совсем ответ на ваш вопрос, но кто знает, может быть полезно.

Ответ принят как подходящий

Используя P / вызвать помощника по взаимодействию:

    [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);

    }

Другие вопросы по теме