NT user validation
4 отговора
185 прегледа
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
Re: NT user validation
Probvai sys Access Control ot Platform SDK-to, vij OpenProcessToken, GetTokenInformation i CheckTokenMembership ....
Re: NT user validation
Bez MSDN niama da minesh. Opitai NetUserGetInfo(...) ot Platform SDK-to, no ot Network Management.
Uspeh.
Uspeh.
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.
{
void* ID = 0;
bool Result;
Result = LogonUser(name, domain, password, LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, &ID);
CloseHandle(ID);
return Result;
}
За правата трябва да попрочетеш Security в Help-a.
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;
}
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;
}