From: <ou...@us...> - 2009-11-25 21:48:00
|
Revision: 3088 http://jcl.svn.sourceforge.net/jcl/?rev=3088&view=rev Author: outchy Date: 2009-11-25 21:47:49 +0000 (Wed, 25 Nov 2009) Log Message: ----------- Mantis 5034: Result of GetDomainName is not reliable Modified Paths: -------------- trunk/jcl/source/common/JclSysInfo.pas Modified: trunk/jcl/source/common/JclSysInfo.pas =================================================================== --- trunk/jcl/source/common/JclSysInfo.pas 2009-11-25 21:30:35 UTC (rev 3087) +++ trunk/jcl/source/common/JclSysInfo.pas 2009-11-25 21:47:49 UTC (rev 3088) @@ -2230,8 +2230,42 @@ end; {$ENDIF UNIX} {$IFDEF MSWINDOWS} +//091123 HA Use LookupAccountSid to fetch the current users domain ... +//begin +// Result := GetUserDomainName(GetLocalUserName); +//end; +var + hProcess, hAccessToken: THandle; + InfoBuffer: PChar; + AccountName: array [0..UNLEN] of Char; + DomainName: array [0..UNLEN] of Char; + + InfoBufferSize: Cardinal; + AccountSize: Cardinal; + DomainSize: Cardinal; + snu: SID_NAME_USE; begin - Result := GetUserDomainName(GetLocalUserName); + InfoBufferSize := 1000; + AccountSize := SizeOf(AccountName); + DomainSize := SizeOf(DomainName); + + hProcess := GetCurrentProcess; + if OpenProcessToken(hProcess, TOKEN_READ, hAccessToken) then + try + GetMem(InfoBuffer, InfoBufferSize); + try + if GetTokenInformation(hAccessToken, TokenUser, InfoBuffer, InfoBufferSize, InfoBufferSize) then + LookupAccountSid(nil, PSIDAndAttributes(InfoBuffer)^.sid, AccountName, AccountSize, + DomainName, DomainSize, snu) + else + RaiseLastOSError; + finally + FreeMem(InfoBuffer) + end; + Result := DomainName; + finally + CloseHandle(hAccessToken); + end end; {$ENDIF MSWINDOWS} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |