2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/wmi/wmi.c
5 * PURPOSE: I/O Windows Management Instrumentation (WMI) Support
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES *****************************************************************/
22 typedef PVOID PWMI_LOGGER_INFORMATION
; // FIXME
24 typedef enum _WMI_CLOCK_TYPE
34 /* FUNCTIONS *****************************************************************/
41 UNICODE_STRING DriverName
= RTL_CONSTANT_STRING(L
"\\Driver\\WMIxWDM");
44 /* Initialize the GUID object type */
45 Status
= WmipInitializeGuidObjectType();
46 if (!NT_SUCCESS(Status
))
48 DPRINT1("WmipInitializeGuidObjectType() failed: 0x%lx\n", Status
);
52 /* Create the WMI driver */
53 Status
= IoCreateDriver(&DriverName
, WmipDriverEntry
);
54 if (!NT_SUCCESS(Status
))
56 DPRINT1("Failed to create WMI driver: 0x%lx\n", Status
);
68 IoWMIRegistrationControl(IN PDEVICE_OBJECT DeviceObject
,
71 DPRINT1("IoWMIRegistrationControl() called for DO %p, requesting %lu action, returning success\n",
72 DeviceObject
, Action
);
74 return STATUS_SUCCESS
;
82 IoWMIAllocateInstanceIds(IN GUID
*Guid
,
83 IN ULONG InstanceCount
,
84 OUT ULONG
*FirstInstanceId
)
87 return STATUS_NOT_IMPLEMENTED
;
95 IoWMISuggestInstanceName(IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL
,
96 IN PUNICODE_STRING SymbolicLinkName OPTIONAL
,
97 IN BOOLEAN CombineNames
,
98 OUT PUNICODE_STRING SuggestedInstanceName
)
101 return STATUS_NOT_IMPLEMENTED
;
109 IoWMIWriteEvent(IN PVOID WnodeEventItem
)
111 DPRINT1("IoWMIWriteEvent() called for WnodeEventItem %p, returning success\n",
114 /* Free the buffer if we are returning success */
115 if (WnodeEventItem
!= NULL
)
116 ExFreePool(WnodeEventItem
);
118 return STATUS_SUCCESS
;
127 _In_ LPCGUID DataBlockGuid
,
128 _In_ ULONG DesiredAccess
,
129 _Out_ PVOID
*DataBlockObject
)
131 HANDLE GuidObjectHandle
;
134 /* Open the GIOD object */
135 Status
= WmipOpenGuidObject(DataBlockGuid
,
140 if (!NT_SUCCESS(Status
))
142 DPRINT1("WmipOpenGuidObject failed: 0x%lx\n", Status
);
147 return STATUS_SUCCESS
;
156 IN PVOID DataBlockObject
,
157 IN OUT ULONG
*InOutBufferSize
,
160 PWMIP_GUID_OBJECT GuidObject
;
164 Status
= ObReferenceObjectByPointer(DataBlockObject
,
168 if (!NT_SUCCESS(Status
))
173 GuidObject
= DataBlockObject
;
176 if (IsEqualGUID(&GuidObject
->Guid
, &MSSmBios_RawSMBiosTables_GUID
))
178 Status
= WmipQueryRawSMBiosTables(InOutBufferSize
, OutBuffer
);
182 Status
= STATUS_NOT_SUPPORTED
;
185 ObDereferenceObject(DataBlockObject
);
195 IoWMIQueryAllDataMultiple(IN PVOID
*DataBlockObjectList
,
196 IN ULONG ObjectCount
,
197 IN OUT ULONG
*InOutBufferSize
,
201 return STATUS_NOT_IMPLEMENTED
;
209 IoWMIQuerySingleInstance(IN PVOID DataBlockObject
,
210 IN PUNICODE_STRING InstanceName
,
211 IN OUT ULONG
*InOutBufferSize
,
215 return STATUS_NOT_IMPLEMENTED
;
223 IoWMIQuerySingleInstanceMultiple(IN PVOID
*DataBlockObjectList
,
224 IN PUNICODE_STRING InstanceNames
,
225 IN ULONG ObjectCount
,
226 IN OUT ULONG
*InOutBufferSize
,
230 return STATUS_NOT_IMPLEMENTED
;
238 IoWMISetSingleInstance(IN PVOID DataBlockObject
,
239 IN PUNICODE_STRING InstanceName
,
241 IN ULONG ValueBufferSize
,
242 IN PVOID ValueBuffer
)
245 return STATUS_NOT_IMPLEMENTED
;
253 IoWMISetSingleItem(IN PVOID DataBlockObject
,
254 IN PUNICODE_STRING InstanceName
,
257 IN ULONG ValueBufferSize
,
258 IN PVOID ValueBuffer
)
261 return STATUS_NOT_IMPLEMENTED
;
269 IoWMIExecuteMethod(IN PVOID DataBlockObject
,
270 IN PUNICODE_STRING InstanceName
,
272 IN ULONG InBufferSize
,
273 IN OUT PULONG OutBufferSize
,
274 IN OUT PUCHAR InOutBuffer
)
277 return STATUS_NOT_IMPLEMENTED
;
285 IoWMISetNotificationCallback(IN PVOID Object
,
286 IN WMI_NOTIFICATION_CALLBACK Callback
,
290 return STATUS_NOT_IMPLEMENTED
;
298 IoWMIHandleToInstanceName(IN PVOID DataBlockObject
,
299 IN HANDLE FileHandle
,
300 OUT PUNICODE_STRING InstanceName
)
303 return STATUS_NOT_IMPLEMENTED
;
311 IoWMIDeviceObjectToInstanceName(IN PVOID DataBlockObject
,
312 IN PDEVICE_OBJECT DeviceObject
,
313 OUT PUNICODE_STRING InstanceName
)
316 return STATUS_NOT_IMPLEMENTED
;
324 WmiQueryTraceInformation(IN TRACE_INFORMATION_CLASS TraceInformationClass
,
325 OUT PVOID TraceInformation
,
326 IN ULONG TraceInformationLength
,
327 OUT PULONG RequiredLength OPTIONAL
,
328 IN PVOID Buffer OPTIONAL
)
331 return STATUS_NOT_IMPLEMENTED
;
339 WmiTraceMessage(IN TRACEHANDLE LoggerHandle
,
340 IN ULONG MessageFlags
,
341 IN LPGUID MessageGuid
,
342 IN USHORT MessageNumber
,
346 return STATUS_NOT_IMPLEMENTED
;
354 WmiTraceMessageVa(IN TRACEHANDLE LoggerHandle
,
355 IN ULONG MessageFlags
,
356 IN LPGUID MessageGuid
,
357 IN USHORT MessageNumber
,
358 IN
va_list MessageArgList
)
361 return STATUS_NOT_IMPLEMENTED
;
366 WmiFlushTrace(IN OUT PWMI_LOGGER_INFORMATION LoggerInfo
)
369 return STATUS_NOT_IMPLEMENTED
;
374 WmiGetClock(IN WMI_CLOCK_TYPE ClockType
,
378 return STATUS_NOT_IMPLEMENTED
;
383 WmiQueryTrace(IN OUT PWMI_LOGGER_INFORMATION LoggerInfo
)
386 return STATUS_NOT_IMPLEMENTED
;
391 WmiStartTrace(IN OUT PWMI_LOGGER_INFORMATION LoggerInfo
)
394 return STATUS_NOT_IMPLEMENTED
;
399 WmiStopTrace(IN PWMI_LOGGER_INFORMATION LoggerInfo
)
402 return STATUS_NOT_IMPLEMENTED
;
407 WmiTraceFastEvent(IN PWNODE_HEADER Wnode
)
410 return STATUS_NOT_IMPLEMENTED
;
415 WmiUpdateTrace(IN OUT PWMI_LOGGER_INFORMATION LoggerInfo
)
418 return STATUS_NOT_IMPLEMENTED
;
426 NtTraceEvent(IN ULONG TraceHandle
,
428 IN ULONG TraceHeaderLength
,
429 IN
struct _EVENT_TRACE_HEADER
* TraceHeader
)
432 return STATUS_NOT_IMPLEMENTED
;