windows-nt/Source/XPSP1/NT/base/wmi/proppage/wmiprop.h
2020-09-26 16:20:57 +08:00

317 lines
5.9 KiB
C

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: wmiprop.h
//
//--------------------------------------------------------------------------
#ifndef ___wmiprop_h___
#define ___wmiprop_h___
typedef TCHAR *PTCHAR;
//
// Datablock description
//
//
// Holds a list of valid values for an enumeration type
//
typedef struct _ENUMERATIONITEM
{
ULONG64 Value;
PTCHAR Text;
ULONG Reserved;
} ENUMERATIONITEM, *PENUMERATIONITEM;
typedef struct _ENUMERATIONINFO
{
ULONG Count;
ULONG Reserved;
ENUMERATIONITEM List[1];
} ENUMERATIONINFO, *PENUMERATIONINFO;
//
// Holds a range of values
typedef struct
{
ULONG64 Minimum;
ULONG64 Maximum;
} RANGEINFO, *PRANGEINFO;
//
// Holds a list of ranges of values
//
typedef struct
{
ULONG Count;
RANGEINFO Ranges[1];
} RANGELISTINFO, *PRANGELISTINFO;
typedef enum VALIDATIONFUNC
{
WmiStringValidation,
WmiDateTimeValidation,
WmiRangeValidation,
WmiValueMapValidation,
WmiEmbeddedValidation
} VALIDATIONFUNC, *PVALIDATIONFUNC;
#define WmiMaximumValidation WmiEmbeddedValidation
struct _DATA_BLOCK_DESCRIPTION;
typedef struct _DATA_ITEM_DESCRIPTION
{
// CONSIDER: Make Name a BSTR
PTCHAR Name;
PTCHAR DisplayName;
PTCHAR Description;
CIMTYPE DataType;
ULONG DataSize;
VALIDATIONFUNC ValidationFunc;
union
{
//
// Used for enumeration data types
//
PENUMERATIONINFO EnumerationInfo;
//
// Used for a range of numbers
PRANGELISTINFO RangeListInfo;
//
// Used for embedded classes
struct _DATA_BLOCK_DESCRIPTION *DataBlockDesc;
};
//
// Number of elements in array if this item is an array
//
ULONG ArrayElementCount;
ULONG CurrentArrayIndex;
//
// Flags about property
//
ULONG IsReadOnly : 1;
ULONG IsSignedValue : 1;
ULONG DisplayInHex : 1;
ULONG IsFixedArray : 1;
ULONG IsVariableArray : 1;
//
// Actual value of the property
//
union
{
//
// storage for non array
//
UCHAR Data;
BOOLEAN boolval;
CHAR sint8;
SHORT sint16;
LONG sint32;
LONG64 sint64;
UCHAR uint8;
USHORT uint16;
ULONG uint32;
ULONG64 uint64;
PTCHAR String;
PTCHAR DateTime;
IWbemClassObject *pIWbemClassObject;
//
// pointer for storage to arrays
//
PVOID ArrayPtr;
BOOLEAN *boolArray;
CHAR *sint8Array;
SHORT *sint16Array;
LONG *sint32Array;
LONG64 *sint64Array;
UCHAR *uint8Array;
USHORT *uint16Array;
ULONG *uint32Array;
ULONG64 *uint64Array;
PTCHAR *StringArray;
PTCHAR *DateTimeArray;
IWbemClassObject **pIWbemClassObjectArray;
};
} DATA_ITEM_DESCRIPTION, *PDATA_ITEM_DESCRIPTION;
typedef struct _DATA_BLOCK_DESCRIPTION
{
PTCHAR Name;
PTCHAR DisplayName;
PTCHAR Description;
struct _DATA_BLOCK_DESCRIPTION *ParentDataBlockDesc;
IWbemClassObject *pInstance;
ULONG DataItemCount;
ULONG CurrentDataItem;
BOOLEAN UpdateClass;
DATA_ITEM_DESCRIPTION DataItems[1];
} DATA_BLOCK_DESCRIPTION, *PDATA_BLOCK_DESCRIPTION;
BOOLEAN ValidateEnumeration(
PDATA_ITEM_DESCRIPTION DataItem,
PTCHAR Value
);
BOOLEAN ValidateRangeList(
PDATA_ITEM_DESCRIPTION DataItem,
ULONG64 Value
);
BOOLEAN ValidateDateTime(
PDATA_ITEM_DESCRIPTION DataItem,
PTCHAR DateTime
);
typedef struct
{
PTCHAR MachineName;
PTCHAR RelPath;
PDATA_BLOCK_DESCRIPTION DataBlockDesc;
IWbemServices *pIWbemServices;
} CONFIGCLASS, *PCONFIGCLASS;
//
// PageInfo and Prototypes
//
typedef struct _PAGE_INFO {
HDEVINFO deviceInfoSet;
PSP_DEVINFO_DATA deviceInfoData;
HKEY hKeyDev;
CONFIGCLASS ConfigClass;
} PAGE_INFO, * PPAGE_INFO;
//
// Debug support
//
#ifdef DebugPrint
#undef DebugPrint
#endif
#if DBG
ULONG
_cdecl
DbgPrint(
PCH Format,
...
);
#define DEBUG_BUFFER_LENGTH 256
#define DebugPrint(x) WmiDebugPrint x
#else
#define DebugPrint(x)
#endif // DBG
VOID
WmiDebugPrint(
ULONG DebugPrintLevel,
PCHAR DebugMessage,
...
);
//
// function prototype
//
void WmiCleanDataItemDescData(
PDATA_ITEM_DESCRIPTION DataItemDesc
);
void WmiHideAllControls(
HWND hDlg,
BOOLEAN HideEmbeddedControls,
BOOLEAN HideArrayControls
);
BOOLEAN WmiValidateNumber(
struct _DATA_ITEM_DESCRIPTION *DataItemDesc,
PTCHAR Value
);
BOOLEAN WmiValidateDateTime(
struct _DATA_ITEM_DESCRIPTION *DataItemDesc,
PTCHAR Value
);
BOOLEAN WmiValidateRange(
struct _DATA_ITEM_DESCRIPTION *DataItemDesc,
PTCHAR Value
);
PPAGE_INFO
WmiCreatePageInfo(IN HDEVINFO deviceInfoSet,
IN PSP_DEVINFO_DATA deviceInfoData);
void
WmiDestroyPageInfo(PPAGE_INFO * ppPageInfo);
//
// Function Prototypes
//
BOOL APIENTRY
WmiPropPageProvider(LPVOID pinfo,
LPFNADDPROPSHEETPAGE pfnAdd,
LPARAM lParam);
HPROPSHEETPAGE
WmiCreatePropertyPage(PROPSHEETPAGE * ppsp,
PPAGE_INFO ppi);
UINT CALLBACK
WmiDlgCallback(HWND hwnd,
UINT uMsg,
LPPROPSHEETPAGE ppsp);
INT_PTR APIENTRY
WmiDlgProc(IN HWND hDlg,
IN UINT uMessage,
IN WPARAM wParam,
IN LPARAM lParam);
BOOLEAN
WmiApplyChanges(PPAGE_INFO ppi,
HWND hDlg);
void
WmiUpdate (PPAGE_INFO ppi,
HWND hDlg);
BOOL
WmiContextMenu(HWND HwndControl,
WORD Xpos,
WORD Ypos);
void
WmiHelp(HWND ParentHwnd,
LPHELPINFO HelpInfo);
#endif // ___Wmiprop_h___