C# - P/Invoke

List of exported functions in Windows system dll files: https://strontic.github.io/xcyclopedia/index-dll

Data Type conversion from C++ to .NET: https://www.codeproject.com/Articles/9714/Win32-API-C-to-NET

  • Boilerplate Code

using System;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Text;

namespace WinAPI
{
    class Program
    {
        # P/Invoke


        //[HandleProcessCorruptedStateExceptions] // Helps catch the System.AccessViolationException exception
        static void Main(string[] args)
        {
            try
            {
                # Code
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}
  • GetUserNameA

# P/Invoke
[DllImport("advapi32.dll", CharSet = CharSet.Ansi,SetLastError = true)]
private static extern bool GetUserNameA(StringBuilder lpBuffer,ref uint pcbBuffer);

# Code
StringBuilder username = new StringBuilder(300);
uint length = 300;
GetUserNameA(username,ref length);
Console.WriteLine(username);
  • GetComputerNameA

# P/Invoke
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetComputerNameA(StringBuilder lpBuffer, ref ushort nSize);

# Code
bool success;
StringBuilder name = new StringBuilder(260);
ushort size = 260;
success = GetComputerNameA(name, ref size);
Console.WriteLine(name);

Last updated