Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
secdlg.cpp
Package: shell.rar [view]
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 6k
Category:
Windows Kernel
Development Platform:
Visual C++
- /********************************************************
- secdlg.cpp
- User Manager security dialog implementation
- History:
- 09/23/98: dsheldon created
- ********************************************************/
- #include "stdafx.h"
- #include "resource.h"
- #include "secdlg.h"
- #include "misc.h"
- INT_PTR CSecurityCheckDlg::DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch(uMsg)
- {
- HANDLE_MSG(hwndDlg, WM_INITDIALOG, OnInitDialog);
- HANDLE_MSG(hwndDlg, WM_COMMAND, OnCommand);
- }
- return FALSE;
- }
- BOOL CSecurityCheckDlg::OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
- {
- TraceEnter(TRACE_USR_CORE, "CSecurityCheckDlg::OnInitDialog");
- BOOL fIsLocalAdmin;
- // First we must check if the current user is a local administrator; if this is
- // the case, our dialog doesn't even display
- if (SUCCEEDED(IsUserLocalAdmin(NULL, &fIsLocalAdmin)))
- {
- if (fIsLocalAdmin)
- {
- // We want to continue and launch the applet (don't display the security check dlg)
- EndDialog(hwnd, IDOK);
- }
- }
- else
- {
- TraceMsg("IsUserLocalAdmin failed");
- EndDialog(hwnd, IDCANCEL);
- }
- // Set the "can't launch User Options" message
- TCHAR szUsername[MAX_USER + 1];
- DWORD cchUsername = ARRAYSIZE(szUsername);
- TCHAR szDomain[MAX_DOMAIN + 1];
- DWORD cchDomain = ARRAYSIZE(szDomain);
- if (GetCurrentUserAndDomainName(szUsername, &cchUsername, szDomain,
- &cchDomain))
- {
- TCHAR szDomainAndUsername[MAX_DOMAIN + MAX_USER + 2];
- MakeDomainUserString(szDomain, szUsername, szDomainAndUsername,
- ARRAYSIZE(szDomainAndUsername));
- TCHAR szMessage[256];
- if (FormatMessageString(IDS_USR_CANTRUNCPL_FORMAT, szMessage, ARRAYSIZE(szMessage), szDomainAndUsername))
- {
- SetWindowText(GetDlgItem(hwnd, IDC_CANTRUNCPL_STATIC), szMessage);
- }
- TCHAR szAdministrator[MAX_USER + 1];
- LoadString(g_hInstance, IDS_ADMINISTRATOR, szAdministrator,
- ARRAYSIZE(szAdministrator));
- SetWindowText(GetDlgItem(hwnd, IDC_USER), szAdministrator);
- TCHAR szMachine[MAX_COMPUTERNAME + 1];
- DWORD dwSize = ARRAYSIZE(szMachine);
- ::GetComputerName(szMachine, &dwSize);
- SetWindowText(GetDlgItem(hwnd, IDC_DOMAIN), szMachine);
- }
- // Limit the text in the edit fields
- HWND hwndUsername = GetDlgItem(hwnd, IDC_USER);
- Edit_LimitText(hwndUsername, MAX_USER);
- HWND hwndDomain = GetDlgItem(hwnd, IDC_DOMAIN);
- Edit_LimitText(hwndDomain, MAX_DOMAIN);
- HWND hwndPassword = GetDlgItem(hwnd, IDC_PASSWORD);
- Edit_LimitText(hwndPassword, MAX_PASSWORD);
- if (!IsComputerInDomain())
- {
- // Don't need domain box
- EnableWindow(hwndDomain, FALSE);
- ShowWindow(hwndDomain, SW_HIDE);
- ShowWindow(GetDlgItem(hwnd, IDC_DOMAIN_STATIC), SW_HIDE);
- // Move up the OK/Cancel buttons and text and shrink the dialog
- RECT rcDomain;
- GetWindowRect(hwndDomain, &rcDomain);
- RECT rcPassword;
- GetWindowRect(hwndPassword, &rcPassword);
- int dy = (rcPassword.top - rcDomain.top);
- // dy is negative
- OffsetWindow(GetDlgItem(hwnd, IDOK), 0, dy);
- OffsetWindow(GetDlgItem(hwnd, IDCANCEL), 0, dy);
- OffsetWindow(GetDlgItem(hwnd, IDC_PASSWORD_STATIC), 0, dy);
- RECT rcDialog;
- GetWindowRect(hwnd, &rcDialog);
- rcDialog.bottom += dy;
- MoveWindow(hwnd, rcDialog.left, rcDialog.top, rcDialog.right-rcDialog.left,
- rcDialog.bottom-rcDialog.top, FALSE);
- }
- TraceLeaveValue(TRUE);
- }
- BOOL CSecurityCheckDlg::OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
- {
- TraceEnter(TRACE_USR_CORE, "CSecurityCheckDlg::OnCommand");
- BOOL fReturn = FALSE;
- switch (id)
- {
- case IDOK:
- if (SUCCEEDED(RelaunchAsUser(hwnd)))
- {
- EndDialog(hwnd, IDCANCEL);
- }
- fReturn = TRUE;
- break;
- case IDCANCEL:
- EndDialog(hwnd, IDCANCEL);
- fReturn = TRUE;
- break;
- }
- TraceLeaveValue(fReturn);
- }
- HRESULT CSecurityCheckDlg::RelaunchAsUser(HWND hwnd)
- {
- TraceEnter(TRACE_USR_CORE, "CSecurityCheckDlg::RelaunchAsUser");
- USES_CONVERSION;
- HRESULT hr = E_FAIL;
- TCHAR szUsername[MAX_USER + 1];
- FetchText(hwnd, IDC_USER, szUsername, ARRAYSIZE(szUsername));
- TCHAR szDomain[MAX_DOMAIN + 1];
- FetchText(hwnd, IDC_DOMAIN, szDomain, ARRAYSIZE(szDomain));
- // If the user didn't type a domain
- if (szDomain[0] == TEXT(''))
- {
- // Use this machine as the domain
- DWORD cchComputername = ARRAYSIZE(szDomain);
- ::GetComputerName(szDomain, &cchComputername);
- }
- TCHAR szPassword[MAX_PASSWORD + 1];
- GetWindowText(GetDlgItem(hwnd, IDC_PASSWORD), szPassword, ARRAYSIZE(szPassword));
- // Now relaunch ourselves with this information
- STARTUPINFO startupinfo = {0};
- startupinfo.cb = sizeof (startupinfo);
- WCHAR c_szCommandLineFormat[] = L"rundll32.exe netplwiz.dll,UsersRunDll %s";
- // Put the "real" user name in the command-line so that we know what user is
- // actually logged on to the machine even though we are re-launching in a different
- // user context
- WCHAR szCommandLine[ARRAYSIZE(c_szCommandLineFormat) + MAX_DOMAIN + MAX_USER + 2];
- wnsprintf(szCommandLine, ARRAYSIZE(szCommandLine), c_szCommandLineFormat, m_pszDomainUser);
- PROCESS_INFORMATION process_information;
- if (CreateProcessWithLogonW(szUsername, szDomain, szPassword, 0, NULL,
- szCommandLine, 0, NULL, NULL, &startupinfo, &process_information))
- {
- hr = S_OK;
- CloseHandle(process_information.hProcess);
- CloseHandle(process_information.hThread);
- }
- else
- {
- DisplayFormatMessage(hwnd, IDS_USR_APPLET_CAPTION, IDS_USR_CANTOPENCPLASUSER_ERROR,
- MB_OK | MB_ICONERROR);
- }
- TraceLeaveResult(hr);
- }