317 lines
5.9 KiB
C
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___
|