Код (Text): if(LogonUserA(UserName,NULL,UserPassword,LOGON32_LOGON_INTERACTIVE,NULL,&hToken)) { printf("\n\t\t\tlogon complete\n"); if(!CreateProcessAsUserA( hToken, NULL, "cmd.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &cif, &pi)) printf("\n\t\t\tERROR %d\n",GetLastError()); } else { printf("\n\t\t\tLogon Fault!!!\n"); return 0; } Суть проблемы в том что данный кусок кода выдает ошибку под номером 1314, ошибка сообщает что не хватает привелегий при попытке устнавить 3 (SeTcbPrivilege,SeIncreaseQuotaPrivilege,SeAssignPrimaryTokenPrivilege)привелегии с помощью ф-ии: Код (Text): BOOL SetPrivilege(LPCSTR lpszPrivilege,BOOL bEnablePrivilege) { TOKEN_PRIVILEGES tp; LUID luid; HANDLE hToken; if ( !LookupPrivilegeValueA( NULL, // lookup privilege on local system lpszPrivilege, // privilege to lookup &luid ) ) // receives LUID of privilege { printf("\n\t\t\tLookupPrivilegeValue error: %u\n", GetLastError() ); return FALSE; } if(OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES|TOKEN_ADJUST_DEFAULT|TOKEN_ASSIGN_PRIMARY, &hToken)) { tp.PrivilegeCount = 1; } else { printf("\n\t\t\tOpenProcessToken ERROR #%u\n",GetLastError()); return FALSE; } tp.Privileges[0].Luid = luid; if (bEnablePrivilege) tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; else tp.Privileges[0].Attributes = 0; // Enable the privilege or disable all privileges. if ( !AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL) ) { printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); return FALSE; } if (GetLastError() == ERROR_NOT_ALL_ASSIGNED) { printf("\n\t\t\tThe token does not have the specified privilege. \n"); return FALSE; } // CloseHandle(hToken); return TRUE; } вот таким способом Код (Text): if(!SetPrivilege(LPCSTR("SeAssignPrimaryTokenPrivilege"),TRUE)) printf("\n\t\t\tERROR_0 %d\n",GetLastError()); if(!SetPrivilege(LPCSTR("SeIncreaseQuotaPrivilege"),TRUE)) printf("\n\t\t\tERROR_1 %d\n",GetLastError()); if(!SetPrivilege(LPCSTR("SeTcbPrivilege"),TRUE)) printf("\n\t\t\tERROR_2 %d\n",GetLastError()); сообщает мне что SeAssignPrimaryTokenPrivilege и SeTcbPrivilege нет в токене, вопрос собственно как добавить:? в токен
А добавить их можно при помощи LSA (см. LsaAddAccountRights), однако учитывая то, что добавление привилегий это изменение политики безопасности, то в силу они вступят только в новом сеансе пользователя.