已知: User Name、Password、Domain,如何验证该User为该Domain的合法User?
:Pipi. 时间:00-12-9 22:51:48 ID:413980
使用LogonUser看能不能成功。(仅能在nt下使用
不能在win9x上使用)
目前好象只能使用LogonUser,如果你熟悉LSA API的话或许LSA好用一些,但太复杂了。
进程调用LogonUser需要有SE_TCB_NAME特权,在特定情况下也需要
SE_CHANGE_NOTIFY_NAME特权。
获得特权可以参考下面的示例:
if( !OpenProcessToken(
GetCurrentProcess(),
TOKEN_QUERY | TOKEN_ADJUST_DEFAULT | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_PRIVILEGES,
&hProcessToken ) )
// Error Process;
if( !LookupPrivilegeValueA( NULL, lpPrivilegeName, &(tp.Privileges[0].Luid) ) )
// Error Process;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if( !AdjustTokenPrivileges(
hProcessToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES) + sizeof( LUID_AND_ATTRIBUTES ) * 2,
NULL,
NULL ) )
// Error Process;
CloseHandle( hProcessToken );
:热水 时间:00-12-11 18:26:27 ID:415513
补充:
Procedure Login(sUserID:WideString;sAPassWord):Boolean;
var
sAID:String;
LL:Handle;
begin
sAID:=sUerID;//重点Pchar不支持WideString
sDomainName:=....//读取注册表
Flag:=LogonUser(pchar(sAID),pchar(sDomainName),pchar(sAPassWord),LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,LL);
If not Flag then
begin
Result:=False
else
Result:=True;