```
// 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;
}
caso contrário, se (Win32Native.GetLastError() ==Win32Native.ERROR_NONE_MAPPED) {
// SID refere-se a um usuário ou grupo local
domínio.Append(".");
sidParsed =Win32Native.LookupAccountSid (null, sid, nome de usuário, nome de usuário.Capacity, domínio, domínio.Capacity, nulo);
if (!sidParsed) {
// Caso LookupAccountSid falhe por algum motivo, basta retornar a string SID.
sidParsed =verdadeiro;
nome de usuário.Comprimento =0;
}
}
if (sidParsed) {
retornar nome de usuário.ToString();
}
outro {
retornar nulo;
}
}
pegar (Exceção e) {
retornar nulo;
}
}
// Converte um nome de usuário/grupo em uma string SID.
string ConvertStringToSid(string nome) {
tentar {
var sid =novo byte[256];
var comprimento sid =sid.Comprimento;
var nomeDomínio =new StringBuilder(256);
var sidParsed =falso;
var resultado =Win32Native.LookupAccountName (null, nome, sid, ref sidLength, domainName, domainName.Capacity, null);
if (resultado &&sidLength> 0) {
sidParsed =verdadeiro;
}
if (sidParsed) {
retornar novo SecurityIdentifier(sid, 0).Value;
}
outro {
retornar nulo;
}
}
pegar (Exceção e) {
retornar nulo;
}
}
```