Передайте uint в аргумент IntPtr - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь создать раздел реестра, используя функцию RegCreateKeyExA. Я очень плохо знаком с C#, поэтому могу ошибаться, но я пришел к выводу, что первый аргумент - это IntPtr. Проблема в том, что я не знаю, как работать с типом данных IntPtr, и меня немного переполняют все различные темы, которые я нашел по этому вопросу. Мне нужны некоторые пояснения относительно типов данных, которые я должен использовать и как с ними обращаться. Вот мой код:

using System;
using System.Runtime.InteropServices;

namespace Win32Application
{
    public class Win32
    {
        public static uint KEY_CREATE_SUB_KEY = 4;
        public static uint HKEY_CURRENT_USER = 80000001;
        public static uint REG_OPTION_NON_VOLATILE = 0;

        [DllImport("Advapi32.dll", CharSet = CharSet.Ansi)]
        public static extern int RegCreateKeyExA(IntPtr hKey, string lpSubKey, uint Reserved,
            string lpClass, uint dwOptions, uint samDesired, ref SECURITY_ATTRIBUTES lpSecurityAttributes,
            ref uint phkResult, ref uint lpdwDisposition);

        public struct SECURITY_ATTRIBUTES
        {
            ulong nLenght;
            IntPtr lpSecurityDescriptor;
            bool bInheritHandle;
        }

        static void Main()
        {
            uint result = 0;
            uint created_or_existing = 0;
            string subKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System";
            SECURITY_ATTRIBUTES secAttrs = new SECURITY_ATTRIBUTES();

            RegCreateKeyExA(ref HKEY_CURRENT_USER, subKey, 0, null, REG_OPTION_NON_VOLATILE,
                KEY_CREATE_SUB_KEY, ref secAttrs, ref result, ref created_or_existing);
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...