Имя пользователя в процесе логона
От: Тарик Украина  
Дата: 10.10.03 21:55
Оценка:
Есть проблема...
Надо в процесе логона, после того как юзер ввел имя , узнать его имя....
Но перед тем как виполниться запуск UserShell.
Все єто используя надстройку над MSGINA...
Заранее благодарен...
Re: Имя пользователя в процесе логона
От: server_mouse Беларусь about:blank
Дата: 10.10.03 22:09
Оценка:
Здравствуйте, Тарик, Вы писали:

Т>Есть проблема...

Т>Надо в процесе логона, после того как юзер ввел имя , узнать его имя....
Т>Но перед тем как виполниться запуск UserShell.
Т>Все єто используя надстройку над MSGINA...
Т>Заранее благодарен...

И в чём проблема? В WlxLoggedOutSAS вызываешь оригинальную функцию из msgina, но не возвращаешь результат сразу, а смотришь по указателю на структуру PWLX_MPR_NOTIFY_INFO -- там и лежит введённое имя пользователя и пароль. Делаешь что хочеш. Если msgina вернула WLX_SAS_ACTION_LOGON значит указаный пользователь авторизирован, и вход в систему будет выполнен.
Запуск UserShell произойдёт позже в WlxActivateUserShell.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[2]: Имя пользователя в процесе логона
От: Тарик Украина  
Дата: 10.10.03 23:26
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Здравствуйте, Тарик, Вы писали:


Т>>Есть проблема...

Т>>Надо в процесе логона, после того как юзер ввел имя , узнать его имя....
Т>>Но перед тем как виполниться запуск UserShell.
Т>>Все єто используя надстройку над MSGINA...
Т>>Заранее благодарен...

_>И в чём проблема? В WlxLoggedOutSAS вызываешь оригинальную функцию из msgina, но не возвращаешь результат сразу, а смотришь по указателю на структуру PWLX_MPR_NOTIFY_INFO -- там и лежит введённое имя пользователя и пароль. Делаешь что хочеш. Если msgina вернула WLX_SAS_ACTION_LOGON значит указаный пользователь авторизирован, и вход в систему будет выполнен.

_>Запуск UserShell произойдёт позже в WlxActivateUserShell.

Пробовал.... Или пустая строка или випадает в систему с ошибкой....
Может я не правлиьно работал с PWSTR типом...
Подскажите как его перевести в какойнибудь стандартний...
Re[3]: Имя пользователя в процесе логона
От: server_mouse Беларусь about:blank
Дата: 11.10.03 08:44
Оценка:
Здравствуйте, Тарик, Вы писали:

Т>Пробовал.... Или пустая строка или випадает в систему с ошибкой....

Т>Может я не правлиьно работал с PWSTR типом...
Т>Подскажите как его перевести в какойнибудь стандартний...

Вот пример:
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,PVOID *pProfile)
{
    char *sLogin=NULL;
//Вызываем оригинальную гину
    int nRet=Wlxtbl.WlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
    if(WLX_SAS_ACTION_LOGON==nRet)
    {
        //Если логон успешный - тырим логин...
        char *sLogin=new char[wcslen(pNprNotifyInfo->pszUserName)+1];
        sprintf(sLogin,"%ws",pNprNotifyInfo->pszUserName);
    }
//Ну во и всё. Если всё намана, логин лежит в sLogin...
//..... делаем свои чудеса
    return nRet;
}
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[4]: Имя пользователя в процесе логона
От: Тарик Украина  
Дата: 11.10.03 18:49
Оценка:
Здравствуйте, server_mouse, Вы писали:

_>Здравствуйте, Тарик, Вы писали:


Т>>Пробовал.... Или пустая строка или випадает в систему с ошибкой....

Т>>Может я не правлиьно работал с PWSTR типом...
Т>>Подскажите как его перевести в какойнибудь стандартний...

_>Вот пример:

_>
_>int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,PVOID *pProfile)
_>{
_>    char *sLogin=NULL;
_>//Вызываем оригинальную гину
_>    int nRet=Wlxtbl.WlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
_>    if(WLX_SAS_ACTION_LOGON==nRet)
_>    {
_>        //Если логон успешный - тырим логин...
_>        char *sLogin=new char[wcslen(pNprNotifyInfo->pszUserName)+1];
_>        sprintf(sLogin,"%ws",pNprNotifyInfo->pszUserName);
_>    }
_>//Ну во и всё. Если всё намана, логин лежит в sLogin...
_>//..... делаем свои чудеса
_>    return nRet;
_>}
_>


Большое спасибо.....
Помогло....
Но еще вопрос...

Изменяем пример так:
int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,PVOID *pProfile)
{
char *sLogin=NULL;
//Вызываем оригинальную гину
int nRet=Wlxtbl.WlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
if(WLX_SAS_ACTION_LOGON==nRet)
{
//Если логон успешный — тырим логин...
char *sLogin=new char[wcslen(pNprNotifyInfo->pszUserName)+1];
sprintf(sLogin,"%ws",pNprNotifyInfo->pszUserName);
MessageBox(NULL,TEXT(sLogin),TEXT(sLogin),MB_OK);
}
MessageBox(NULL,TEXT(sLogin),TEXT(sLogin),MB_OK);
//Ну во и всё. Если всё намана, логин лежит в sLogin...
//..... делаем свои чудеса
return nRet;
}

В итоге первый месаге бокс показывает логин
а второй говорит ерор... и не показывет логин....

Если убрать первый то второй тоже не показывает логин а только пустую срочку с названием
окна "Error".
Что это значит...????
Re[5]: Имя пользователя в процесе логона
От: server_mouse Беларусь about:blank
Дата: 13.10.03 12:33
Оценка:
Здравствуйте, Тарик, Вы писали:

Т>Большое спасибо.....

Т>Помогло....
Т>Но еще вопрос...

Т>Изменяем пример так:

Т>int WINAPI WlxLoggedOutSAS(PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,PVOID *pProfile)
Т>{
Т> char *sLogin=NULL;
Т>//Вызываем оригинальную гину
Т> int nRet=Wlxtbl.WlxLoggedOutSAS(pWlxContext,dwSasType,pAuthenticationId,pLogonSid,pdwOptions,phToken,pMprNotifyInfo,pProfile);
Т> if(WLX_SAS_ACTION_LOGON==nRet)
Т> {
Т> //Если логон успешный — тырим логин...
Т> char *sLogin=new char[wcslen(pNprNotifyInfo->pszUserName)+1];
Т> sprintf(sLogin,"%ws",pNprNotifyInfo->pszUserName);
Т> MessageBox(NULL,TEXT(sLogin),TEXT(sLogin),MB_OK);
Т> }
Т> MessageBox(NULL,TEXT(sLogin),TEXT(sLogin),MB_OK);
Т>//Ну во и всё. Если всё намана, логин лежит в sLogin...
Т>//..... делаем свои чудеса
Т> return nRet;
Т>}

Т>В итоге первый месаге бокс показывает логин

Т>а второй говорит ерор... и не показывет логин....

Т>Если убрать первый то второй тоже не показывает логин а только пустую срочку с названием

Т>окна "Error".
Т>Что это значит...????

Во первых, рекомендую пользоваться спец. тэгами для выделения кода -- читать просто "сваленый в кучу" код просто неприятно.

Во вторых, касательно вашего вопроса -- вам в форум по C/C++. Изучение языка не является темой этого форума. Скажу только, что в первом случае вы использовали стековую переменную sLogin в пределах if(WLX_SAS_ACTION_LOGON==nRet), а во втором, стековую sLogin в пределах функции, которая исесно равна NULL!
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Re[5]: Имя пользователя в процесе логона
От: server_mouse Беларусь about:blank
Дата: 13.10.03 12:39
Оценка:
Я действительно немного не точто написал гипотетический пример, но это не даёт право так ошибаться вам в реальной программе. Просто уберите char* после if(WLX_SAS_ACTION_LOGON==nRet){
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.