blob: e3e5cee50c61b104924e7562ae310a584e71e2b8 [file] [log] [blame]
#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 WMI_QUERY_REGINFO_CALLBACK) (
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 WMI_QUERY_REGINFO_CALLBACK *PWMI_QUERY_REGINFO;
typedef NTSTATUS
(NTAPI WMI_FUNCTION_CONTROL_CALLBACK) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN WMIENABLEDISABLECONTROL Function,
IN BOOLEAN Enable);
typedef WMI_FUNCTION_CONTROL_CALLBACK *PWMI_FUNCTION_CONTROL;
typedef NTSTATUS
(NTAPI WMI_QUERY_DATABLOCK_CALLBACK) (
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 WMI_QUERY_DATABLOCK_CALLBACK *PWMI_QUERY_DATABLOCK;
typedef NTSTATUS
(NTAPI WMI_EXECUTE_METHOD_CALLBACK) (
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 WMI_EXECUTE_METHOD_CALLBACK *PWMI_EXECUTE_METHOD;
typedef NTSTATUS
(NTAPI WMI_SET_DATABLOCK_CALLBACK) (
IN OUT PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp,
IN ULONG GuidIndex,
IN ULONG InstanceIndex,
IN ULONG BufferSize,
IN PUCHAR Buffer);
typedef WMI_SET_DATABLOCK_CALLBACK *PWMI_SET_DATABLOCK;
typedef NTSTATUS
(NTAPI WMI_SET_DATAITEM_CALLBACK) (
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 WMI_SET_DATAITEM_CALLBACK *PWMI_SET_DATAITEM;
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