应该使用什么API函数得到本机当前登录到域的域名,注意,不是所属的域名

wxjh 2003-02-19 02:06:11
如题
...全文
64 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxjh 2003-02-19
  • 打赏
  • 举报
回复
我是这么写的

PWKSTA_USER_INFO_1 = ^WKSTA_USER_INFO_1;
WKSTA_USER_INFO_1 = record
wkui1_username:PWideChar;
wkui1_logon_domain:PWideChar;
wkui1_oth_domains:PWideChar;
wkui1_logon_server:PWideChar;
end;
function NetWkstaUserEnum( servername:PWideChar; level:DWORD; var bufptr:Pointer;
prefmaxlen: DWORD; var entriesread, totalentries, resumehandle:DWORD ): DWORD; stdcall;
external 'NETAPI32.DLL' name 'NetWkstaUserEnum';

function NetApiBufferFree( bufptr:Pointer ): DWORD; stdcall; external 'NETAPI32.DLL' name 'NetApiBufferFree';
。。。。。。。。。

procedure TForm1.Button1Click(Sender: TObject);
VAR
wui:PWKSTA_USER_INFO_1;
//进行列举 dwPrefMaxLen:cardinal;
dwEntriesRead:cardinal;
dwTotalEntries:cardinal;
dwResumeHandle:cardinal;
rc: dword;
begin
dwPrefMaxLen := $FFFFFFFF;
dwEntriesRead := 0;
dwTotalEntries := 0;
dwResumeHandle := 0;

rc := NetWkstaUserEnum( nil, 1, pointer(wui), dwPrefMaxLen, dwEntriesRead,
dwTotalEntries, dwResumeHandle );

label1.caption:=wui.wkui1_username;
label2.caption:=wui.wkui1_logon_domain;
end;
后来得到的域名不对~~
wxjh 2003-02-19
  • 打赏
  • 举报
回复
谢谢斑竹~!
Billy_Chen28 2003-02-19
  • 打赏
  • 举报
回复
type
NET_API_STATUS = DWORD;

var
NTNetGetDCName : function(Server, Domain: pWideChar; var DC: pWideChar):
NET_API_STATUS; StdCall;
NTNetApiBufferFree: function(lpBuffer: Pointer):
NET_API_STATUS; StdCall;

function GetPDCName: string;
const
NTlib = 'NETAPI32.DLL';
var
pDomain : PWideChar;
LibHandle : THandle;
begin
Result := '';
LibHandle := LoadLibrary(NTlib);
if LibHandle = 0 then
raise Exception.Create('Unable to map library: ' + NTlib);
try
@NTNetGetDCName := GetProcAddress(Libhandle, 'NetGetDCName');
@NTNetApiBufferFree := GetProcAddress(Libhandle, 'NetApiBufferFree');
try
if NTNetGetDCName(nil, nil, pDomain) = 0 then
Result := WideCharToString(pDomain);
finally
NTNetApiBufferFree(pDomain);
end;
finally
FreeLibrary(Libhandle);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(GetPDCName);
end;
*************************
下面的函数获取域名:

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);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧