Есть проблема...
Надо в процесе логона, после того как юзер ввел имя , узнать его имя....
Но перед тем как виполниться запуск UserShell.
Все єто используя надстройку над MSGINA...
Заранее благодарен...
Здравствуйте, Тарик, Вы писали:
Т>Есть проблема... Т>Надо в процесе логона, после того как юзер ввел имя , узнать его имя.... Т>Но перед тем как виполниться запуск UserShell. Т>Все єто используя надстройку над MSGINA... Т>Заранее благодарен...
И в чём проблема? В WlxLoggedOutSAS вызываешь оригинальную функцию из msgina, но не возвращаешь результат сразу, а смотришь по указателю на структуру PWLX_MPR_NOTIFY_INFO -- там и лежит введённое имя пользователя и пароль. Делаешь что хочеш. Если msgina вернула WLX_SAS_ACTION_LOGON значит указаный пользователь авторизирован, и вход в систему будет выполнен.
Запуск UserShell произойдёт позже в WlxActivateUserShell.
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Здравствуйте, server_mouse, Вы писали:
_>Здравствуйте, Тарик, Вы писали:
Т>>Есть проблема... Т>>Надо в процесе логона, после того как юзер ввел имя , узнать его имя.... Т>>Но перед тем как виполниться запуск UserShell. Т>>Все єто используя надстройку над MSGINA... Т>>Заранее благодарен...
_>И в чём проблема? В WlxLoggedOutSAS вызываешь оригинальную функцию из msgina, но не возвращаешь результат сразу, а смотришь по указателю на структуру PWLX_MPR_NOTIFY_INFO -- там и лежит введённое имя пользователя и пароль. Делаешь что хочеш. Если msgina вернула WLX_SAS_ACTION_LOGON значит указаный пользователь авторизирован, и вход в систему будет выполнен. _>Запуск UserShell произойдёт позже в WlxActivateUserShell.
Пробовал.... Или пустая строка или випадает в систему с ошибкой....
Может я не правлиьно работал с PWSTR типом...
Подскажите как его перевести в какойнибудь стандартний...
Здравствуйте, Тарик, Вы писали:
Т>Пробовал.... Или пустая строка или випадает в систему с ошибкой.... Т>Может я не правлиьно работал с 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;
}
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Здравствуйте, 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".
Что это значит...????
Здравствуйте, Тарик, Вы писали:
Т>Большое спасибо..... Т>Помогло.... Т>Но еще вопрос...
Т>Изменяем пример так: Т>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!
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус
Я действительно немного не точто написал гипотетический пример, но это не даёт право так ошибаться вам в реальной программе. Просто уберите char* после if(WLX_SAS_ACTION_LOGON==nRet){
Повреждение мозга после ректальной биопсии — редкая штука (с) Хаус