s3-spoolss: add support for _spoolss_EnumPrinterDrivers() level 6.
[ira/wip.git] / source3 / include / rpc_perfcount.h
1 #ifndef _RPC_PERFCOUNT_H
2 #define _RPC_PERFCOUNT_H
3 /* 
4  *  Unix SMB/CIFS implementation.
5  *  Virtual Windows Registry Layer
6  *
7  *  Copyright (C) Marcin Krzysztof Porwit    2005,
8  *  Copyright (C) Gerald (Jerry) Carter      2005.
9  *  
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 3 of the License, or
13  *  (at your option) any later version.
14  *  
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *  
20  *  You should have received a copy of the GNU General Public License
21  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
22  */
23
24 typedef struct perf_counter_definition
25 {
26         /* sizeof(PERF_COUNTER_DEFINITION) */
27         uint32 ByteLength;
28         uint32 CounterNameTitleIndex;
29         uint32 CounterNameTitlePointer;
30         uint32 CounterHelpTitleIndex;
31         uint32 CounterHelpTitlePointer;
32         uint32 DefaultScale;
33         uint32 DetailLevel;
34         uint32 CounterType;
35         uint32 CounterSize;
36         uint32 CounterOffset;
37 }
38 PERF_COUNTER_DEFINITION;
39
40 typedef struct perf_counter_block
41 {
42         /* Total size of the data block, including all data plus this header */
43         uint32 ByteLength;
44         uint8 *data;
45 }
46 PERF_COUNTER_BLOCK;
47
48 typedef struct perf_instance_definition
49 {
50         /* Total size of the instance definition, including the length of the terminated Name string */
51         uint32 ByteLength;
52         uint32 ParentObjectTitleIndex;
53         uint32 ParentObjectTitlePointer;
54         uint32 UniqueID;
55         /* From the start of the PERF_INSTANCE_DEFINITION, the byte offset to the start of the Name string */
56         uint32 NameOffset;
57         uint32 NameLength;
58         /* Unicode string containing the name for the instance */
59         uint8 *data;
60         PERF_COUNTER_BLOCK counter_data;
61 }
62 PERF_INSTANCE_DEFINITION;
63
64 typedef struct perf_object_type
65 {
66         /* Total size of the object block, including all PERF_INSTANCE_DEFINITIONs,
67            PERF_COUNTER_DEFINITIONs and PERF_COUNTER_BLOCKs in bytes */
68         uint32 TotalByteLength;
69         /* Size of this PERF_OBJECT_TYPE plus all PERF_COUNTER_DEFINITIONs in bytes */
70         uint32 DefinitionLength;
71         /* Size of this PERF_OBJECT_TYPE */
72         uint32 HeaderLength;
73         uint32 ObjectNameTitleIndex;
74         uint32 ObjectNameTitlePointer;
75         uint32 ObjectHelpTitleIndex;
76         uint32 ObjectHelpTitlePointer;
77         uint32 DetailLevel;
78         uint32 NumCounters;
79         uint32 DefaultCounter;
80         uint32 NumInstances;
81         uint32 CodePage;
82         uint64 PerfTime;
83         uint64 PerfFreq;
84         PERF_COUNTER_DEFINITION *counters;
85         PERF_INSTANCE_DEFINITION *instances;
86         PERF_COUNTER_BLOCK counter_data;
87 }
88 PERF_OBJECT_TYPE;
89
90 /* PerfCounter Inner Buffer structs */
91 typedef struct perf_data_block
92 {
93         /* hardcoded to read "P.E.R.F" */
94         uint16 Signature[4];
95         uint32 LittleEndian;
96         /* both currently hardcoded to 1 */
97         uint32 Version;
98         uint32 Revision;
99         /* bytes of PERF_OBJECT_TYPE data, does NOT include the PERF_DATA_BLOCK */
100         uint32 TotalByteLength;
101         /* size of PERF_DATA_BLOCK including the uint8 *data */
102         uint32 HeaderLength;
103         /* number of PERF_OBJECT_TYPE structures encoded */
104         uint32 NumObjectTypes;
105         uint32 DefaultObject;
106         SYSTEMTIME SystemTime;
107         /* This will guarantee that we're on a 64-bit boundary before we encode
108            PerfTime, and having it there will make my offset math much easier. */
109         uint32 Padding;
110         /* Now when I'm marshalling this, I'll need to call prs_align_uint64() 
111            before I start encodint the uint64 structs */
112         /* clock rate * seconds uptime */
113         uint64 PerfTime;
114         /* The clock rate of the CPU */
115         uint64 PerfFreq; 
116         /* used for high-res timers -- for now PerfTime * 10e7 */
117         uint64 PerfTime100nSec;
118         uint32 SystemNameLength;
119         uint32 SystemNameOffset;
120         /* The SystemName, in unicode, terminated */
121         uint8* data;
122         PERF_OBJECT_TYPE *objects;
123
124 PERF_DATA_BLOCK;
125
126 #endif /* _RPC_PERFCOUNT_H */