Гайд Импортирование любой библиотеки (kernel32, user32, etc..) со всеми структурами и перечислениями

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
24 Сен 2024
Сообщения
58
Реакции
16
Хочу поделиться своим опытом работы с библиотекой CsWin32, которая упрощает работу с нативными api в C#.

Что такое CsWin32?

CsWin32 - это инструмент для работы с Windows API, который использует кодогенерацию для создания PInvoke обёрток. Он делает это автоматически.

Устанавливаем через nuget:
1:
1739001444274.png

2: Создаём файл NativeMethods.txt в корне нашего проекта.
3: Добавляем в начало кода:
C#:
Expand Collapse Copy
using static Windows.Win32.PInvoke;

В файл NativeMethods.txt просто добавляете имена нужных вам функций или структур, каждую с новой строки. Например:
1739001582878.png

После сохранения файла запустится кодогенерация, и методы станут доступны в нашем коде.

1739001710958.png


Можно импортировать все методы из определённой библиотеки, используя синтаксис с wildcard в файле NativeMethods.txt. Например:
kernel32.*
user32.*


Пример кода:

C#:
Expand Collapse Copy
using System.Diagnostics;
using System.Runtime.CompilerServices;
using Windows.Win32.System.Threading;


using static Windows.Win32.PInvoke;

public unsafe class Program
{
    private static void Main(string[] args)
    {
        using var handle = OpenProcess_SafeHandle(PROCESS_ACCESS_RIGHTS.PROCESS_ALL_ACCESS,
                                                  true,
                                                  (uint)Process.GetProcessesByName("devenv")[0].Id);

        fixed (byte* buffer = new byte[sizeof(int)])
        {
            if (ReadProcessMemory(handle, (void*)0x1E825407AB4, buffer, sizeof(int), null))
            {
                Console.WriteLine(*(int*)buffer);
            }
        }
    }
}

И вот во что это собралось:
1739002540860.png
 
Последнее редактирование:
Назад
Сверху Снизу