windows登陆:gina。如何在自己的gina中的WlxLoggedOutSAS,用LogonUser登陆。(老是死机!!!!???)

xyz_mw 2005-02-24 03:36:13
1。写了个gina,如果全部转调用 msgnia的wlx函数,ok
2。我用msdn上的类似代码替换了WlxLoggedOutSAS,程序调WlxActiveUserShell失败
3。我用msdn上的类似代码替换了WlxLoggedOutSAS,WlxActiveUserShell,进入桌面之后,马上crash掉!!!!!
哪位高人做过gina,指点一下!谢谢
...全文
441 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyz_mw 2005-02-25
  • 打赏
  • 举报
回复
to:wangk(倒之) ,其它我当然多导向到msgnia。
legendhui 2005-02-25
  • 打赏
  • 举报
回复
up
wangk 2005-02-25
  • 打赏
  • 举报
回复
你的gina必须有msgnia的所有导出函数。
简而言之,就是即使你替换一个函数,也要把其他的都导向msgnia的wlx函数。
xyz_mw 2005-02-25
  • 打赏
  • 举报
回复
当然是这一段,这两端代码更本不能用的。今天网上看了pgina的资料,写pgina的那些人多没调试出来,LongonUser只是用来验证用户,然后写注册表自动登陆。最终还是要调用的msgina的WlxLoggedOutSAS 完事。看来,我也只能这样了。msdn害人不浅,浪费我这么多时间,kao
xuzheng318 2005-02-25
  • 打赏
  • 举报
回复
帮楼主顶,关注!
wangk 2005-02-25
  • 打赏
  • 举报
回复
BOOL WINAPI
WlxActivateUserShell (
PVOID pWlxContext,
PWSTR pszDesktopName,
PWSTR pszMprLogonScript,
PVOID pEnvironment)
{
PGINA_CONTEXT pgContext = (PGINA_CONTEXT) pWlxContext;
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bRet;

// Setup STARTUPINFO to pass to CreateProcessAsUser.
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpTitle = L"userinit";
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L;
si.dwFlags = 0;
si.wShowWindow = SW_SHOW;
si.lpReserved2 = NULL;
si.cbReserved2 = 0;
si.lpDesktop = pszDesktopName;

// Determine and store the full path to userinit.exe in
// the pszUserInitApp variable (not shown).
// ...
// Create the process for Userinit.exe.
bRet = CreateProcessAsUser(pgContext->UserToken,
pszUserInitApp,
NULL, NULL, NULL, FALSE,
CREATE_UNICODE_ENVIRONMENT,
pEnvironment,
NULL,
&si,
&pi );

// Release the memory winlogon allocated for the environment.
VirtualFree(pEnvironment, 0, MEM_RELEASE);
return bRet;
}
wangk 2005-02-25
  • 打赏
  • 举报
回复
那你的代码是MSDN上的这一段吗?
int WINAPI WlxLoggedOutSAS (
PVOID pWlxContext,
DWORD dwSasType,
PLUID pAuthenticationId,
PSID pLogonSid,
PDWORD pdwOptions,
PHANDLE phToken,
PWLX_MPR_NOTIFY_INFO pMprNotifyInfo,
PVOID * pProfile)
{

PGINA_CONTEXT pgContext = (PGINA_CONTEXT) pWlxContext;
TOKEN_STATISTICS userStats;
DWORD cbStats;

if (!phToken)
return WLX_SAS_ACTION_NONE;

// Attempt to log on the user.
// Assignments for pwszUser, pwszDomain, and pwszPassword
// handled elsewhere.
if (!LogonUser(pwszUser,
pwszDomain,
pwszPassword,
LOGON32_LOGON_UNLOCK,
LOGON32_PROVIDER_DEFAULT,
phToken))
return WLX_SAS_ACTION_NONE;

// Check the user token.
if (!(*phToken)) {
return WLX_SAS_ACTION_NONE;
}

// Save the user token in the GINA context
pgContext->UserToken =*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))
{
return WLX_SAS_ACTION_NONE;
}
else
{
*pAuthenticationId = userStats.AuthenticationId;
}

// Pass back multiple provider information.
pMprNotifyInfo->pszUserName = DupString(pwszUser);
pMprNotifyInfo->pszDomain = DupString(pwszDomain);
pMprNotifyInfo->pszPassword = DupString(pwszPassword);
pMprNotifyInfo->pszOldPassword = NULL;

return WLX_SAS_ACTION_LOGON;
}

PWSTR DupString(PWSTR pszString)
{
DWORD cbString;
PWSTR pszNewString;

cbString = (wcslen(pszString) + 1) * sizeof(WCHAR);
pszNewString = LocalAlloc(LMEM_FIXED, cbString);
if (pszNewString)
{
CopyMemory(pszNewString, pszString, cbString);
}
return(pszNewString);
}
lifeship 2005-02-24
  • 打赏
  • 举报
回复
自己钻研把!

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧