#pragma once
#ifdef __cplusplus
extern "C" {
#endif
typedef enum _WMIENABLEDISABLECONTROL {
WmiEventControl,
WmiDataBlockControl
} WMIENABLEDISABLECONTROL, *PWMIENABLEDISABLECONTROL;
typedef enum _SYSCTL_IRP_DISPOSITION {
IrpProcessed,
IrpNotCompleted,
IrpNotWmi,
IrpForward
} SYSCTL_IRP_DISPOSITION, *PSYSCTL_IRP_DISPOSITION;
typedef struct _WMIGUIDREGINFO {
LPCGUID Guid;
ULONG InstanceCount;
ULONG Flags;
} WMIGUIDREGINFO, *PWMIGUIDREGINFO;
typedef NTSTATUS
(NTAPI *PWMI_QUERY_REGINFO) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PULONG RegFlags,
IN OUT PUNICODE_STRING InstanceName,
OUT PUNICODE_STRING *RegistryPath OPTIONAL,
IN OUT PUNICODE_STRING MofResourceName,
OUT PDEVICE_OBJECT *Pdo OPTIONAL);
typedef NTSTATUS
(NTAPI *PWMI_FUNCTION_CONTROL) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN WMIENABLEDISABLECONTROL Function,
IN BOOLEAN Enable);
typedef NTSTATUS
(NTAPI *PWMI_QUERY_DATABLOCK) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG InstanceCount,
OUT PULONG InstanceLengthArray OPTIONAL,
IN ULONG BufferAvail,
OUT PUCHAR Buffer OPTIONAL);
typedef NTSTATUS
(NTAPI *PWMI_EXECUTE_METHOD) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG MethodId,
IN ULONG InBufferSize,
IN ULONG OutBufferSize,
IN OUT PUCHAR Buffer);
typedef NTSTATUS
(NTAPI *PWMI_SET_DATABLOCK) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG BufferSize,
IN PUCHAR Buffer);
typedef NTSTATUS
(NTAPI *PWMI_SET_DATAITEM) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG DataItemId,
IN ULONG BufferSize,
IN PUCHAR Buffer);
typedef struct _WMILIB_CONTEXT {
ULONG GuidCount;
PWMIGUIDREGINFO GuidList;
PWMI_QUERY_REGINFO QueryWmiRegInfo;
PWMI_QUERY_DATABLOCK QueryWmiDataBlock;
PWMI_SET_DATABLOCK SetWmiDataBlock;
PWMI_SET_DATAITEM SetWmiDataItem;
PWMI_EXECUTE_METHOD ExecuteWmiMethod;
PWMI_FUNCTION_CONTROL WmiFunctionControl;
} WMILIB_CONTEXT, *PWMILIB_CONTEXT;
#if (NTDDI_VERSION >= NTDDI_WIN2K)
NTSTATUS
NTAPI
WmiCompleteRequest(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN NTSTATUS Status,
IN ULONG BufferUsed,
IN CCHAR PriorityBoost);
NTSTATUS
NTAPI
WmiSystemControl(
IN PWMILIB_CONTEXT WmiLibInfo,
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
OUT PSYSCTL_IRP_DISPOSITION IrpDisposition);
NTSTATUS
NTAPI
WmiFireEvent(
IN PDEVICE_OBJECT DeviceObject,
IN LPCGUID Guid,
IN ULONG InstanceIndex,
IN ULONG EventDataSize,
IN PVOID EventData);
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
#ifdef __cplusplus
}
#endif