116 lines
2.7 KiB
C++
116 lines
2.7 KiB
C++
// PerfSelection.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "ShowPerfLib.h"
|
|
#include "PerfSelection.h"
|
|
#include "ntreg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPerfSelection dialog
|
|
|
|
|
|
CPerfSelection::CPerfSelection(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CPerfSelection::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CPerfSelection)
|
|
m_strService = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CPerfSelection::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPerfSelection)
|
|
DDX_Control(pDX, IDC_SERVICE, m_wndService);
|
|
// DDX_Control(pDX, IDC_PERFLIST, m_wndPerfList);
|
|
DDX_Text(pDX, IDC_SERVICE, m_strService);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPerfSelection, CDialog)
|
|
//{{AFX_MSG_MAP(CPerfSelection)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPerfSelection message handlers
|
|
|
|
BOOL CPerfSelection::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
InitList();
|
|
|
|
m_wndService.SetFocus();
|
|
|
|
return FALSE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CPerfSelection::InitList()
|
|
{
|
|
CNTRegistry Reg;
|
|
WCHAR wszServiceKey[512],
|
|
wszPerformanceKey[512];
|
|
|
|
if ( CNTRegistry::no_error == Reg.Open( HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Services" ) )
|
|
{
|
|
DWORD dwIndex = 0;
|
|
|
|
// Iterate through the services list
|
|
// =================================
|
|
|
|
DWORD dwBuffSize = 0;
|
|
WCHAR* wcsServiceName = NULL;
|
|
long lError = CNTRegistry::no_error;
|
|
|
|
while ( CNTRegistry::no_error == lError )
|
|
{
|
|
// For each service name, we will check for a performance
|
|
// key and if it exists, we will process the library
|
|
// ======================================================
|
|
|
|
lError = Reg.Enum( dwIndex, &wcsServiceName , dwBuffSize );
|
|
if ( CNTRegistry::no_error == lError )
|
|
{
|
|
// Create the perfomance key path
|
|
// ==============================
|
|
|
|
swprintf(wszServiceKey, L"SYSTEM\\CurrentControlSet\\Services\\%s", wcsServiceName);
|
|
swprintf(wszPerformanceKey, L"%s\\Performance", wszServiceKey);
|
|
|
|
CNTRegistry RegSubKey;
|
|
|
|
// Atempt to open the performance registry key for the service
|
|
// ===========================================================
|
|
|
|
if ( CNTRegistry::no_error == RegSubKey.Open( HKEY_LOCAL_MACHINE, wszPerformanceKey ) )
|
|
{
|
|
CString str(wcsServiceName);
|
|
m_wndPerfList.InsertItem( 1, str );
|
|
}
|
|
dwIndex++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void CPerfSelection::OnOK()
|
|
{
|
|
// TODO: Add extra validation here
|
|
|
|
CDialog::OnOK();
|
|
}
|