1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 use shared::basetsd::{ULONG64, ULONG_PTR}; 7 use shared::guiddef::GUID; 8 use shared::minwindef::{UCHAR, ULONG}; 9 use um::winnt::{HANDLE, LARGE_INTEGER, STANDARD_RIGHTS_READ, SYNCHRONIZE, WCHAR}; 10 STRUCT!{struct WNODE_HEADER_u1_s { 11 Version: ULONG, 12 Linkage: ULONG, 13 }} 14 UNION!{union WNODE_HEADER_u1 { 15 [u64; 1], 16 HistoricalContext HistoricalContext_mut: ULONG64, 17 s s_mut: WNODE_HEADER_u1_s, 18 }} 19 UNION!{union WNODE_HEADER_u2 { 20 [u64; 1], 21 CountLost CountLost_mut: ULONG, 22 KernelHandle KernelHandle_mut: HANDLE, 23 TimeStamp TimeStamp_mut: LARGE_INTEGER, 24 }} 25 STRUCT!{struct WNODE_HEADER { 26 BufferSize: ULONG, 27 ProviderId: ULONG, 28 u1: WNODE_HEADER_u1, 29 u2: WNODE_HEADER_u2, 30 Guid: GUID, 31 ClientContext: ULONG, 32 Flags: ULONG, 33 }} 34 pub type PWNODE_HEADER = *mut WNODE_HEADER; 35 pub const WNODE_FLAG_ALL_DATA: ULONG = 0x00000001; 36 pub const WNODE_FLAG_SINGLE_INSTANCE: ULONG = 0x00000002; 37 pub const WNODE_FLAG_SINGLE_ITEM: ULONG = 0x00000004; 38 pub const WNODE_FLAG_EVENT_ITEM: ULONG = 0x00000008; 39 pub const WNODE_FLAG_FIXED_INSTANCE_SIZE: ULONG = 0x00000010; 40 pub const WNODE_FLAG_TOO_SMALL: ULONG = 0x00000020; 41 pub const WNODE_FLAG_INSTANCES_SAME: ULONG = 0x00000040; 42 pub const WNODE_FLAG_STATIC_INSTANCE_NAMES: ULONG = 0x00000080; 43 pub const WNODE_FLAG_INTERNAL: ULONG = 0x00000100; 44 pub const WNODE_FLAG_USE_TIMESTAMP: ULONG = 0x00000200; 45 pub const WNODE_FLAG_PERSIST_EVENT: ULONG = 0x00000400; 46 pub const WNODE_FLAG_EVENT_REFERENCE: ULONG = 0x00002000; 47 pub const WNODE_FLAG_ANSI_INSTANCENAMES: ULONG = 0x00004000; 48 pub const WNODE_FLAG_METHOD_ITEM: ULONG = 0x00008000; 49 pub const WNODE_FLAG_PDO_INSTANCE_NAMES: ULONG = 0x00010000; 50 pub const WNODE_FLAG_TRACED_GUID: ULONG = 0x00020000; 51 pub const WNODE_FLAG_LOG_WNODE: ULONG = 0x00040000; 52 pub const WNODE_FLAG_USE_GUID_PTR: ULONG = 0x00080000; 53 pub const WNODE_FLAG_USE_MOF_PTR: ULONG = 0x00100000; 54 pub const WNODE_FLAG_NO_HEADER: ULONG = 0x00200000; 55 pub const WNODE_FLAG_SEND_DATA_BLOCK: ULONG = 0x00400000; 56 pub const WNODE_FLAG_VERSIONED_PROPERTIES: ULONG = 0x00800000; 57 pub const WNODE_FLAG_SEVERITY_MASK: ULONG = 0xff000000; 58 STRUCT!{struct OFFSETINSTANCEDATAANDLENGTH { 59 OffsetInstanceData: ULONG, 60 LengthInstanceData: ULONG, 61 }} 62 pub type POFFSETINSTANCEDATAANDLENGTH = *mut OFFSETINSTANCEDATAANDLENGTH; 63 UNION!{union WNODE_ALL_DATA_u { 64 [u32; 2], 65 FixedInstanceSize FixedInstanceSize_mut: ULONG, 66 OffsetInstanceDataAndLength OffsetInstanceDataAndLength_mut: 67 [OFFSETINSTANCEDATAANDLENGTH; 0], 68 }} 69 STRUCT!{struct WNODE_ALL_DATA { 70 WnodeHeader: WNODE_HEADER, 71 DataBlockOffset: ULONG, 72 InstanceCount: ULONG, 73 OffsetInstanceNameOffsets: ULONG, 74 u: WNODE_ALL_DATA_u, 75 }} 76 pub type PWNODE_ALL_DATA = *mut WNODE_ALL_DATA; 77 STRUCT!{struct WNODE_SINGLE_INSTANCE { 78 WnodeHeader: WNODE_HEADER, 79 OffsetInstanceName: ULONG, 80 InstanceIndex: ULONG, 81 DataBlockOffset: ULONG, 82 SizeDataBlock: ULONG, 83 VariableData: [UCHAR; 0], 84 }} 85 pub type PWNODE_SINGLE_INSTANCE = *mut WNODE_SINGLE_INSTANCE; 86 STRUCT!{struct WNODE_SINGLE_ITEM { 87 WnodeHeader: WNODE_HEADER, 88 OffsetInstanceName: ULONG, 89 InstanceIndex: ULONG, 90 ItemId: ULONG, 91 DataBlockOffset: ULONG, 92 SizeDataItem: ULONG, 93 VariableData: [UCHAR; 0], 94 }} 95 pub type PWNODE_SINGLE_ITEM = *mut WNODE_SINGLE_ITEM; 96 STRUCT!{struct WNODE_METHOD_ITEM { 97 WnodeHeader: WNODE_HEADER, 98 OffsetInstanceName: ULONG, 99 InstanceIndex: ULONG, 100 MethodId: ULONG, 101 DataBlockOffset: ULONG, 102 SizeDataBlock: ULONG, 103 VariableData: [UCHAR; 0], 104 }} 105 pub type PWNODE_METHOD_ITEM = *mut WNODE_METHOD_ITEM; 106 STRUCT!{struct WNODE_EVENT_ITEM { 107 WnodeHeader: WNODE_HEADER, 108 }} 109 pub type PWNODE_EVENT_ITEM = *mut WNODE_EVENT_ITEM; 110 UNION!{union WNODE_EVENT_REFERENCE_u { 111 [u32; 1], 112 TargetInstanceIndex TargetInstanceIndex_mut: ULONG, 113 TargetInstanceName TargetInstanceName_mut: [WCHAR; 0], 114 }} 115 STRUCT!{struct WNODE_EVENT_REFERENCE { 116 WnodeHeader: WNODE_HEADER, 117 TargetGuid: GUID, 118 TargetDataBlockSize: ULONG, 119 u: WNODE_EVENT_REFERENCE_u, 120 }} 121 pub type PWNODE_EVENT_REFERENCE = *mut WNODE_EVENT_REFERENCE; 122 STRUCT!{struct WNODE_TOO_SMALL { 123 WnodeHeader: WNODE_HEADER, 124 SizeNeeded: ULONG, 125 }} 126 pub type PWNODE_TOO_SMALL = *mut WNODE_TOO_SMALL; 127 UNION!{union WMIREGGUIDW_u { 128 [usize; 1], 129 InstanceNameList InstanceNameList_mut: ULONG, 130 BaseNameOffset BaseNameOffset_mut: ULONG, 131 Pdo Pdo_mut: ULONG_PTR, 132 InstanceInfo InstanceInfo_mut: ULONG_PTR, 133 }} 134 STRUCT!{struct WMIREGGUIDW { 135 Guid: GUID, 136 Flags: ULONG, 137 InstanceCount: ULONG, 138 u: WMIREGGUIDW_u, 139 }} 140 pub type PWMIREGGUIDW = *mut WMIREGGUIDW; 141 pub const WMIREG_FLAG_EXPENSIVE: ULONG = 0x00000001; 142 pub const WMIREG_FLAG_INSTANCE_LIST: ULONG = 0x00000004; 143 pub const WMIREG_FLAG_INSTANCE_BASENAME: ULONG = 0x00000008; 144 pub const WMIREG_FLAG_INSTANCE_PDO: ULONG = 0x00000020; 145 pub const WMIREG_FLAG_REMOVE_GUID: ULONG = 0x00010000; 146 pub const WMIREG_FLAG_RESERVED1: ULONG = 0x00020000; 147 pub const WMIREG_FLAG_RESERVED2: ULONG = 0x00040000; 148 pub const WMIREG_FLAG_TRACED_GUID: ULONG = 0x00080000; 149 pub const WMIREG_FLAG_TRACE_CONTROL_GUID: ULONG = 0x00001000; 150 pub const WMIREG_FLAG_EVENT_ONLY_GUID: ULONG = 0x00000040; 151 STRUCT!{struct WMIREGINFOW { 152 BufferSize: ULONG, 153 NextWmiRegInfo: ULONG, 154 RegistryPath: ULONG, 155 MofResourceName: ULONG, 156 GuidGount: ULONG, 157 WmiRegGuid: [WMIREGGUIDW; 0], 158 }} 159 pub type PWMIREGINFOW = *mut WMIREGINFOW; 160 ENUM!{enum WMIDPREQUESTCODE { 161 WMI_GET_ALL_DATA = 0, 162 WMI_GET_SINGLE_INSTANCE = 1, 163 WMI_SET_SINGLE_INSTANCE = 2, 164 WMI_SET_SINGLE_ITEM = 3, 165 WMI_ENABLE_EVENTS = 4, 166 WMI_DISABLE_EVENTS = 5, 167 WMI_ENABLE_COLLECTION = 6, 168 WMI_DISABLE_COLLECTION = 7, 169 WMI_REGINFO = 8, 170 WMI_EXECUTE_METHOD = 9, 171 WMI_CAPTURE_STATE = 10, 172 }} 173 pub const WMI_GUIDTYPE_TRACECONTROL: ULONG = 0; 174 pub const WMI_GUIDTYPE_TRACE: ULONG = 1; 175 pub const WMI_GUIDTYPE_DATA: ULONG = 2; 176 pub const WMI_GUIDTYPE_EVENT: ULONG = 3; 177 pub const WMIGUID_QUERY: ULONG = 0x0001; 178 pub const WMIGUID_SET: ULONG = 0x0002; 179 pub const WMIGUID_NOTIFICATION: ULONG = 0x0004; 180 pub const WMIGUID_READ_DESCRIPTION: ULONG = 0x0008; 181 pub const WMIGUID_EXECUTE: ULONG = 0x0010; 182 pub const TRACELOG_CREATE_REALTIME: ULONG = 0x0020; 183 pub const TRACELOG_CREATE_ONDISK: ULONG = 0x0040; 184 pub const TRACELOG_GUID_ENABLE: ULONG = 0x0080; 185 pub const TRACELOG_ACCESS_KERNEL_LOGGER: ULONG = 0x0100; 186 pub const TRACELOG_LOG_EVENT: ULONG = 0x0200; 187 pub const TRACELOG_CREATE_INPROC: ULONG = 0x0200; 188 pub const TRACELOG_ACCESS_REALTIME: ULONG = 0x0400; 189 pub const TRACELOG_REGISTER_GUIDS: ULONG = 0x0800; 190 pub const TRACELOG_JOIN_GROUP: ULONG = 0x1000; 191 pub const WMIGUID_ALL_ACCESS_WIN2K: ULONG = STANDARD_RIGHTS_READ | WMIGUID_QUERY | WMIGUID_SET 192 | WMIGUID_NOTIFICATION | WMIGUID_READ_DESCRIPTION | WMIGUID_EXECUTE | TRACELOG_CREATE_REALTIME 193 | TRACELOG_CREATE_ONDISK | TRACELOG_GUID_ENABLE | TRACELOG_ACCESS_KERNEL_LOGGER 194 | TRACELOG_CREATE_INPROC | TRACELOG_ACCESS_REALTIME; 195 pub const WMIGUID_ALL_ACCESS_WINXP: ULONG = WMIGUID_ALL_ACCESS_WIN2K | SYNCHRONIZE 196 | TRACELOG_REGISTER_GUIDS; 197 pub const WMIGUID_ALL_ACCESS_RS1: ULONG = WMIGUID_ALL_ACCESS_WINXP | TRACELOG_JOIN_GROUP; 198 pub const WMIGUID_ALL_ACCESS: ULONG = WMIGUID_ALL_ACCESS_RS1; 199 pub const WMI_GLOBAL_LOGGER_ID: ULONG = 0x0001; 200