183 lines
6.1 KiB
C++
183 lines
6.1 KiB
C++
//
|
|
// Copyright 1997 - Microsoft
|
|
//
|
|
|
|
//
|
|
// CComputr.H - Computer properties class
|
|
//
|
|
|
|
#ifndef _CSERVICE_H_
|
|
#define _CSERVICE_H_
|
|
|
|
#include <adsprop.h>
|
|
|
|
// QITable
|
|
BEGIN_QITABLE( CService )
|
|
DEFINE_QI( IID_IShellExtInit, IShellExtInit , 1 )
|
|
DEFINE_QI( IID_IShellPropSheetExt, IShellPropSheetExt, 2 )
|
|
DEFINE_QI( IID_IIntelliMirrorSAP, IIntelliMirrorSAP , 30 )
|
|
END_QITABLE
|
|
|
|
// Definitions
|
|
LPVOID
|
|
CService_CreateInstance( void );
|
|
|
|
// Private IIntelliMirrorSAP Interface Definition
|
|
interface
|
|
IIntelliMirrorSAP:
|
|
public IUnknown
|
|
{
|
|
public:
|
|
STDMETHOD(CommitChanges)( void ) PURE; // 1
|
|
STDMETHOD(IsAdmin)( BOOL * pbool ) PURE; // 2
|
|
|
|
STDMETHOD(GetAllowNewClients)( BOOL *pbool ) PURE; // 3
|
|
STDMETHOD(SetAllowNewClients)( BOOL pbool ) PURE; // 4
|
|
|
|
STDMETHOD(GetLimitClients)( BOOL *pbool ) PURE; // 5
|
|
STDMETHOD(SetLimitClients)( BOOL pbool ) PURE; // 6
|
|
|
|
STDMETHOD(GetMaxClients)( UINT *pint ) PURE; // 7
|
|
STDMETHOD(SetMaxClients)( UINT pint ) PURE; // 8
|
|
|
|
STDMETHOD(GetCurrentClientCount)( UINT *pint ) PURE; // 9
|
|
STDMETHOD(SetCurrentClientCount)( UINT pint ) PURE; // 10
|
|
|
|
STDMETHOD(GetAnswerRequests)( BOOL *pbool ) PURE; // 11
|
|
STDMETHOD(SetAnswerRequests)( BOOL pbool ) PURE; // 12
|
|
|
|
STDMETHOD(GetAnswerOnlyValidClients)( BOOL *pbool ) PURE; // 13
|
|
STDMETHOD(SetAnswerOnlyValidClients)( BOOL pbool ) PURE; // 14
|
|
|
|
STDMETHOD(GetNewMachineNamingPolicy)( LPWSTR *pwsz ) PURE; // 15
|
|
STDMETHOD(SetNewMachineNamingPolicy)( LPWSTR pwsz ) PURE; // 16
|
|
|
|
STDMETHOD(GetNewMachineOU)( LPWSTR *pwsz ) PURE; // 17
|
|
STDMETHOD(SetNewMachineOU)( LPWSTR pwsz ) PURE; // 18
|
|
|
|
STDMETHOD(EnumIntelliMirrorOSes)( DWORD dwFlags, LPUNKNOWN *punk ) PURE; // 19
|
|
STDMETHOD(GetDefaultIntelliMirrorOS)( LPWSTR * pszName, LPWSTR * pszTimeout ) PURE; // 20
|
|
STDMETHOD(SetDefaultIntelliMirrorOS)( LPWSTR pszName, LPWSTR pszTimeout ) PURE; // 21
|
|
|
|
STDMETHOD(EnumTools)( DWORD dwFlags, LPUNKNOWN *punk ) PURE; // 22
|
|
STDMETHOD(EnumLocalInstallOSes)( DWORD dwFlags, LPUNKNOWN *punk ) PURE; // 23
|
|
|
|
STDMETHOD(GetServerDN)( LPWSTR *pwsz ) PURE; // 24
|
|
STDMETHOD(SetServerDN)( LPWSTR pwsz ) PURE; // 25
|
|
|
|
STDMETHOD(GetSCPDN)( LPWSTR * pwsz ) PURE; // 26
|
|
STDMETHOD(GetGroupDN)( LPWSTR * pwsz ) PURE; // 27
|
|
|
|
STDMETHOD(GetServerName)( LPWSTR *pwsz ) PURE; // 28
|
|
|
|
STDMETHOD(GetDataObject)( LPDATAOBJECT * pDataObj ) PURE; // 29
|
|
STDMETHOD(GetNotifyWindow)( HWND * phNotifyObj ) PURE; // 30
|
|
};
|
|
|
|
typedef IIntelliMirrorSAP *LPINTELLIMIRRORSAP;
|
|
|
|
// CService
|
|
class
|
|
CService:
|
|
public IShellExtInit, IShellPropSheetExt, IIntelliMirrorSAP
|
|
{
|
|
private:
|
|
// Enums
|
|
enum {
|
|
MODE_SHELL = 0,
|
|
MODE_ADMIN
|
|
};
|
|
|
|
UINT _uMode; // Admin or Shell mode
|
|
LPWSTR _pszSCPDN; // LDAP path to SCP
|
|
LPWSTR _pszGroupDN; // LDAP path to group. If NULL, not in a group.
|
|
LPWSTR _pszMachineName; // Machine Name
|
|
LPWSTR _pszDSServerName; // Save this so we use the same as DSADMIN
|
|
|
|
// IUnknown
|
|
ULONG _cRef;
|
|
DECLARE_QITABLE( CService );
|
|
|
|
LPDATAOBJECT _pDataObj; // DSA's data object
|
|
HWND _hwndNotify; // DSA notify window
|
|
ADSPROPINITPARAMS _InitParams; // DSA init params
|
|
|
|
IADs * _pads; // ADs to MAO
|
|
|
|
private: // Methods
|
|
CService();
|
|
~CService();
|
|
STDMETHOD(Init)();
|
|
|
|
HRESULT _GetDefaultSIF( LPWSTR pszAttribute, LPWSTR * pszName, LPWSTR * pszTimeout );
|
|
HRESULT _SetDefaultSIF( LPWSTR pszAttribute, LPWSTR pszName, LPWSTR pszTimeout );
|
|
HRESULT _GetComputerNameFromADs( );
|
|
HRESULT _FixObjectPath( LPWSTR pszOldObjectPath, LPWSTR *ppszNewObjectPath );
|
|
|
|
public: // Methods
|
|
friend LPVOID CService_CreateInstance( void );
|
|
STDMETHOD(Init2)( IADs * pads );
|
|
|
|
// IUnknown
|
|
STDMETHOD(QueryInterface)( REFIID riid, LPVOID *ppv );
|
|
STDMETHOD_(ULONG, AddRef)(void);
|
|
STDMETHOD_(ULONG, Release)(void);
|
|
|
|
// IShellExtInit
|
|
STDMETHOD(Initialize)( LPCITEMIDLIST pidlFolder, LPDATAOBJECT lpdobj, HKEY hkeyProgID);
|
|
|
|
// IShellPropSheetExt
|
|
STDMETHOD(AddPages)( LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam);
|
|
STDMETHOD(ReplacePage)( UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith,
|
|
LPARAM lParam);
|
|
|
|
// IIntelliMirrorSAP
|
|
STDMETHOD(CommitChanges)( void );
|
|
STDMETHOD(IsAdmin)( BOOL * pbool );
|
|
|
|
STDMETHOD(GetAllowNewClients)( BOOL *pbool );
|
|
STDMETHOD(SetAllowNewClients)( BOOL pbool );
|
|
|
|
STDMETHOD(GetLimitClients)( BOOL *pbool );
|
|
STDMETHOD(SetLimitClients)( BOOL pbool );
|
|
|
|
STDMETHOD(GetMaxClients)( UINT *pint );
|
|
STDMETHOD(SetMaxClients)( UINT pint );
|
|
|
|
STDMETHOD(GetCurrentClientCount)( UINT *pint );
|
|
STDMETHOD(SetCurrentClientCount)( UINT pint );
|
|
|
|
STDMETHOD(GetAnswerRequests)( BOOL *pbool );
|
|
STDMETHOD(SetAnswerRequests)( BOOL pbool );
|
|
|
|
STDMETHOD(GetAnswerOnlyValidClients)( BOOL *pbool );
|
|
STDMETHOD(SetAnswerOnlyValidClients)( BOOL pbool );
|
|
|
|
STDMETHOD(GetNewMachineNamingPolicy)( LPWSTR *pwsz );
|
|
STDMETHOD(SetNewMachineNamingPolicy)( LPWSTR pwsz );
|
|
|
|
STDMETHOD(GetNewMachineOU)( LPWSTR *pwsz );
|
|
STDMETHOD(SetNewMachineOU)( LPWSTR pwsz );
|
|
|
|
STDMETHOD(EnumIntelliMirrorOSes)( DWORD dwFlags, LPUNKNOWN *punk );
|
|
STDMETHOD(GetDefaultIntelliMirrorOS)( LPWSTR * pszName, LPWSTR * pszTimeout );
|
|
STDMETHOD(SetDefaultIntelliMirrorOS)( LPWSTR pszName, LPWSTR pszTimeout );
|
|
|
|
STDMETHOD(EnumTools)( DWORD dwFlags, LPUNKNOWN *punk );
|
|
STDMETHOD(EnumLocalInstallOSes)( DWORD dwFlags, LPUNKNOWN *punk );
|
|
|
|
STDMETHOD(GetServerDN)( LPWSTR *pwsz );
|
|
STDMETHOD(SetServerDN)( LPWSTR pwsz );
|
|
|
|
STDMETHOD(GetSCPDN)( LPWSTR * pwsz );
|
|
STDMETHOD(GetGroupDN)( LPWSTR * pwsz );
|
|
|
|
STDMETHOD(GetServerName)( LPWSTR * pwsz );
|
|
|
|
STDMETHOD(GetDataObject)( LPDATAOBJECT * pDataObj );
|
|
STDMETHOD(GetNotifyWindow)( HWND * phNotifyObj );
|
|
};
|
|
|
|
typedef CService* LPSERVICE;
|
|
|
|
#endif // _CSERVICE_H_
|