Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как заставить работать код в Builder'е

6.0K
13 сентября 2007 года
Tramp
71 / / 25.07.2006
Помогите пожалуйста:
Код:
BOOL CheckPassword_LogonUser(
IN PCTSTR pszDomainName,
IN PCTSTR pszUserName,
IN PCTSTR pszPassword,
OUT PHANDLE phToken
)
{
_ASSERTE(pszUserName != NULL);
_ASSERTE(pszPassword != NULL);

HANDLE hToken;

TCHAR szDomainName[DNLEN + 1];
TCHAR szUserName[UNLEN + 1];
TCHAR szPassword[PWLEN + 1];

if (pszDomainName == NULL)
{
BYTE bSid[8 + 4 * SID_MAX_SUB_AUTHORITIES];
ULONG cbSid = sizeof(bSid);
ULONG cchDomainName = countof(szDomainName);
SID_NAME_USE Use;

if (!LookupAccountName(NULL, pszUserName, (PSID)bSid, &cbSid,
szDomainName, &cchDomainName, &Use))
return FALSE;
}
else
lstrcpyn(szDomainName, pszDomainName, countof(szDomainName));

lstrcpyn(szUserName, pszUserName, countof(szUserName));
lstrcpyn(szPassword, pszPassword, countof(szPassword));

if (!LogonUser(szUserName, szDomainName, szPassword,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
&hToken))
return FALSE;

if (phToken == NULL)
_VERIFY(CloseHandle(hToken));
else
*phToken = hToken;

return TRUE;
}


непонятно что такое countof, на MSDN'не не нашёл, и что такое _ASSERTE и _VERIFY. Возможно отработка исключения.
489
13 сентября 2007 года
NeO_u
277 / / 11.10.2006
Цитата: Tramp
Помогите пожалуйста:
Код:
BOOL CheckPassword_LogonUser(
IN PCTSTR pszDomainName,
IN PCTSTR pszUserName,
IN PCTSTR pszPassword,
OUT PHANDLE phToken
)
{
_ASSERTE(pszUserName != NULL);
_ASSERTE(pszPassword != NULL);

HANDLE hToken;

TCHAR szDomainName[DNLEN + 1];
TCHAR szUserName[UNLEN + 1];
TCHAR szPassword[PWLEN + 1];

if (pszDomainName == NULL)
{
BYTE bSid[8 + 4 * SID_MAX_SUB_AUTHORITIES];
ULONG cbSid = sizeof(bSid);
ULONG cchDomainName = countof(szDomainName);
SID_NAME_USE Use;

if (!LookupAccountName(NULL, pszUserName, (PSID)bSid, &cbSid,
szDomainName, &cchDomainName, &Use))
return FALSE;
}
else
lstrcpyn(szDomainName, pszDomainName, countof(szDomainName));

lstrcpyn(szUserName, pszUserName, countof(szUserName));
lstrcpyn(szPassword, pszPassword, countof(szPassword));

if (!LogonUser(szUserName, szDomainName, szPassword,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
&hToken))
return FALSE;

if (phToken == NULL)
_VERIFY(CloseHandle(hToken));
else
*phToken = hToken;

return TRUE;
}


непонятно что такое countof, на MSDN'не не нашёл, и что такое _ASSERTE и _VERIFY. Возможно отработка исключения.



_ASSERTE - что-то в роде блока if else(), т.е. если у тебя pszUserName == NULL, то прога вывалиться с ошибкой. - очень хорошо для отладки.
_VERIFY - тоже самое, проверяет успешно ли выполнена операция. в данном случае CloseHandle()
countof - функция подсчитывающая кол-во символов в нужной переменной, является самописной. (пологаю)
код скорее всего был написано на MS C++, т.к. в борланде (по крайней мере в 6м), _ASSERTE и _VERIFY нету.

ЗЫ: делай выводы и переписывай код, может тогда заработает.

1
13 сентября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: Tramp
непонятно что такое countof, на MSDN'не не нашёл, и что такое _ASSERTE и _VERIFY. Возможно отработка исключения.


_ASSERTE и _VERIFY - макросы, проверка значений на допустимость - ими можно пренебречь, соответственно выполнив ее самому.
По поводу countof - смотри здесь

6.0K
13 сентября 2007 года
Tramp
71 / / 25.07.2006
NeO_u и kot_ спасибо разобрался!:)
6.0K
13 сентября 2007 года
Tramp
71 / / 25.07.2006
Цитата:

Метод с использованием функции LogonUser весьма прост, но требует наличия TCB-привилегии у вызывающего.



не кто не в курсе, что за TCB-привелегии?

А вот что у меня получилось: ;)

Код:
[COLOR="Green"]#define countof( array ) ( sizeof( array )/sizeof( array[0] ) )[/COLOR]

bool CheckPassword_LogonUser(
const AnsiString DomainName,
const AnsiString UserName,
const AnsiString Password
)
{
const char* pszDomainName = DomainName.c_str();
const char* pszUserName   = UserName.c_str();
const char* pszPassword   = Password.c_str();

if (pszUserName == NULL) return false;
if (pszPassword == NULL) return false;

PHANDLE phToken;
HANDLE hToken;

TCHAR szDomainName[128];
TCHAR szUserName[128];
TCHAR szPassword[128];

if (pszDomainName == NULL)
{
BYTE bSid[8 + 4 * SID_MAX_SUB_AUTHORITIES];
ULONG cbSid = sizeof(bSid);
ULONG cchDomainName = countof(szDomainName);
SID_NAME_USE Use;

if (!LookupAccountName(NULL, pszUserName, (PSID)bSid, &cbSid,
szDomainName, &cchDomainName, &Use))
return false;
}
else
lstrcpyn(szDomainName, pszDomainName, countof(szDomainName));
lstrcpyn(szUserName, pszUserName, countof(szUserName));
lstrcpyn(szPassword, pszPassword, countof(szPassword));

if (!LogonUser(szUserName, szDomainName, szPassword,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT,
&hToken))
return false;

if (phToken == NULL)
        {
                try
                {
                 CloseHandle(hToken);
                }
                catch(...)
                {
                 return false;
                }
        }
else
*phToken = hToken;
return true;
}
[COLOR="#008000"]#undef countof( array )[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог