PERFUTIL.H

/*++ BUILD Version: 0001    // Increment this if a change has global effects 

Copyright 1995 - 1998 Microsoft Corporation

Module Name:

perfutil.h

Abstract:

This file supports routines used to parse and
create Performance Monitor Data Structures.
It actually supports Performance Object types with
multiple instances

Author:

Bob Watson 28-Jul-1995

Revision History:


--*/
#ifndef _PERFUTIL_H_
#define _PERFUTIL_H_

// enable this define to log process heap data to the event log
#ifdef PROBE_HEAP_USAGE
#undef PROBE_HEAP_USAGE
#endif
//
// Utility macro. This is used to reserve a DWORD multiple of
// bytes for Unicode strings embedded in the definitional data,
// viz., object instance names.
//
#define DWORD_MULTIPLE(x) (((x+sizeof(DWORD)-1)/sizeof(DWORD))*sizeof(DWORD))

// (assumes dword is 4 bytes long and pointer is a dword in size)
#define ALIGN_ON_DWORD(x) ((VOID *)( ((DWORD) x & 0x00000003) ? ( ((DWORD) x & 0xFFFFFFFC) + 4 ) : ( (DWORD) x ) ))

extern WCHAR GLOBAL_STRING[]; // Global command (get all local ctrs)
extern WCHAR FOREIGN_STRING[]; // get data from foreign computers
extern WCHAR COSTLY_STRING[];
extern WCHAR NULL_STRING[];

#define QUERY_GLOBAL 1
#define QUERY_ITEMS 2
#define QUERY_FOREIGN 3
#define QUERY_COSTLY 4

//
// The definition of the only routine of perfutil.c, It builds part of a
// performance data instance (PERF_INSTANCE_DEFINITION) as described in
// winperf.h
//

HANDLE MonOpenEventLog ();
VOID MonCloseEventLog ();
DWORD GetQueryType (IN LPWSTR);
BOOL IsNumberInUnicodeList (DWORD, LPWSTR);

BOOL
MonBuildInstanceDefinition(
PERF_INSTANCE_DEFINITION *pBuffer,
PVOID *pBufferNext,
DWORD ParentObjectTitleIndex,
DWORD ParentObjectInstance,
DWORD UniqueID,
LPWSTR Name
);

typedef struct _LOCAL_HEAP_INFO_BLOCK {
DWORD AllocatedEntries;
DWORD AllocatedBytes;
DWORD FreeEntries;
DWORD FreeBytes;
} LOCAL_HEAP_INFO, *PLOCAL_HEAP_INFO;


//
// Memory Probe macro
//
#ifdef PROBE_HEAP_USAGE

#define HEAP_PROBE() { \
DWORD dwHeapStatus[5]; \
NTSTATUS CallStatus; \
dwHeapStatus[4] = __LINE__; \
if (!(CallStatus = memprobe (dwHeapStatus, 16L, NULL))) { \
REPORT_INFORMATION_DATA (TCP_HEAP_STATUS, LOG_DEBUG, \
&dwHeapStatus, sizeof(dwHeapStatus)); \
} else { \
REPORT_ERROR_DATA (TCP_HEAP_STATUS_ERROR, LOG_DEBUG, \
&CallStatus, sizeof (DWORD)); \
} \
}

#else

#define HEAP_PROBE() ;

#endif

#endif //_PERFUTIL_H_