windows-nt/Source/XPSP1/NT/base/busdrv/acpi/wmiacpi/wmimap.h
2020-09-26 16:20:57 +08:00

147 lines
3.7 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
wmimap.h
Abstract:
ACPI to WMI mapping layer
Author:
Alan Warwick
Environment:
Kernel mode
Revision History:
--*/
#if DBG
extern ULONG WmiAcpiDebug;
#define WmiAcpiPrint(l,m) if(l & WmiAcpiDebug) DbgPrint m
#else
#define WmiAcpiPrint(l,m)
#endif
#define WmiAcpiError 0x00000001
#define WmiAcpiWarning 0x00000002
#define WmiAcpiBasicTrace 0x00000004
#define WmiAcpiQueryTrace 0x00000010
#define WmiAcpiSetTrace 0x00000020
#define WmiAcpiMethodTrace 0x00000040
#define WmiAcpiEventTrace 0x00000080
#define WmiAcpiFncCtlTrace 0x00000100
#define WmiAcpiRegInfoTrace 0x00000200
#define WmiAcpiEvalTrace 0x00001000
#define ACPI_EVAL_OUTPUT_FUDGE sizeof(ACPI_EVAL_OUTPUT_BUFFER)
#define WmiAcpiPoolTag 'AimW'
typedef struct
{
GUID Guid;
union
{
CHAR ObjectId[2];
struct
{
UCHAR NotificationValue;
UCHAR Reserved;
} NotifyId;
};
USHORT Flags;
} WMIACPIMAPINFO, *PWMIACPIMAPINFO;
#define WmiAcpiMethodToMethodAsUlong(c1, c2, c3, c4) \
((ULONG)( c1 | (c2 << 8) | (c3 << 16) | (c4 << 24)))
#define _WDGMethodAsULONG (WmiAcpiMethodToMethodAsUlong('_','W','D','G'))
#define _WEDMethodAsULONG (WmiAcpiMethodToMethodAsUlong('_','W','E','D'))
typedef struct
{
GUID Guid; // Guid that names data block
union
{
CHAR ObjectId[2]; // 2 character ACPI id for Data Blocks and Methods
struct
{
UCHAR NotificationValue; // Byte value passed by event handler control method
UCHAR Reserved[1];
} NotifyId;
};
UCHAR InstanceCount;
UCHAR Flags;
} WMIACPIGUIDMAP, *PWMIACPIGUIDMAP;
// Set this flag if the WCxx control method should be run to whenever
// the first data consumer is interested in collecting the data block
// and whenever the last data consumer is no longer interested.
#define WMIACPI_REGFLAG_EXPENSIVE 0x1
// Set this flag if the guid represents a set of WMI method calls and
// not a data block
#define WMIACPI_REGFLAG_METHOD 0x2
// Set this flag if the data block is wholly composed of a string
// and should be translated from ASCIZ to UNICODE in returning queries
// and from UNICODE to ASCIZ when
// passing sets
#define WMIACPI_REGFLAG_STRING 0x04
// Set this flag if the guid maps to an event rather than a data block
// or method
#define WMIACPI_REGFLAG_EVENT 0x08
typedef struct
{
WORK_QUEUE_ITEM WorkQueueItem;
PVOID CallerContext;
PWORKER_THREAD_ROUTINE CallerWorkItemRoutine;
PDEVICE_OBJECT DeviceObject;
ULONG Status;
PUCHAR OutBuffer;
ULONG OutBufferSize;
} IRP_CONTEXT_BLOCK, *PIRP_CONTEXT_BLOCK;
//
// This defines the maximum size for the data returned from the _WED method
// and thus the maximum size of the data associated with an event
#define _WEDBufferSize 512
//
// Device extension for WMI acpi mapping devices
typedef struct
{
PDEVICE_OBJECT LowerDeviceObject;
PDEVICE_OBJECT LowerPDO;
ULONG GuidMapCount;
PWMIACPIMAPINFO WmiAcpiMapInfo;
ULONG Flags;
WMILIB_CONTEXT WmilibContext;
ACPI_INTERFACE_STANDARD WmiAcpiDirectInterface;
BOOLEAN AcpiNotificationEnabled;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
//
// If this flag is set that means that the device has been removed from the
// system and any requests sent to it should be rejected. The only memory
// that can be relied upon is the DeviceExtension, but nothing that the
// device extension points to.
#define DEVFLAG_REMOVED 0x00000001
//
// If this flag is set then the device has successfully registered with WMI
#define DEVFLAG_WMIREGED 0x00000002