//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1993 - 2000. // // File: cpl.cpp // // Contents: Control Panel entry point (CPlApplet) // //---------------------------------------------------------------------------- #include "stdafx.h" #include // REGSTR_PATH_POLICIES #include // NetGetJoinInformation #include #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; }