Uso de Win32 con C#
using System;
using System.Runtime.InteropServices;
class Program
{
// Importamos la biblioteca "advapi32.dll", que contiene funciones para la gestión de seguridad y usuarios en el sistema operativo Windows.
// En este caso, utilizamos GetUserName para obtener el nombre de usuario del sistema actual.
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
// Definimos la firma de la función GetUserName, especificando que toma un buffer de caracteres y un valor de tamaño de buffer como parámetros.
// El atributo "Out" indica que lpBuffer será llenado con el valor de retorno.
// El atributo "In, Out" en pcbBuffer indica que el valor se pasa y se puede modificar para indicar el tamaño del nombre del usuario.
public static extern bool GetUserName(
[Out] char[] lpBuffer, // Buffer donde se almacenará el nombre del usuario.
[In, Out] ref uint pcbBuffer // Tamaño del buffer (en caracteres). Al salir de la función, contiene el número de caracteres que contiene el nombre de usuario.
);
static void Main(string[] args)
{
// Declaramos un arreglo de caracteres llamado buffer con un tamaño de 256, lo suficiente para contener el nombre de usuario.
char[] buffer = new char[256];
// Inicializamos la variable bufferSize con el tamaño del buffer. Esta variable será modificada para reflejar el tamaño real del nombre de usuario.
uint bufferSize = (uint)buffer.Length;
// Llamamos a la función GetUserName, pasando el buffer y el tamaño del buffer.
// Si la llamada tiene éxito, la función devolverá true y almacenará el nombre de usuario en el buffer.
if (GetUserName(buffer, ref bufferSize))
{
// Creamos una nueva cadena (string) a partir de los caracteres almacenados en el buffer.
// Usamos el tamaño del buffer (pcbBuffer) para determinar la longitud de la cadena, restando 1 para excluir el carácter de terminación nulo.
string username = new string(buffer, 0, (int)bufferSize - 1);
// Imprimimos el nombre de usuario en la consola.
Console.WriteLine("Nombre de usuario: " + username);
}
// Esperamos la entrada del usuario para evitar que la consola se cierre inmediatamente después de la ejecución.
Console.ReadLine();
}
}PreviousCómo Funcionan las Win32 APIs y su relacion con el MalwareNextKernel32.dll: La Biblioteca Fundamental en el Sistema Operativo Windows
Last updated