```
// Converte uma string SID em um nome de usuário/grupo.
string ConvertSidToString(string sid) {
tentar {
var domínio =new StringBuilder(256);
var nome de usuário =new StringBuilder(256);
var sidParsed =falso;
var resultado =Win32Native.LookupAccountSid(null, sid, nome de usuário, nome de usuário.Capacity);
if (resultado &&nome de usuário.Comprimento> 0) {
sidParsed =verdadeiro;
}
outro {
resultado =Win32Native.LookupAccountSid (nulo, sid, domínio, domínio.Capacity, nome de usuário, nome de usuário.Capacity);
if (resultado &&nome de usuário.Comprimento> 0 &&domínio.Comprimento> 0) {
sidParsed =verdadeiro;
nome de usuário.Append('\\').Append(domínio);
}
}
if (sidParsed) {
retornar nome de usuário.ToString();
}
outro {
retornar nulo;
}
}
pegar {
retornar nulo;
}
}
// Converte um nome de usuário/grupo em uma string SID.
string ConvertStringToSid(string nome) {
tentar {
// Aloca um buffer para receber o SID. O comprimento máximo é:256 bytes para o SID
// em si, mais 1 byte para o caractere nulo.
var sid =novo byte[257];
// Aloca buffers para receber os nomes de usuário e domínio. O comprimento máximo é:
// Usuário:20 caracteres
// Domínio:80 caracteres
var usuário =new StringBuilder(20);
var domínio =new StringBuilder(80);
// Defina o domínio e o ponteiro SID como nulos para usar o computador atual.
tamanho unitário =257;
var bem-sucedido =Win32Native.LookupAccountName (nulo, nome, sid, tamanho de referência, usuário, usuário.Capacity, domínio, domínio.Capacity);
se (sucesso) {
// Converte o SID em uma string para exibição.
retornar novo System.Security.Principal.SecurityIdentifier(sid, 0).Value;
}
outro {
retornar nulo;
}
}
pegar {
retornar nulo;
}
}
```