📄 applicationscope.cpp
字号:
//---------------------------------------------------------------------------
//
// ApplicationScope.cpp
//
// SUBSYSTEM:
// Monitoring process creation and termination
//
// MODULE:
// Main interface of the user-mode app
//
// DESCRIPTION:
// A class that wraps up different implementations and provide
// single interface
//
// AUTHOR: Ivo Ivanov
//
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//
// Includes
//
//---------------------------------------------------------------------------
#include "stdafx.h"
#include "WinUtils.h"
#include "NtDriverController.h"
#include "QueueContainer.h"
#include "ApplicationScope.h"
//---------------------------------------------------------------------------
//
// Static memeber declarations
//
//---------------------------------------------------------------------------
CApplicationScope* CApplicationScope::sm_pInstance = NULL;
//---------------------------------------------------------------------------
//
// Constructor
//
//---------------------------------------------------------------------------
CApplicationScope::CApplicationScope(
CCallbackHandler* pHandler // User-supplied object for handling notifications
):
m_pDriverCtl(NULL),
m_bIsActive(FALSE),
m_pQueueManager(NULL)
{
m_pQueueManager = new CQueueContainer(pHandler);
//
// An instance of the class responsible for loading and unloading
// the kernel driver
//
m_pDriverCtl = new CNtDriverController();
assert( m_pDriverCtl && m_pDriverCtl->IsDrvStarted() );
}
//---------------------------------------------------------------------------
//
// Destructor
//
//---------------------------------------------------------------------------
CApplicationScope::~CApplicationScope()
{
StopMonitoring();
delete m_pDriverCtl;
delete m_pQueueManager;
}
//---------------------------------------------------------------------------
//
// Copy constructor
//
//---------------------------------------------------------------------------
CApplicationScope::CApplicationScope(const CApplicationScope& rhs)
{
}
//---------------------------------------------------------------------------
//
// Assignment operator
//
//---------------------------------------------------------------------------
CApplicationScope& CApplicationScope::operator=(const CApplicationScope& rhs)
{
if (this == &rhs)
return *this;
return *this; // return reference to left-hand object
}
//---------------------------------------------------------------------------
// GetInstance
//
// Implements the "double-checking" locking pattern combined with
// Scott Meyers single instance
// For more details see -
// 1. "Modern C++ Design" by Andrei Alexandrescu - 6.9 Living in a
// Multithreaded World
// 2. "More Effective C++" by Scott Meyers - Item 26
//---------------------------------------------------------------------------
CApplicationScope& CApplicationScope::GetInstance(
CCallbackHandler* pHandler // User-supplied object for handling notifications
)
{
VerifyIsWindowsNtRequired();
if (!sm_pInstance)
{
//CSingleLock guard(&g_AppSingeltonLock, TRUE);
if (!sm_pInstance)
{
assert( NULL != pHandler );
static CApplicationScope instance(pHandler);
sm_pInstance = &instance;
}
} // if
return *sm_pInstance;
}
//
// Activate/deactivate the monitoring process
//
BOOL CApplicationScope::SetActive(BOOL bActive)
{
BOOL bResult = FALSE;
//
// Verify the system hasn't been activate before
//
if (m_bIsActive != bActive)
{
if (bActive)
{
bResult = m_pQueueManager->StartMonitor();
}
else
{
m_pQueueManager->StopMonitor();
bResult = TRUE;
}
if( bResult )
{
m_bIsActive = bActive;
}
} // if
return bResult;
}
//
// Initiates process of monitoring process creation/termination
//
BOOL CApplicationScope::StartMonitoring(
PVOID pvParam // Pointer to a parameter value passed to the object
)
{
CSingleLock guard(&m_csLock, TRUE);
BOOL bResult = FALSE;
//
// Verify the system hasn't been activate before
//
if (!m_bIsActive)
{
m_pQueueManager->SetExternalParam( pvParam );
//
// Activate the monitoring process
//
bResult = SetActive( TRUE );
} // if
return bResult;
}
//
// Ends up the whole process of monitoring
//
void CApplicationScope::StopMonitoring()
{
CSingleLock guard(&m_csLock, TRUE);
//
// Deactivate the monitoring process
//
SetActive( FALSE );
return;
}
//----------------------------End of the file -------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -