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.
 
 
 
 
 
 

232 lines
6.9 KiB

/*++
© 1998 Seagate Software, Inc. All rights reserved
Module Name:
PrMrSts.cpp
Abstract:
Managed Volume Status Page.
Author:
Art Bragg [abragg] 08-Aug-1997
Revision History:
--*/
#include "stdafx.h"
#include "fsaint.h"
#include "PrMrSts.h"
#include "manvol.h"
//#define RS_SHOW_ALL_PCTS
static DWORD pHelpIds[] =
{
IDC_STATIC_VOLUME_NAME, idh_volume_name,
#ifdef RS_SHOW_ALL_PCTS
IDC_STATIC_USED_PCT, idh_volume_percent_local_data,
IDC_STATIC_USED_PCT_UNIT, idh_volume_percent_local_data,
#endif
IDC_STATIC_USED_SPACE_4DIGIT, idh_volume_capacity_local_data,
IDC_STATIC_USED_SPACE_4DIGIT_LABEL, idh_volume_capacity_local_data,
IDC_STATIC_USED_SPACE_4DIGIT_HELP, idh_volume_capacity_local_data,
#ifdef RS_SHOW_ALL_PCTS
IDC_STATIC_PREMIGRATED_PCT, idh_volume_percent_remote_data_cached,
IDC_STATIC_PREMIGRATED_PCT_UNIT, idh_volume_percent_remote_data_cached,
#endif
IDC_STATIC_PREMIGRATED_SPACE_4DIGIT, idh_volume_capacity_remote_data_cached,
IDC_STATIC_PREMIGRATED_SPACE_4DIGIT_LABEL, idh_volume_capacity_remote_data_cached,
IDC_STATIC_FREE_PCT, idh_volume_percent_free_space,
IDC_STATIC_FREE_PCT_UNIT, idh_volume_percent_free_space,
IDC_STATIC_FREE_SPACE_4DIGIT, idh_volume_capacity_free_space,
IDC_STATIC_FREE_SPACE_4DIGIT_LABEL, idh_volume_capacity_free_space,
IDC_STATIC_MANAGED_SPACE_4DIGIT, idh_volume_disk_capacity,
IDC_STATIC_MANAGED_SPACE_4DIGIT_LABEL, idh_volume_disk_capacity,
IDC_STATIC_REMOTE_STORAGE_4DIGIT, idh_volume_data_remote_storage,
IDC_STATIC_RS_DATA_LABEL, idh_volume_data_remote_storage,
0, 0
};
/////////////////////////////////////////////////////////////////////////////
// CPrMrSts property page
CPrMrSts::CPrMrSts( BOOL doAll ) : CSakVolPropPage(CPrMrSts::IDD)
{
//{{AFX_DATA_INIT(CPrMrSts)
//}}AFX_DATA_INIT
m_DoAll = doAll;
m_hConsoleHandle = NULL;
m_pHelpIds = pHelpIds;
}
CPrMrSts::~CPrMrSts()
{
}
void CPrMrSts::DoDataExchange(CDataExchange* pDX)
{
CSakVolPropPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPrMrSts)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPrMrSts, CSakVolPropPage)
//{{AFX_MSG_MAP(CPrMrSts)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPrMrSts message handlers
BOOL CPrMrSts::OnInitDialog()
{
CSakVolPropPage::OnInitDialog();
// set the dll context so that MMC can find the resource.
AFX_MANAGE_STATE(AfxGetStaticModuleState());
LONGLONG total = 0;
LONGLONG free = 0;
LONGLONG premigrated = 0;
LONGLONG truncated = 0;
LONGLONG totalTotal = 0;
LONGLONG totalFree = 0;
LONGLONG totalPremigrated = 0;
LONGLONG totalTruncated = 0;
LONGLONG remoteStorage = 0;
CString sFormat;
CString sText;
CSakVolPropPage::OnInitDialog();
HRESULT hr = S_OK;
try {
if ( ( m_pParent->IsMultiSelect() != S_OK ) && !m_DoAll ) {
// SINGLE SELECT
WsbAffirmHr( m_pVolParent->GetFsaResource( &m_pFsaResource ) );
WsbAffirmPointer( m_pFsaResource );
// Get statistics
WsbAffirmHr( m_pFsaResource->GetSizes( &total, &free, &premigrated, &truncated ) );
// Show the volume name
CString sText;
WsbAffirmHr( RsGetVolumeDisplayName( m_pFsaResource, sText ) );
SetDlgItemText( IDC_STATIC_VOLUME_NAME, sText );
} else {
// MULTI_SELECT or DoAll mode
int bookMark = 0;
int numVols = 0;
CComPtr<IFsaResource> pFsaResource;
while( m_pVolParent->GetNextFsaResource( &bookMark, &pFsaResource ) == S_OK ) {
WsbAffirmHr( pFsaResource->GetSizes( &total, &free, &premigrated, &truncated ) );
numVols++;
totalTotal += total;
totalFree += free;
totalPremigrated += premigrated;
totalTruncated += truncated;
pFsaResource.Release( );
}
total = totalTotal;
free = totalFree;
premigrated = totalPremigrated;
truncated = totalTruncated;
// Show the number of volumes
sText.Format( ( 1 == numVols ) ? IDS_VOLUME : IDS_VOLUMES, numVols );
SetDlgItemText( IDC_STATIC_VOLUME_NAME, sText );
}
LONGLONG normal = max( ( total - free - premigrated ), (LONGLONG)0 );
// Calculate percents
int freePct;
int premigratedPct;
if( total == 0 ) {
freePct = 0;
premigratedPct = 0;
} else {
freePct = (int) ((free * 100) / total);
premigratedPct = (int) ((premigrated * 100) / total);
}
#ifdef RS_SHOW_ALL_PCTS
int normalPct = 100 - freePct - premigratedPct;
#endif
remoteStorage = premigrated + truncated;
//
// Show the statistics in percent
//
sFormat.Format (L"%d", freePct);
SetDlgItemText (IDC_STATIC_FREE_PCT, sFormat);
#ifdef RS_SHOW_ALL_PCTS
sFormat.Format (L"%d", normalPct);
SetDlgItemText (IDC_STATIC_USED_PCT, sFormat);
sFormat.Format (L"%d", premigratedPct);
SetDlgItemText (IDC_STATIC_PREMIGRATED_PCT, sFormat);
#else
//
// Can't change resources, so just hide the controls
//
GetDlgItem( IDC_STATIC_USED_PCT )->ShowWindow( SW_HIDE );
GetDlgItem( IDC_STATIC_USED_PCT_UNIT )->ShowWindow( SW_HIDE );
GetDlgItem( IDC_STATIC_PREMIGRATED_PCT )->ShowWindow( SW_HIDE );
GetDlgItem( IDC_STATIC_PREMIGRATED_PCT_UNIT )->ShowWindow( SW_HIDE );
#endif
//
// Show the statistics in 4-character format
//
WsbAffirmHr (RsGuiFormatLongLong4Char (total, sFormat));
SetDlgItemText (IDC_STATIC_MANAGED_SPACE_4DIGIT, sFormat);
WsbAffirmHr (RsGuiFormatLongLong4Char (free, sFormat));
SetDlgItemText (IDC_STATIC_FREE_SPACE_4DIGIT, sFormat);
WsbAffirmHr (RsGuiFormatLongLong4Char (normal, sFormat));
SetDlgItemText (IDC_STATIC_USED_SPACE_4DIGIT, sFormat);
WsbAffirmHr (RsGuiFormatLongLong4Char (premigrated, sFormat));
SetDlgItemText (IDC_STATIC_PREMIGRATED_SPACE_4DIGIT, sFormat);
WsbAffirmHr (RsGuiFormatLongLong4Char (remoteStorage, sFormat));
SetDlgItemText (IDC_STATIC_REMOTE_STORAGE_4DIGIT, sFormat);
UpdateData( FALSE );
} WsbCatch ( hr );
return TRUE;
}