diff options
Diffstat (limited to 'source3/include/rpc_perfcount.h')
-rw-r--r-- | source3/include/rpc_perfcount.h | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/source3/include/rpc_perfcount.h b/source3/include/rpc_perfcount.h new file mode 100644 index 0000000000..0cb2fdc212 --- /dev/null +++ b/source3/include/rpc_perfcount.h @@ -0,0 +1,126 @@ +#ifndef _RPC_PERFCOUNT_H +#define _RPC_PERFCOUNT_H +/* + * Unix SMB/CIFS implementation. + * Virtual Windows Registry Layer + * + * Copyright (C) Marcin Krzysztof Porwit 2005, + * Copyright (C) Gerald (Jerry) Carter 2005. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +typedef struct perf_counter_definition +{ + /* sizeof(PERF_COUNTER_DEFINITION) */ + uint32 ByteLength; + uint32 CounterNameTitleIndex; + uint32 CounterNameTitlePointer; + uint32 CounterHelpTitleIndex; + uint32 CounterHelpTitlePointer; + uint32 DefaultScale; + uint32 DetailLevel; + uint32 CounterType; + uint32 CounterSize; + uint32 CounterOffset; +} +PERF_COUNTER_DEFINITION; + +typedef struct perf_counter_block +{ + /* Total size of the data block, including all data plus this header */ + uint32 ByteLength; + uint8 *data; +} +PERF_COUNTER_BLOCK; + +typedef struct perf_instance_definition +{ + /* Total size of the instance definition, including the length of the terminated Name string */ + uint32 ByteLength; + uint32 ParentObjectTitleIndex; + uint32 ParentObjectTitlePointer; + uint32 UniqueID; + /* From the start of the PERF_INSTANCE_DEFINITION, the byte offset to the start of the Name string */ + uint32 NameOffset; + uint32 NameLength; + /* Unicode string containing the name for the instance */ + uint8 *data; + PERF_COUNTER_BLOCK counter_data; +} +PERF_INSTANCE_DEFINITION; + +typedef struct perf_object_type +{ + /* Total size of the object block, including all PERF_INSTANCE_DEFINITIONs, + PERF_COUNTER_DEFINITIONs and PERF_COUNTER_BLOCKs in bytes */ + uint32 TotalByteLength; + /* Size of this PERF_OBJECT_TYPE plus all PERF_COUNTER_DEFINITIONs in bytes */ + uint32 DefinitionLength; + /* Size of this PERF_OBJECT_TYPE */ + uint32 HeaderLength; + uint32 ObjectNameTitleIndex; + uint32 ObjectNameTitlePointer; + uint32 ObjectHelpTitleIndex; + uint32 ObjectHelpTitlePointer; + uint32 DetailLevel; + uint32 NumCounters; + uint32 DefaultCounter; + uint32 NumInstances; + uint32 CodePage; + uint64 PerfTime; + uint64 PerfFreq; + PERF_COUNTER_DEFINITION *counters; + PERF_INSTANCE_DEFINITION *instances; + PERF_COUNTER_BLOCK counter_data; +} +PERF_OBJECT_TYPE; + +/* PerfCounter Inner Buffer structs */ +typedef struct perf_data_block +{ + /* hardcoded to read "P.E.R.F" */ + uint16 Signature[4]; + uint32 LittleEndian; + /* both currently hardcoded to 1 */ + uint32 Version; + uint32 Revision; + /* bytes of PERF_OBJECT_TYPE data, does NOT include the PERF_DATA_BLOCK */ + uint32 TotalByteLength; + /* size of PERF_DATA_BLOCK including the uint8 *data */ + uint32 HeaderLength; + /* number of PERF_OBJECT_TYPE structures encoded */ + uint32 NumObjectTypes; + uint32 DefaultObject; + SYSTEMTIME SystemTime; + /* This will guarantee that we're on a 64-bit boundary before we encode + PerfTime, and having it there will make my offset math much easier. */ + uint32 Padding; + /* Now when I'm marshalling this, I'll need to call prs_align_uint64() + before I start encodint the uint64 structs */ + /* clock rate * seconds uptime */ + uint64 PerfTime; + /* The clock rate of the CPU */ + uint64 PerfFreq; + /* used for high-res timers -- for now PerfTime * 10e7 */ + uint64 PerfTime100nSec; + uint32 SystemNameLength; + uint32 SystemNameOffset; + /* The SystemName, in unicode, terminated */ + uint8* data; + PERF_OBJECT_TYPE *objects; +} +PERF_DATA_BLOCK; + +#endif /* _RPC_PERFCOUNT_H */ |