Процесс регистрации пользователя.

int WINAPI WlxLoggedOutSAS( PVOID pWlxContext,DWORD dwSasType,PLUID pAuthenticationId,PSID pLogonSid,
PDWORD pdwOptions,PHANDLE phToken,PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,PVOID *pProfile )
{
	LPGINA_CONTEXT		lpContext	= (LPGINA_CONTEXT)pWlxContext;
	int			nRet;
	CCredDlg*		lpDialog;
	WLX_PROFILE_V1_0	wlxProfile;
	WLX_PROFILE_V1_0*	lpProfile	= NULL;
	LPWSTR			wszUserName = NULL;
	LPWSTR			wszUserPassword = NULL;
	LPWSTR			wszUserDomain = NULL;
	*pdwOptions = WLX_LOGON_OPT_NO_PROFILE;
	*pProfile = NULL;
	ZeroMemory( &wlxProfile,sizeof(WLX_PROFILE_V1_0) );
	if( !phToken )
		return WLX_SAS_ACTION_NONE;
	lpDialog = new CCredDlg( lpContext );
	nRet = lpDialog->ShowModal();
	if( nRet == WLX_DLG_SAS )
	{
		lpDialog->GetCredentials( wszUserName,wszUserDomain,wszUserPassword );
		wszUserName = DupString( wszUserName );
		wszUserPassword = DupString( wszUserPassword );
		wszUserDomain = DupString( wszUserDomain );
	}
	delete lpDialog;
	if( nRet != WLX_DLG_SAS )
		return WLX_SAS_ACTION_NONE;
	nRet = WLX_SAS_ACTION_NONE;
	if( ( DoLogon( wszUserName,wszUserDomain,wszUserPassword,phToken,&wlxProfile ) == STATUS_SUCCESS )
 && ( *phToken ) )
	{
		if( GetLogonSID( *phToken,pAuthenticationId,pLogonSid ) )
		{
			CopySid( GetLengthSid(&lpContext->sid),&lpContext->sid,pLogonSid );
			lpContext->hUserToken = *phToken;
			lpProfile = (WLX_PROFILE_V1_0*)LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT,sizeof
(WLX_PROFILE_V1_0) );
			if( lpProfile != NULL )
			{
				lpProfile->dwType = wlxProfile.dwType;
				lpProfile->pszProfile = DupString( wlxProfile.pszProfile );
				*pdwOptions = 0;
			}
			pNprNotifyInfo->pszUserName = DupString( wszUserName );
			pNprNotifyInfo->pszDomain = DupString( wszUserDomain );
			pNprNotifyInfo->pszPassword = DupString( wszUserPassword );
			pNprNotifyInfo->pszOldPassword = NULL;
			nRet = WLX_SAS_ACTION_LOGON;
		}
		FreeString( wlxProfile.pszProfile );
	}

	FreeCredentials( wszUserName,wszUserDomain,wszUserPassword );
	return nRet;
}