HANDLE hLogonToken;
HANDLE hAdminToken; LogonUser(_T("Administrator"), 
_T("domain111"), 
_T("111"),
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, 
&hLogonToken );  DuplicateTokenEx( hLogonToken, 
TOKEN_ALL_ACCESS, 
NULL, 
SecurityIdentification, 
TokenPrimary, 
&hAdminToken );
ImpersonateLoggedOnUser(hAdminToken);
========================================================
LogonUser调用不成功

解决方案 »

  1.   

    在variables敲@err,hr
    执行LogonUser后看是不是0x00000522  客户没有所需的特权

      

  2.   

    必须是2000或者NT.如果是本地登陆(如果登陆的机器没有域),第二个参数应该是NULL。用GetLastError或者其他的参数试试。
      

  3.   

    错误信息如下
    A required privilege is not held by the client.
      

  4.   

    域账号登陆?不用域(第二个参数设成NULL)试试看
      

  5.   

    不要使用LOGON32_LOGON_INTERACTIVE
    这需要一个特权SE_INTERACTIVE_LOGON_NAME 
    一般进程是没有这个特权的
    将LOGON32_LOGON_INTERACTIVE换成LOGON32_LOGON_NETWORK
      

  6.   

    要先升级你自己进程的权限。。
    升到SE_INTERACTIVE_LOGON_NAME就可以了。。
      

  7.   

    to nightfallrove:
    怎么升?
      

  8.   

    你的系统是win2000吧    win2000还需要一个特权,SE_TCB_NAME,一般进程是没有这个特权的,也无法获得这个特权。只有服务才有。所以win2000中,一般进程是无法LogonUser成功的。但服务进程中可以。    从xp开始,LogonUser不再需要SE_TCB_NAME了,所以一般进程中可以LogonUser成功。但是LOGON32_LOGON_INTERACTIVE形式的LogonUser还是需要SE_INTERACTIVE_LOGON_NAME这个特权。    调整进程的特权的代码如下:BOOL SetPrivilege (LPCTSTR privilege, BOOL bEnable)
        {
            TOKEN_PRIVILEGES tpPrev;
            TOKEN_PRIVILEGES tpNew;
            LUID    luid;
            HANDLE hProcToken;
            DWORD cbPrev;        if (!OpenProcessToken (GetCurrentProcess (), 
                    TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, 
                    &hProcToken))
            {
                print_msg (TEXT ("OpenProcessToken"));
                return FALSE;
            };        if (!LookupPrivilegeValue (NULL, privilege, &luid))
            {
                print_msg (TEXT ("LookupPrivilegeValue"));
                return FALSE;
            };        tpNew.PrivilegeCount = 1;
            tpNew.Privileges [0].Luid = luid;
            tpNew.Privileges [0].Attributes = 0;        if (!AdjustTokenPrivileges (hProcToken, FALSE, 
                &tpNew, sizeof (TOKEN_PRIVILEGES), 
                &tpPrev, &cbPrev))
            {
                print_msg (TEXT ("AdjustTokenPrivileges"));
                return FALSE;
            };
            tpPrev.PrivilegeCount = 1;
            tpPrev.Privileges[0].Luid = luid;        if(bEnable)
                tpPrev.Privileges[0].Attributes |= (SE_PRIVILEGE_ENABLED);
            else
                tpPrev.Privileges[0].Attributes ^= (SE_PRIVILEGE_ENABLED & tpPrev.Privileges[0].Attributes);        if (!AdjustTokenPrivileges (hProcToken, FALSE, 
                &tpPrev, cbPrev, NULL, NULL))
            {
                print_msg (TEXT ("AdjustTokenPrivileges"));
                return FALSE;
            }        CloseHandle (hProcToken);
            return TRUE;
        };
      

  9.   

    同意  xstring(麻雀) 。