// Convierte una cadena SID en un nombre de usuario/grupo.
cadena ConvertSidToString (cadena sid) {
intentar {
dominio var =nuevo StringBuilder(256);
var nombre de usuario =nuevo StringBuilder(256);
var sidParsed =falso;
resultado var =Win32Native.LookupAccountSid (nulo, sid, nombre de usuario, nombre de usuario.Capacidad);
if (resultado &&nombre de usuario.Longitud> 0) {
sidParsed =verdadero;
}
de lo contrario si (Win32Native.GetLastError() ==Win32Native.ERROR_NONE_MAPPED) {
// SID se refiere a un usuario o grupo local
dominio.Append(".");
sidParsed =Win32Native.LookupAccountSid(nulo, sid, nombre de usuario, nombre de usuario.Capacidad, dominio, dominio.Capacidad, nulo);
si (!sidParsed) {
// En caso de que LookupAccountSid falle por algún motivo, simplemente devuelva la cadena SID.
sidParsed =verdadero;
nombre de usuario.Longitud =0;
}
}
si (sidParsed) {
devolver nombre de usuario.ToString();
}
demás {
devolver nulo;
}
}
captura (Excepción e) {
devolver nulo;
}
}
// Convierte un nombre de usuario/grupo en una cadena SID.
cadena ConvertStringToSid (nombre de cadena) {
intentar {
var sid =nuevo byte[256];
var sidLongitud =sid.Longitud;
var nombreDeDominio =new StringBuilder(256);
var sidParsed =falso;
resultado var =Win32Native.LookupAccountName (nulo, nombre, sid, ref sidLength, nombre de dominio, nombre de dominio.Capacidad, nulo);
si (resultado &&sidLength> 0) {
sidParsed =verdadero;
}
si (sidParsed) {
devolver nuevo SecurityIdentifier(sid, 0).Value;
}
demás {
devolver nulo;
}
}
captura (Excepción e) {
devolver nulo;
}
}
```