windows-nt/Source/XPSP1/NT/shell/cpls/nusrmgr/cpl.cpp
2020-09-26 16:20:57 +08:00

118 lines
2.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1993 - 2000.
//
// File: cpl.cpp
//
// Contents: Control Panel entry point (CPlApplet)
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include <regstr.h> // REGSTR_PATH_POLICIES
#include <lm.h> // NetGetJoinInformation
#include <cpl.h>
#include "resource.h"
const struct
{
LPCTSTR pszApp;
LPCTSTR pszCommand;
}
s_rgCommands[] =
{
{ TEXT("%SystemRoot%\\system32\\rundll32.exe"), TEXT("rundll32.exe \"%SystemRoot%\\system32\\netplwiz.dll\",UsersRunDll") },
{ TEXT("%SystemRoot%\\system32\\mshta.exe"), TEXT("mshta.exe \"res://%SystemRoot%\\system32\\nusrmgr.cpl/nusrmgr.hta\"") },
};
TCHAR const c_szPolicyKey[] = REGSTR_PATH_POLICIES TEXT("\\Explorer");
TCHAR const c_szPolicyVal[] = TEXT("UserPasswordsVer");
HRESULT StartUserManager(LPCTSTR pszParams)
{
TCHAR szApp[MAX_PATH];
TCHAR szCommand[MAX_PATH];
int iCommandIndex;
STARTUPINFO rgStartup = {0};
PROCESS_INFORMATION rgProcess = {0};
// Default is to use the old UI
iCommandIndex = 0;
#ifndef _WIN64
if (IsOS(OS_PERSONAL) || (IsOS(OS_PROFESSIONAL) && !IsOS(OS_DOMAINMEMBER)))
{
// Switch to the friendly UI.
iCommandIndex = 1;
}
#endif
ExpandEnvironmentStrings(s_rgCommands[iCommandIndex].pszApp, szApp, MAX_PATH);
ExpandEnvironmentStrings(s_rgCommands[iCommandIndex].pszCommand, szCommand, MAX_PATH);
if (pszParams && *pszParams != TEXT('\0'))
{
StrCatBuff(szCommand, TEXT(" "), MAX_PATH);
StrCatBuff(szCommand, pszParams, MAX_PATH);
}
rgStartup.cb = sizeof(rgStartup);
rgStartup.wShowWindow = SW_SHOWNORMAL;
if (CreateProcess(szApp,
szCommand,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&rgStartup,
&rgProcess))
{
WaitForInputIdle( rgProcess.hProcess, 10000 );
CloseHandle( rgProcess.hProcess );
CloseHandle( rgProcess.hThread );
return S_OK;
}
return E_FAIL;
}
LONG APIENTRY CPlApplet(HWND hwnd, UINT Msg, LPARAM lParam1, LPARAM lParam2)
{
LPCPLINFO lpCplInfo;
switch (Msg)
{
case CPL_INIT:
return TRUE;
case CPL_GETCOUNT:
return 1;
case CPL_INQUIRE:
lpCplInfo = (LPCPLINFO)lParam2;
lpCplInfo->idIcon = IDI_CPLICON;
lpCplInfo->idName = IDS_NAME;
lpCplInfo->idInfo = IDS_INFO;
lpCplInfo->lData = 0;
break;
case CPL_DBLCLK:
StartUserManager(NULL);
return TRUE;
case CPL_STARTWPARMS:
StartUserManager((LPCTSTR)lParam2);
return TRUE;
}
return 0;
}