|
RE: Users' profile unsaved
int WINAPI WlxLoggedOutSAS (
PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{
BOOL bret;
PGINA_CONTEXT pgContext = (PGINA_CONTEXT) pWlxContext;
TOKEN_STATISTICS userStats;
TOKEN_GROUPS * pGroups;
DWORD cbStats;
DWORD size,i;
if(MY_SAS_TYPE!=dwSasType)
return WLX_SAS_ACTION_NONE;
//FILE *fp=fopen("c:\\gina.txt","at");
//fprintf(fp,"Entering LogedOutSAS\n");
SL_WLX_MESSAGEBOX(pgContext->hWlx, NULL, L"MY_SAS_TYPE coming",
L"WlxLoggedOutSAS", MB_OK);
#if 0
ret = pgContext->pWlxFuncs->WlxDialogBox(pgContext->hWlx,
pgContext->hDllInstance,
(LPWSTR)MAKEINTRESOURCE(IDD_INSERT_CARD_NOTICE_DIALOG),
NULL,
DisplaySASNoticeDlgProc
);
if(ret==IDCANCEL)
{
return WLX_SAS_ACTION_SHUTDOWN;
}
if (ret != IDC_LOGON_BUTTON)
{
return WLX_SAS_ACTION_NONE;
}
#endif
if (!phToken)
return WLX_SAS_ACTION_NONE;
//while(1)
{
{
wchar_t msg[64] = {0};
memset(msg, 0, 64);
mbstowcs(msg, g_lpDomain, strlen(g_lpDomain));
SL_WLX_MESSAGEBOX(pgContext->hWlx, NULL, msg, msg, MB_OK);
memset(msg, 0, 64);
mbstowcs(msg, g_lpPassword, strlen(g_lpPassword));
SL_WLX_MESSAGEBOX(pgContext->hWlx, NULL, msg, msg, MB_OK);
memset(msg, 0, 64);
mbstowcs(msg, g_lpUserName, strlen(g_lpUserName));
SL_WLX_MESSAGEBOX(pgContext->hWlx, NULL, msg, msg, MB_OK);
}
SystemLog_C("before LogonUser");
if (!LogonUser(//"administrator",//
g_lpUserName,
//"alex",//
g_lpDomain,
//"jd",//
g_lpPassword,
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
phToken))
{
//
// ????????????
//
ErrorCode = GetLastError();
do {bret = SetEvent(hEvent);}while(bret == 0);
SystemLog_C("after LogonUser");
return WLX_SAS_ACTION_NONE;
#if 0
ret = pgContext->pWlxFuncs->WlxDialogBox(pgContext->hWlx,
pgContext->hDllInstance,
(LPWSTR)MAKEINTRESOURCE(IDD_WIN_LOGON_DIALOG),
NULL,
UpdateWindowsUserDlgProc
);
if (ret != IDOK)
{
return WLX_SAS_ACTION_NONE;
}
#endif
}
}
SystemLog_C("after LogonUser");
pgContext->hUserToken=*phToken;
// Pass back null profile and options.
*pdwOptions = 0;
*pProfile =NULL;
// Get the authenticationid from the user token.
if (!GetTokenInformation(*phToken,
TokenStatistics,
(PVOID) &userStats,
sizeof(TOKEN_STATISTICS),
&cbStats))
{
ErrorCode = GetLastError();
do {bret = SetEvent(hEvent);}while(bret == 0);
SystemLog_C("after GetTokenInformation");
return WLX_SAS_ACTION_NONE;
}
else
{
*pAuthenticationId = userStats.AuthenticationId;
}
SystemLog_C("after GetTokenInformation");
pGroups = (TOKEN_GROUPS *)LocalAlloc(LMEM_FIXED, 1024);
////////////////////
GetTokenInformation(*phToken,
TokenGroups,
pGroups,
1024,
&size);
SystemLog_C("after GetTokenInformation");
if (size > 1024)
{
pGroups = (TOKEN_GROUPS *)LocalReAlloc(pGroups, LMEM_FIXED, size);
GetTokenInformation(*phToken,
TokenGroups,
pGroups,
size,
&size);
SystemLog_C("after GetTokenInformation");
}
// fprintf(fp,"Check Point 2");
for (i = 0; i < pGroups->GroupCount ; i++)
{
if ((pGroups->Groups[i].Attributes & SE_GROUP_LOGON_ID) ==
SE_GROUP_LOGON_ID)
{
CopySid(GetLengthSid(pLogonSid),
pLogonSid,
pGroups->Groups[i].Sid );
break;
}
}
SystemLog_C("before LocalFree");
LocalFree(pGroups);
////////////////////
// fprintf(fp,"After GetTokenInformation\n");
// Pass back multiple provider information.
pMprNotifyInfo->pszUserName=DupMbToWsString(g_lpUserName);
pMprNotifyInfo->pszDomain=DupMbToWsString(g_lpDomain);
pMprNotifyInfo->pszPassword=DupMbToWsString(g_lpPassword);
pMprNotifyInfo->pszOldPassword = NULL;
memset(g_lpLastLogedOnUserName, 0, 50);
memcpy(g_lpLastLogedOnUserName, g_lpUserName, strlen(g_lpUserName));
memset(g_lpLastLogedOnDomain, 0, 100);
memcpy(g_lpLastLogedOnDomain, g_lpDomain, strlen(g_lpDomain));
bLogedOff = FALSE;
bLogedOn = TRUE;
ErrorCode = 0;
do {bret = SetEvent(hEvent);}while(bret == 0);
SL_WLX_MESSAGEBOX(pgContext->hWlx, NULL, L"logon success, event set",
L"WlxLoggedOutSAS", MB_OK);
SystemLog_C("Leaving LogedOutSAS");
// fprintf(fp,"Leaving LogedOutSAS\n");
// fclose(fp);
return WLX_SAS_ACTION_LOGON;
}
Here is my WlxLoggedOutSAS code.
|