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.
95 lines
2.5 KiB
95 lines
2.5 KiB
/*
|
|
- Pop3perf.cpp
|
|
-
|
|
* Purpose:
|
|
*
|
|
* Copyright:
|
|
*
|
|
* History:
|
|
*
|
|
*/
|
|
|
|
|
|
#include <StdAfx.h>
|
|
#include <winperf.h>
|
|
#define PERF_DLL_ONCE
|
|
#include <Pop3SvcPerf.h>
|
|
#include <perfdll.h>
|
|
|
|
#define SZ_POP3_SERVICE_NAME L"Pop3Svc"
|
|
// Debugging registry key constant
|
|
|
|
BOOL WINAPI DllMain(
|
|
HINSTANCE hinstDLL, // handle to the DLL module
|
|
DWORD fdwReason, // reason for calling function
|
|
LPVOID lpvReserved) // reserved
|
|
{
|
|
if (DLL_PROCESS_ATTACH == fdwReason)
|
|
{
|
|
PERF_DATA_INFO pdi;
|
|
|
|
// Configure Perfmon Counters
|
|
// PERF_DATA_INFO have buffers of MAX_PATH characters
|
|
pdi.cGlobalCounters = cntrMaxGlobalCntrs;
|
|
pdi.rgdwGlobalCounterTypes = g_rgdwGlobalCntrType;
|
|
pdi.rgdwGlobalCntrScale = g_rgdwGlobalCntrScale;
|
|
wcsncpy(pdi.wszSvcName, SZ_POP3_SERVICE_NAME, MAX_PATH-1);
|
|
wcsncpy(pdi.wszGlobalSMName, szPOP3PerfMem, MAX_PATH-1);
|
|
pdi.wszSvcName[MAX_PATH-1]=0;
|
|
pdi.wszGlobalSMName[MAX_PATH-1]=0;
|
|
// NOTE: If your service does not require Instance
|
|
// counters, you MUST set cInstCounters to zero!
|
|
pdi.cInstCounters = cntrMaxInstCntrs;
|
|
wcsncpy(pdi.wszInstSMName, szPOP3InstPerfMem, MAX_PATH-1);
|
|
wcsncpy(pdi.wszInstMutexName, szPOP3InstPerfMutex, MAX_PATH-1);
|
|
pdi.wszInstSMName[MAX_PATH-1]=0;
|
|
pdi.wszInstMutexName[MAX_PATH-1]=0;
|
|
pdi.rgdwInstCounterTypes = g_rgdwInstCntrType;
|
|
|
|
if (FAILED(HrInitPerf(&pdi)))
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (DLL_PROCESS_DETACH == fdwReason)
|
|
{
|
|
HrShutdownPerf();
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// Must have wrapper functions, otherwise the lib functions don't get
|
|
// pulled into the executable (smart linking "saves us" again...)
|
|
|
|
DWORD APIENTRY
|
|
Pop3SvcOpenPerfProc(LPWSTR sz)
|
|
{
|
|
return OpenPerformanceData(sz);
|
|
}
|
|
|
|
DWORD APIENTRY
|
|
Pop3SvcCollectPerfProc(LPWSTR sz, LPVOID *ppv, LPDWORD pdw1, LPDWORD pdw2)
|
|
{
|
|
return CollectPerformanceData(sz, ppv, pdw1, pdw2);
|
|
}
|
|
|
|
DWORD APIENTRY
|
|
Pop3SvcClosePerfProc(void)
|
|
{
|
|
return ClosePerformanceData();
|
|
}
|
|
|
|
HRESULT _stdcall DllRegisterServer(void)
|
|
{
|
|
return RegisterPerfDll( SZ_POP3_SERVICE_NAME,
|
|
L"Pop3SvcOpenPerfProc",
|
|
L"Pop3SvcCollectPerfProc",
|
|
L"Pop3SvcClosePerfProc"
|
|
) ;
|
|
}
|
|
|
|
HRESULT _stdcall DllUnregisterServer(void)
|
|
{
|
|
return HrUninstallPerfDll( SZ_POP3_SERVICE_NAME );
|
|
}
|