147 lines
3.7 KiB
C
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 |