NT user validation

4 отговора 185 прегледа
#1

NT user validation

nqkoj znae li kak pod nt sas VC moze da se proveri po user/pass usera dali e validen za nt-to i kakvi sa mu pravata

Отговор
в отговор на KpyM #2

Re: NT user validation

Probvai sys Access Control ot Platform SDK-to, vij OpenProcessToken, GetTokenInformation i CheckTokenMembership ....

Отговор
в отговор на Goose #3

Re: NT user validation

Bez MSDN niama da minesh. Opitai NetUserGetInfo(...) ot Platform SDK-to, no ot Network Management.

Uspeh.

Отговор
в отговор на KpyM #4

Re: NT user validation

bool IsValidUser(const char * domain, const char * name, const char * password)
{
void* ID = 0;
bool Result;

Result = LogonUser(name, domain, password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &ID);

CloseHandle(ID);

return Result;
}

За правата трябва да попрочетеш Security в Help-a.

Отговор
в отговор на GG #5

Re: NT user validation

Edno malko utochenie, pod W2K za da izvikash LogonUser procesa triabva da ima SE_TCB_NAME privilegia, tia moje da se setne po slednia nachin:

HANDLE hProc;
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hProc);
SetPrivilege(hProc, SE_TCB_NAME, TRUE);

kudeto SetPrivilege e slednata funkcia:

BOOL SetPrivilege(
HANDLE hToken,
LPCSTR Privilege, // Privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
TOKEN_PRIVILEGES tpPrevious;
DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES);
BOOL bSuccess=FALSE;

if(!LookupPrivilegeValue(NULL, Privilege, &luid))
return FALSE;
//
// first pass. get current privilege setting
//
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = 0;

AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
&tpPrevious,
&cbPrevious
);

if(GetLastError() == ERROR_SUCCESS) {
//
// second pass. set privilege based on previous setting
//
tpPrevious.PrivilegeCount = 1;
tpPrevious.Privileges[0].Luid = luid;

if(bEnablePrivilege) {
tpPrevious.Privileges[0].Attributes |=
(SE_PRIVILEGE_ENABLED);
}
else {
tpPrevious.Privileges[0].Attributes ^=
(SE_PRIVILEGE_ENABLED &
tpPrevious.Privileges[0].Attributes);
}

AdjustTokenPrivileges(
hToken,
FALSE,
&tpPrevious,
cbPrevious,
NULL,
NULL
);

if (GetLastError() == ERROR_SUCCESS) bSuccess=TRUE;
}

return bSuccess;
}

Отговор