首页  编辑  

如何验证NT帐号

Tags: /超级猛料/Network.网络通讯/共享和用户、域/   Date Created:

已知: 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;