/*++ Copyright (c) 1998 Microsoft Corporation Module Name: perrepsr.h Abstract: This header file contains definitions of data structures used by the functions in the perrepsr.c file. Author: Rohan Kumar [rohank] 13-Sept-1998 Environment: User Mode Service Revision History: --*/ #ifndef _PERREPSR_H_ #define _PERREPSR_H_ #include #pragma hdrstop #include #include #include // // REMOVE THE BELOW ONCE THE CHECKIN IS DONE TO WINPERF.H // #ifndef WINPERF_LOG_NONE // // The following are the possible values for // HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\EventLogLevel // The default is WINPERF_LOG_NONE if the registry value is not defined. // This should be adopted by all perfdlls to avoid flooding the application // event log. // #define WINPERF_LOG_NONE 0 // No event reported #define WINPERF_LOG_USER 1 // Report only errors #define WINPERF_LOG_DEBUG 2 // Report debug errors as well #define WINPERF_LOG_VERBOSE 3 // Report everything #endif // // Used in the RegEnumValue function // #define SIZEOFVALUENAME 10 #define SIZEOFVALUEDATA 10000 #define INVALIDKEY 0 #define HASHTABLESIZE sizeof(QHASH_ENTRY)*100 #define PERFMON_MAX_INSTANCE_LENGTH 1024 #define REPSETOBJSUBKEY L"SYSTEM\\CurrentControlSet\\Services\\FileReplicaSet" #define REPSETPERFSUBKEY L"SYSTEM\\CurrentControlSet\\Services\\FileReplicaSet\\Performance" #define REPSETLINSUBKEY L"SYSTEM\\CurrentControlSet\\Services\\FileReplicaSet\\Linkage" #define REPSETOPENFN L"OpenReplicaSetPerformanceData" #define REPSETCLOSEFN L"CloseReplicaSetPerformanceData" #define REPSETCOLLECTFN L"CollectReplicaSetPerformanceData" #define LDCTRAPP L"%SystemRoot%\\system32\\lodctr.exe" #define REPSETINI LDCTRAPP L" %SystemRoot%\\system32\\NTFRSREP.ini" #define UNLDCTRAPP L"%SystemRoot%\\system32\\unlodctr.exe" #define REPSETUNLD UNLDCTRAPP L" FileReplicaSet" #define REPCONNOBJSUBKEY L"SYSTEM\\CurrentControlSet\\Services\\FileReplicaConn" #define REPCONNPERFSUBKEY L"SYSTEM\\CurrentControlSet\\Services\\FileReplicaConn\\Performance" #define REPCONNLINSUBKEY L"SYSTEM\\CurrentControlSet\\Services\\FileReplicaConn\\Linkage" #define REPCONNOPENFN L"OpenReplicaConnPerformanceData" #define REPCONNCLOSEFN L"CloseReplicaConnPerformanceData" #define REPCONNCOLLECTFN L"CollectReplicaConnPerformanceData" #define REPCONNINI LDCTRAPP L" %SystemRoot%\\system32\\NTFRSCON.ini" #define REPCONNUNLD UNLDCTRAPP L" FileReplicaConn" #define PERFDLLDIRECTORY L"%SystemRoot%\\system32\\NTFRSPRF.dll" // // Name of the Total Instance // #define TOTAL_NAME L"_Total" // // Macros used for incrementing or setting counter values for Replica Set // objects, connection objects and Service total counters. // // // Increment a replica set counter value. // #define PM_INC_CTR_REPSET(_Replica_, _Ctr_, _Value_) \ { \ if (((_Replica_) != NULL) && \ ((_Replica_)->PerfRepSetData != NULL) && \ ((_Replica_)->PerfRepSetData->oid != NULL)) { \ \ (_Replica_)->PerfRepSetData->FRSCounter._Ctr_ += (_Value_); \ } \ } // // Set a new value for a replica set perfmon counter. // #define PM_SET_CTR_REPSET(_Replica_, _Ctr_, _Value_) \ { \ if (((_Replica_) != NULL) && \ ((_Replica_)->PerfRepSetData != NULL) && \ ((_Replica_)->PerfRepSetData->oid != NULL)) { \ \ (_Replica_)->PerfRepSetData->FRSCounter._Ctr_ = (_Value_); \ } \ } // // Read the value for a replica set perfmon counter. // #define PM_READ_CTR_REPSET(_Replica_, _Ctr_) \ ( \ (((_Replica_) != NULL) && \ ((_Replica_)->PerfRepSetData != NULL) && \ ((_Replica_)->PerfRepSetData->oid != NULL)) ? \ ((_Replica_)->PerfRepSetData->FRSCounter._Ctr_) : 0 \ ) // // Increment a Cxtion counter value. // #define PM_INC_CTR_CXTION(_Cxtion_, _Ctr_, _Value_) \ { \ if (((_Cxtion_) != NULL) && \ ((_Cxtion_)->PerfRepConnData != NULL) && \ ((_Cxtion_)->PerfRepConnData->oid != NULL)) { \ (_Cxtion_)->PerfRepConnData->FRCCounter._Ctr_ += (_Value_); \ } \ } // // Set a new value for a Cxtion perfmon counter. // #define PM_SET_CTR_CXTION(_Cxtion_, _Ctr_, _Value_) \ { \ if (((_Cxtion_) != NULL) && \ ((_Cxtion_)->PerfRepConnData != NULL) && \ ((_Cxtion_)->PerfRepConnData->oid != NULL)) { \ (_Cxtion_)->PerfRepConnData->FRCCounter._Ctr_ = (_Value_); \ } \ } // // Read the value for a Cxtion perfmon counter. // #define PM_READ_CTR_CXTION(_Cxtion_, _Ctr_) \ ( \ (((_Cxtion_) != NULL) && \ ((_Cxtion_)->PerfRepConnData != NULL) && \ ((_Cxtion_)->PerfRepConnData->oid != NULL)) ? \ ((_Cxtion_)->PerfRepConnData->FRCCounter._Ctr_) : 0 \ ) // // Increment a Service Wide Total counter value. // #define PM_INC_CTR_SERVICE(_Total_, _Ctr_, _Value_) \ { \ if (((_Total_) != NULL) && ((_Total_)->oid != NULL)) { \ (_Total_)->FRSCounter._Ctr_ += (_Value_); \ } \ } // // Set a new value for a Service Wide Total counter value. // #define PM_SET_CTR_SERVICE(_Total_, _Ctr_, _Value_) \ { \ if (((_Total_) != NULL) && ((_Total_)->oid != NULL)) { \ (_Total_)->FRSCounter._Ctr_ = (_Value_); \ } \ } // // Read the value for a Service Wide Total counter. // #define PM_READ_CTR_SERVICE(_Total_, _Ctr_) \ ( \ (((_Total_) != NULL) && ((_Total_)->oid != NULL)) ? \ ((_Total_)->FRSCounter._Ctr_) : 0 \ ) // // The global variables below are used to synchronize access to the variables // FRS_dwOpenCount and FRC_dwOpenCount respectively. // CRITICAL_SECTION FRS_ThrdCounter; CRITICAL_SECTION FRC_ThrdCounter; // // EventLog Handle and severity level which controls if log entry is made. // extern HANDLE hEventLog; //extern BOOLEAN DoLogging; extern DWORD PerfEventLogLevel; // // Macro to filter eventlog messages // // Only print if severity level of message is less than or equal to the current // perfmon event log level from the registry value: // "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\EventLogLevel" // Each eventlog message is only printed once per loading of the dll. // #define FilterAndPrintToEventLog(_sev_, _once_, _evid_) \ { \ if (/*DoLogging && */ (PerfEventLogLevel >= (_sev_))) { \ if (_once_) { \ ReportEvent(hEventLog, \ EVENTLOG_ERROR_TYPE, \ 0, \ _evid_, \ (PSID)NULL, \ 0, \ 0, \ NULL, \ (PVOID)NULL); \ _once_ = FALSE; \ } \ } \ } // // This is used in the Open function where memory gets allocated. // If memory allocation fails, just return failure. // #define NTFRS_MALLOC_TEST(_x_, _y_, _z_) \ { \ if ((_x_) == NULL) { \ if (_z_) { \ RpcBindingFree(&Handle); \ } \ _y_; \ return ERROR_NO_SYSTEM_RESOURCES; \ } \ } // // Object Types // enum object { REPLICASET, REPLICACONN }; // // The PERFMON_OBJECT_ID data structure // typedef struct _PERFMON_OBJECT_ID { PWCHAR name; // name of the Instance ULONGLONG key; // The Instances's Unique Key } PERFMON_OBJECT_ID, *PPERFMON_OBJECT_ID; // // WARNING !!!! The fields in the structure below should be changed // if any new counters are to be added or deleted for the REPLICASET Object // The counter structure for the ReplicaSet Object Instance // typedef struct _REPLICASET_COUNTERS { ULONGLONG SFGeneratedB; // Bytes of Staging Generated ULONGLONG SFFetchedB; // Bytes of Staging Fetched ULONGLONG SFReGeneratedB; // Bytes of Staging Regenerated ULONGLONG FInstalledB; // Bytes of Files Installed ULONGLONG SSInUseKB; // KB of Staging Space In Use ULONGLONG SSFreeKB; // KB of Staging Space Free ULONGLONG PacketsRcvdBytes; // Packets Received in Bytes ULONGLONG PacketsSentBytes; // Packets Sent in Bytes ULONGLONG FetBSentBytes; // Fetch Blocks Sent in Bytes ULONGLONG FetBRcvdBytes; // Fetch Blocks Received in Bytes ULONG SFGenerated; // Staging Files Generated ULONG SFGeneratedError; // Staging Files Generated with Error ULONG SFFetched; // Staging Files Fetched ULONG SFReGenerated; // Staging Files Regenerated ULONG FInstalled; // Files Installed ULONG FInstalledError; // Files Installed with Error ULONG COIssued; // Change Orders Issued ULONG CORetired; // Change Orders Retired ULONG COAborted; // Change Orders Aborted ULONG CORetried; // Change Orders Retried ULONG CORetriedGen; // Change Orders Retried at Generate ULONG CORetriedFet; // Change Orders Retried at Fetch ULONG CORetriedIns; // Change Orders Retried at Install ULONG CORetriedRen; // Change Orders Retried at Rename ULONG COMorphed; // Change Orders Morphed ULONG COPropagated; // Change Orders Propagated ULONG COReceived; // Change Orders Received ULONG COSent; // Change Orders Sent ULONG COEvaporated; // Change Orders Evaporated ULONG LCOIssued; // Local Change Orders Issued ULONG LCORetired; // Local Change Orders Retired ULONG LCOAborted; // Local Change Orders Aborted ULONG LCORetried; // Local Change Orders Retried ULONG LCORetriedGen; // Local Change Orders Retried at Generate ULONG LCORetriedFet; // Local Change Orders Retried at Fetch ULONG LCORetriedIns; // Local Change Orders Retried at Install ULONG LCORetriedRen; // Local Change Orders Retried at Rename ULONG LCOMorphed; // Local Change Orders Morphed ULONG LCOPropagated; // Local Change Orders Propagated ULONG LCOSent; // Local Change Orders Sent ULONG LCOSentAtJoin; // Local Change Orders Sent At Join ULONG RCOIssued; // Remote Change Orders Issued ULONG RCORetired; // Remote Change Orders Retired ULONG RCOAborted; // Remote Change Orders Aborted ULONG RCORetried; // Remote Change Orders Retried ULONG RCORetriedGen; // Remote Change Orders Retried at Generate ULONG RCORetriedFet; // Remote Change Orders Retried at Fetch ULONG RCORetriedIns; // Remote Change Orders Retried at Install ULONG RCORetriedRen; // Remote Change Orders Retried at Rename ULONG RCOMorphed; // Remote Change Orders Morphed ULONG RCOPropagated; // Remote Change Orders Propagated ULONG RCOSent; // Remote Change Orders Sent ULONG RCOReceived; // Remote Change Orders Received ULONG InCODampned; // Inbound Change Orders Dampened ULONG OutCODampned; // Outbound Change Orders Dampened ULONG UsnReads; // Usn Reads ULONG UsnRecExamined; // Usn Records Examined ULONG UsnRecAccepted; // Usn Records Accepted ULONG UsnRecRejected; // Usn Records Rejected ULONG PacketsRcvd; // Packets Received ULONG PacketsRcvdError; // Packets Received in Error ULONG PacketsSent; // Packets Sent ULONG PacketsSentError; // Packets Sent in Error ULONG CommTimeouts; // Communication Timeouts ULONG FetRSent; // Fetch Requests Sent ULONG FetRReceived; // Fetch Requests Received ULONG FetBSent; // Fetch Blocks Sent ULONG FetBRcvd; // Fetch Blocks Received ULONG JoinNSent; // Join Notifications Sent ULONG JoinNRcvd; // Join Notifications Received ULONG Joins; // Joins ULONG Unjoins; // Unjoins ULONG Bindings; // Bindings ULONG BindingsError; // Bindings in Error ULONG Authentications; // Authentications ULONG AuthenticationsError; // Authentications in Error ULONG DSPolls; // DS Polls ULONG DSPollsWOChanges; // DS Polls without Changes ULONG DSPollsWChanges; // DS Polls with Changes ULONG DSSearches; // DS Searches ULONG DSSearchesError; // DS Searches in Error ULONG DSObjects; // DS Objects ULONG DSObjectsError; // DS Objects in Error ULONG DSBindings; // DS Bindings ULONG DSBindingsError; // DS Bindings in Error ULONG RSCreated; // Replica Sets Created ULONG RSDeleted; // Replica Sets Deleted ULONG RSRemoved; // Replica Sets Removed ULONG RSStarted; // Replica Sets Started // ULONG RSRepaired; // Replica Sets Repaired // ULONG Threads; // Threads ULONG ThreadsStarted; // Threads started ULONG ThreadsExited; // Threads exited } ReplicaSetCounters, *PReplicaSetCounters; // // Size of the structure above // #define SIZEOF_REPSET_COUNTER_DATA sizeof(ReplicaSetCounters) // // The data structure for the ReplicaSet Object Instance // typedef struct _HASHTABLEDATA_REPLICASET { PPERFMON_OBJECT_ID oid; // The Instance ID PREPLICA RepBackPtr; // Back pointer to the replica structure ReplicaSetCounters FRSCounter; // The counter structure } HT_REPLICA_SET_DATA, *PHT_REPLICA_SET_DATA; // // The Total Instance // extern PHT_REPLICA_SET_DATA PMTotalInst; // // WARNING !!!! The fields in the structure below should be changed // if any new counters are to be added or deleted for the REPLICACONN Object // The counter structure for the ReplicaConn Object Instance // typedef struct _REPLICACONN_COUNTERS { ULONGLONG PacketsSentBytes; // Packets Sent in Bytes ULONGLONG FetBSentBytes; // Fetch Blocks Sent in Bytes ULONGLONG FetBRcvdBytes; // Fetch Blocks Received in Bytes ULONG LCOSent; // Local Change Orders Sent ULONG LCOSentAtJoin; // Local Change Orders Sent At Join ULONG RCOSent; // Remote Change Orders Sent ULONG RCOReceived; // Remote Change Orders Received ULONG InCODampned; // Inbound Change Orders Dampened ULONG OutCODampned; // Outbound Change Orders Dampened ULONG PacketsSent; // Packets Sent ULONG PacketsSentError; // Packets Sent in Error ULONG CommTimeouts; // Communication Timeouts ULONG FetRSent; // Fetch Requests Sent ULONG FetRReceived; // Fetch Requests Received ULONG FetBSent; // Fetch Blocks Sent ULONG FetBRcvd; // Fetch Blocks Received ULONG JoinNSent; // Join Notifications Sent ULONG JoinNRcvd; // Join Notifications Received ULONG Joins; // Joins ULONG Unjoins; // Unjoins ULONG Bindings; // Bindings ULONG BindingsError; // Bindings in Error ULONG Authentications; // Authentications ULONG AuthenticationsError; // Authentications in Error } ReplicaConnCounters, *PReplicaConnCounters; // // Size of the structure above // #define SIZEOF_REPCONN_COUNTER_DATA sizeof(ReplicaConnCounters) // // The data structure for the ReplicaConn Object Instance // typedef struct _HASHTABLEDATA_REPLICACONN { PPERFMON_OBJECT_ID oid; // The Instance ID ReplicaConnCounters FRCCounter; // The counter structure } HT_REPLICA_CONN_DATA, *PHT_REPLICA_CONN_DATA; // // Signature's of exported functions defined in the perrepsr.c file // VOID InitializePerfmonServer ( VOID ); VOID ShutdownPerfmonServer ( VOID ); ULONG AddPerfmonInstance ( IN DWORD ObjectType, IN PVOID addr, IN PWCHAR InstanceName ); DWORD DeletePerfmonInstance( IN DWORD ObjectType, IN PVOID addr ); #endif // perrepsr.h