Лучший метод, который я нашел самостоятельно, это запрос к WMI, например:
Sub GetUserFromSID(BYVAL strSID, BYREF strUserName, BYREF strDomainName)
'given the SID in string/SDDL form, fetch the user and domain names
'this method should work for local and parent AD domain users (i.e. direct trust)
'...but it probably won't work for remote domains over transitive trusts
On Error Resume Next
Dim objSID : Set objSID = objWMI.Get("Win32_SID='" & strSID & "'")
strUserName = objSID.AccountName
strDomainName = objSID.ReferencedDomainName
On Error Goto 0
If strDomainName = "NT AUTHORITY" Then strDomainName = GetHostname() 'so it matches active user queries
End Sub
Как видите, мне пришлось добавить обработчик ошибок, а точнее - "вслепую пропускать ошибки", потому что запрос не всегда выполняется успешно (и может быть несколько потенциальных причин, которые не легко проверить).