Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

321 lines
9.7 KiB

// RequestObject.h: interface for the CRequestObject class.
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_REQUESTOBJECT_H__F370C612_D96E_11D1_8B5D_00A0C9954921__INCLUDED_)
#define AFX_REQUESTOBJECT_H__F370C612_D96E_11D1_8B5D_00A0C9954921__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#define EVENT_THREADS 50
#define THREAD_NO_PROGRESS -9
class CGenericClass;
//Used to house progress message information
typedef struct ProgressStruct
{
long field1;
long field2;
long field3;
long field4;
} ProgressStruct;
//Used to house progress message information
typedef struct ProListNode
{
//Link
ProListNode *pNext;
//Data
int iThread;
IWbemObjectSink *pSink;
WORD wTotal;
__int64 lTotal;
WORD wComplete;
__int64 lComplete;
__int64 lActionData;
} ProListNode;
//Used to house package codes
class PackageListNode
{
public:
PackageListNode() { pNext = NULL; wcscpy(wcCode, L""); }
virtual ~PackageListNode() {}
//Link
PackageListNode *pNext;
//Data
WCHAR wcCode[39];
};
//UI Handler
int WINAPI MyEventHandler(LPVOID pvContext, UINT iMessageType, LPCWSTR szMessage);
class CRequestObject
{
friend BOOL WINAPI DllMain(HINSTANCE, ULONG, LPVOID );
public:
CRequestObject();
virtual ~CRequestObject();
void Initialize(IWbemServices *pNamespace);
HRESULT CreateObject(BSTR bstrPath, IWbemObjectSink *pHandler, IWbemContext *pCtx);
HRESULT CreateObjectEnum(BSTR bstrPath, IWbemObjectSink *pHandler, IWbemContext *pCtx);
HRESULT PutObject(IWbemClassObject *pInst, IWbemObjectSink *pHandler, IWbemContext *pCtx);
HRESULT ExecMethod(BSTR bstrPath, BSTR bstrMethod, IWbemClassObject *pInParams,
IWbemObjectSink *pHandler, IWbemContext *pCtx);
HRESULT DeleteObject(BSTR bstrPath, IWbemObjectSink *pHandler, IWbemContext *pCtx);
#ifdef _EXEC_QUERY_SUPPORT
HRESULT ExecQuery(BSTR bstrQuery, IWbemObjectSink *pHandler, IWbemContext *pCtx);
bool ParseQuery(BSTR bstrQuery);
#endif
bool ParsePath(BSTR bstrPath);
HRESULT InitializeList(bool bGetList);
bool DestroyList();
bool Cleanup();
void FinalRelease();
//Registry Hive stuff
DWORD GetAccount(HANDLE TokenHandle, WCHAR *wcDomain, WCHAR *wcUser);
DWORD GetSid(HANDLE TokenHandle, WCHAR *wcSID, DWORD dwSID = BUFF_SIZE );
DWORD LoadHive();
DWORD UnloadHive();
DWORD AcquirePrivilege();
void RestorePrivilege();
TOKEN_PRIVILEGES* m_pOriginalPriv;
HKEY m_hKey;
DWORD m_dwSize;
DWORD m_dwCheckKeyPresentStatus;
WCHAR m_wcAccount[BUFF_SIZE];
WCHAR m_wcKeyName[1024];
WCHAR m_wcDomain[BUFF_SIZE];
WCHAR m_wcUser[BUFF_SIZE];
BSTR Package(int iPos);
BSTR m_bstrClass;
BSTR m_bstrPath;
BSTR m_Property[MSI_KEY_LIST_SIZE];
BSTR m_Value[MSI_KEY_LIST_SIZE];
int m_iPropCount;
int m_iValCount;
int m_iThreadID;
IWbemServices *m_pNamespace;
IWbemObjectSink *m_pHandler;
bool ParseProgress (WCHAR *wcMessage, ProgressStruct *ps);
bool ActionDataProgress (HRESULT *hr, int iThread);
bool ActionStartProgress (HRESULT *hr, int iThread);
bool CreateProgress (ProgressStruct *ps, HRESULT *hr, int iThread);
ProListNode * GetNode (int iThread);
private:
HRESULT CreateClass(CGenericClass **pClass, IWbemContext *pCtx);
#ifdef _EXEC_QUERY_SUPPORT
//Query Parsing Functions
WCHAR * GetNextProperty(WCHAR **pwcString, WCHAR wcProp[]);
WCHAR * GetNextValue(WCHAR **pwcString, WCHAR wcVal[]);
bool ExpectedToken(WCHAR **pwcString, WCHAR *pwcExpected);
WCHAR * GetNextToken(WCHAR **pwcString, WCHAR wcToken[]);
WCHAR * GetStringValue(WCHAR **pwcString, WCHAR wcToken[]);
bool EOL(WCHAR **pwcString);
#endif // _EXEC_QUERY_SUPPORT
bool IsInstance();
ProListNode * InitializeProgress(IWbemObjectSink *pHandler);
//Package list head
PackageListNode *m_pPackageHead;
//Thread List for progress messages
ProListNode * m_pHead;
ProListNode * RemoveNode (int iThread);
int InsertNode (ProListNode *pNode);
//Critical section for event handling and thread ID assignement
static CRITICAL_SECTION m_cs;
static CHeap_Exception m_he;
protected:
ULONG m_cRef; //Object reference count
};
//Properties
//////////////////
extern const char * pAccesses;
extern const char * pAction;
extern const char * pActionID;
extern const char * pAntecedent;
extern const char * pAppData;
extern const char * pAppID;
extern const char * pArgument;
extern const char * pArguments;
extern const char * pAttribute;
extern const char * pAttributes;
extern const char * pCabinet;
extern const char * pCaption;
extern const char * pCheck;
extern const char * pCheckID;
extern const char * pCLSID;
extern const char * pCommand;
extern const char * pCommandLine;
extern const char * pComponent;
extern const char * pComponentID;
extern const char * pCondition;
extern const char * pContentType;
extern const char * pContext;
extern const char * pCost;
extern const char * pCreationClassName;
extern const char * pDataSource;
extern const char * pDefaultDir;
extern const char * pDefInprocHandler;
extern const char * pDependencies;
extern const char * pDependent;
extern const char * pDescription;
extern const char * pDestination;
extern const char * pDestFolder;
extern const char * pDestName;
extern const char * pDirectory;
extern const char * pDirectoryName;
extern const char * pDirectoryPath;
extern const char * pDirProperty;
extern const char * pDiskID;
extern const char * pDiskPrompt;
extern const char * pDisplay;
extern const char * pDisplayName;
extern const char * pDomain;
extern const char * pDriver;
extern const char * pDriverDescription;
extern const char * pElement;
extern const char * pEntryName;
extern const char * pEntryValue;
extern const char * pEnvironment;
extern const char * pError;
extern const char * pErrorControl;
extern const char * pEvent;
extern const char * pExpression;
extern const char * pExpressionType;
extern const char * pExtension;
extern const char * pFeature;
extern const char * pFeatures;
extern const char * pField;
extern const char * pFile;
extern const char * pFileKey;
extern const char * pFileName;
extern const char * pFileSize;
extern const char * pFileTypeMask;
extern const char * pFontTitle;
extern const char * pGroupComponent;
extern const char * pHotKey;
extern const char * pID;
extern const char * pIdentificationCode;
extern const char * pIdentifyingNumber;
extern const char * pIniFile;
extern const char * pInsertable;
extern const char * pInstallDate;
extern const char * pInstallDate2;
extern const char * pInstallLocation;
extern const char * pInstallMode;
extern const char * pInstallState;
extern const char * pKey;
extern const char * pLanguage;
extern const char * pLastSequence;
extern const char * pLastUse;
extern const char * pLevel;
extern const char * pLibID;
extern const char * pLoadOrderGroup;
extern const char * pLocation;
extern const char * pManufacturer;
extern const char * pMaxDate;
extern const char * pMaxSize;
extern const char * pMaxVersion;
extern const char * pMessage;
extern const char * pMIME;
extern const char * pMinDate;
extern const char * pMinSize;
extern const char * pMinVersion;
extern const char * pName;
extern const char * pNext;
extern const char * pOperator;
extern const char * pOptions;
extern const char * pPackageCache;
extern const char * pParent;
extern const char * pPartComponent;
extern const char * pPassword;
extern const char * pPatch;
extern const char * pPatchID;
extern const char * pPatchSize;
extern const char * pPath;
extern const char * pPermission;
extern const char * pPrior;
extern const char * pProduct;
extern const char * pProductCode;
extern const char * pProductName;
extern const char * pProductVersion;
extern const char * pProgID;
extern const char * pProperty;
extern const char * pQual;
extern const char * pRegistration;
extern const char * pRegistry;
extern const char * pRemoteName;
extern const char * pReserveKey;
extern const char * pReserveLocal;
extern const char * pReserveSource;
extern const char * pResource;
extern const char * pRoot;
extern const char * pSection;
extern const char * pSequence;
extern const char * pServiceType;
extern const char * pSetting;
extern const char * pSetupFile;
extern const char * pShellNew;
extern const char * pShellNewValue;
extern const char * pSignature;
extern const char * pShortcut;
extern const char * pShowCmd;
extern const char * pSoftware;
extern const char * pSoftwareElementID;
extern const char * pSoftwareElementState;
extern const char * pSource;
extern const char * pSourceFolder;
extern const char * pSourceName;
extern const char * pStartMode;
extern const char * pStartName;
extern const char * pStartType;
extern const char * pStatus;
extern const char * pSystem;
extern const char * pSystemCreationClassName;
extern const char * pSystemName;
extern const char * pTable;
extern const char * pTarget;
extern const char * pTargetOperatingSystem;
extern const char * pTranslator;
extern const char * pType;
extern const char * pUpgradeCode;
extern const char * pUser;
extern const char * pValue;
extern const char * pVendor;
extern const char * pVerb;
extern const char * pVersion;
extern const char * pVolumeLabel;
extern const char * pWait;
extern const char * pWkDir;
#endif // !defined(AFX_REQUESTOBJECT_H__F370C612_D96E_11D1_8B5D_00A0C9954921__INCLUDED_)