Mega Code Archive

 
Categories / Delphi / System
 

Determine the users logon domain

Title: determine the user's logon domain? function GetDomainName: AnsiString; type WKSTA_INFO_100 = record wki100_platform_id: Integer; wki100_computername: PWideChar; wki100_langroup: PWideChar; wki100_ver_major: Integer; wki100_ver_minor: Integer; end; WKSTA_USER_INFO_1 = record wkui1_username: PChar; wkui1_logon_domain: PChar; wkui1_logon_server: PChar; wkui1_oth_domains: PChar; end; type //Win9X ANSI prototypes from RADMIN32.DLL and RLOCAL32.DLL TWin95_NetUserGetInfo = function(ServerName, UserName: PChar; Level: DWORD; var BfrPtr: Pointer): Integer; stdcall; TWin95_NetApiBufferFree = function(BufPtr: Pointer): Integer; stdcall; TWin95_NetWkstaUserGetInfo = function(Reserved: PChar; Level: Integer; var BufPtr: Pointer): Integer; stdcall; //WinNT UNICODE equivalents from NETAPI32.DLL TWinNT_NetWkstaGetInfo = function(ServerName: PWideChar; level: Integer; var BufPtr: Pointer): Integer; stdcall; TWinNT_NetApiBufferFree = function(BufPtr: Pointer): Integer; stdcall; function IsWinNT: Boolean; var VersionInfo: TOSVersionInfo; begin VersionInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); Result := GetVersionEx(VersionInfo); if Result then Result := VersionInfo.dwPlatformID = VER_PLATFORM_WIN32_NT; end; var Win95_NetUserGetInfo: TWin95_NetUserGetInfo; Win95_NetWkstaUserGetInfo: TWin95_NetWkstaUserGetInfo; Win95_NetApiBufferFree: TWin95_NetApiBufferFree; WinNT_NetWkstaGetInfo: TWinNT_NetWkstaGetInfo; WinNT_NetApiBufferFree: TWinNT_NetApiBufferFree; WSNT: ^WKSTA_INFO_100; WS95: ^WKSTA_USER_INFO_1; EC: DWORD; hNETAPI: THandle; begin try Result := ''; if IsWinNT then begin hNETAPI := LoadLibrary('NETAPI32.DLL'); if hNETAPI 0 then begin @WinNT_NetWkstaGetInfo := GetProcAddress(hNETAPI, 'NetWkstaGetInfo'); @WinNT_NetApiBufferFree := GetProcAddress(hNETAPI, 'NetApiBufferFree'); EC := WinNT_NetWkstaGetInfo(nil, 100, Pointer(WSNT)); if EC = 0 then begin Result := WideCharToString(WSNT^.wki100_langroup); WinNT_NetApiBufferFree(Pointer(WSNT)); end; end; end else begin hNETAPI := LoadLibrary('RADMIN32.DLL'); if hNETAPI 0 then begin @Win95_NetApiBufferFree := GetProcAddress(hNETAPI, 'NetApiBufferFree'); @Win95_NetUserGetInfo := GetProcAddress(hNETAPI, 'NetUserGetInfoA'); EC := Win95_NetWkstaUserGetInfo(nil, 1, Pointer(WS95)); if EC = 0 then begin Result := WS95^.wkui1_logon_domain; Win95_NetApiBufferFree(Pointer(WS95)); end; end; end; finally if hNETAPI 0 then FreeLibrary(hNETAPI); end; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(GetDomainName); end;