Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

124 lines
2.6 KiB

#include "stdafx.h"
#include "WizardSheet.h"
LRESULT CWelcomePage::OnInitDialog( UINT, WPARAM, LPARAM, BOOL& )
{
// Set the fonts
SetWindowFont( GetDlgItem( IDC_TITLE ), m_pTheSheet->m_fontTitles.get(), FALSE );
SetWindowFont( GetDlgItem( IDC_TIP ), m_pTheSheet->m_fontBold.get(), FALSE );
// Center the property sheet on the screen
CWindow wnd( m_pTheSheet->m_hWnd );
wnd.CenterWindow();
return 0;
}
BOOL CWelcomePage::OnSetActive()
{
if ( CanRun() )
{
SetWizardButtons( PSWIZB_NEXT );
}
else
{
::ShowWindow( GetDlgItem( IDC_ERRORICON ), SW_SHOW );
::ShowWindow( GetDlgItem( IDC_ERROR ), SW_SHOW );
::ShowWindow( GetDlgItem( IDC_TIP ), SW_HIDE );
SetWizardButtons( 0 );
}
return TRUE;
}
bool CWelcomePage::CanRun()
{
UINT nResID = 0;
if ( !IsAdmin() )
{
nResID = IDS_E_NOTADMIN;
}
else if ( !IsIISRunning() )
{
nResID = IDS_E_NOIIS;
}
if ( nResID != 0 )
{
CString strText;
strText.LoadString( nResID );
::SetWindowText( GetDlgItem( IDC_ERROR ), strText );
}
return ( nResID == 0 );
}
bool CWelcomePage::IsAdmin()
{
BOOL bIsAdmin = FALSE;
SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
PSID AdminSid = { 0 };
if ( ::AllocateAndInitializeSid( &NtAuthority,
2, // Number of subauthorities
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0,
0,
0,
0,
0,
0,
&AdminSid ) )
{
if ( !::CheckTokenMembership( NULL, AdminSid, &bIsAdmin ) )
{
bIsAdmin = FALSE;
}
}
::GlobalFree( AdminSid );
return ( bIsAdmin != FALSE );
}
bool CWelcomePage::IsIISRunning()
{
bool bResult = false;
LPCWSTR SERVICE_NAME = L"IISADMIN";
// Open the SCM on the local machine
SC_HANDLE schSCManager = ::OpenSCManagerW( NULL, NULL, SC_MANAGER_ALL_ACCESS );
_ASSERT( schSCManager != NULL ); // We alredy checked that we are Admins
SC_HANDLE schService = ::OpenServiceW( schSCManager, SERVICE_NAME, SERVICE_QUERY_STATUS );
// The service is not installed
if ( schService != NULL )
{
SERVICE_STATUS ssStatus;
VERIFY( ::QueryServiceStatus( schService, &ssStatus ) );
bResult = ( ssStatus.dwCurrentState == SERVICE_RUNNING );
VERIFY( ::CloseServiceHandle( schService ) );
}
VERIFY( ::CloseServiceHandle( schSCManager ) );
return bResult;
}