If you're on .NET 3.5, check out this excellent MSDN article Managing Directory Security Principals in the .NET Framework 3.5.
It shows the new enhanced search capabilities of .NET 3.5's System.DirectoryServices.AccountManagement
namespace.
One nice feature is the FindByIdentity
method, which allows you to find a user (or group) based on an identity - whether that's the user principal name, the distinguished name, a GUID or the SID - it'll just work :
UserPrincipal user =
UserPrincipal.FindByIdentity(principalContext,
IdentityType.Sid, (value));
You need to make sure to provide the SID in the proper format - see the MSDN docs for details.
Once you have the user principal object, just get its user principal name:
if(user != null)
{
string upn = user.UserPrincipalName;
}
The sample code for the article even has two additional helper methods FindByIdentityGuid
and FindByIdentitySid
to achieve exactly what you're looking for!
Go check it out and use it.