140 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 1997-1999 Microsoft Corporation
 | |
| #ifndef __SI__
 | |
| #define __SI__
 | |
| 
 | |
| #include "..\common\ServiceThread.h"
 | |
| #include "..\common\SshWbemHelpers.h"
 | |
| #include "FakeSecuritySetting.h"
 | |
| #include "aclui.h"
 | |
| 
 | |
| struct __declspec(uuid("965FC360-16FF-11d0-91CB-00AA00BBB723")) ISecurityInformation;
 | |
| 
 | |
| //===============================================================================
 | |
| class ATL_NO_VTABLE CSecurityInformation : public ISecurityInformation, 
 | |
| 											public CComObjectRoot
 | |
| {
 | |
| protected:
 | |
| 
 | |
|     DECLARE_NOT_AGGREGATABLE(CSecurityInformation)
 | |
|     BEGIN_COM_MAP(CSecurityInformation)
 | |
|         COM_INTERFACE_ENTRY(ISecurityInformation)
 | |
|     END_COM_MAP()
 | |
| 
 | |
|   // *** ISecurityInformation methods ***
 | |
|   STDMETHOD(GetObjectInformation)(PSI_OBJECT_INFO pObjectInfo) = 0;
 | |
| 
 | |
|   STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation,
 | |
|                             PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
 | |
|                             BOOL fDefault ) = 0;
 | |
| 
 | |
|   STDMETHOD(SetSecurity)(SECURITY_INFORMATION SecurityInformation,
 | |
| 						 PSECURITY_DESCRIPTOR pSecurityDescriptor) = 0;
 | |
| 
 | |
|   STDMETHOD(GetAccessRights)(const GUID  *pguidObjectType,
 | |
| 							  DWORD       dwFlags,
 | |
| 							  PSI_ACCESS  *ppAccess,
 | |
| 							  ULONG       *pcAccesses,
 | |
| 							  ULONG       *piDefaultAccess) = 0;
 | |
| 
 | |
|   STDMETHOD(MapGeneric)(const GUID  *pguidObjectType,
 | |
| 						  UCHAR       *pAceFlags,
 | |
| 						  ACCESS_MASK *pMask) = 0;
 | |
| 
 | |
|   STDMETHOD(GetInheritTypes)(PSI_INHERIT_TYPE  *ppInheritTypes,
 | |
| 								ULONG *pcInheritTypes) = 0;
 | |
| 
 | |
|   STDMETHOD(PropertySheetPageCallback)(HWND hwnd, 
 | |
| 									  UINT uMsg, 
 | |
| 									  SI_PAGE_TYPE  uPage) = 0;
 | |
| 
 | |
| 	bstr_t m_settingPath;
 | |
| };
 | |
| 
 | |
| //===============================================================================
 | |
| class CSecurity : public CComObject<CSecurityInformation>
 | |
| {
 | |
| public:
 | |
| 	CSecurity();
 | |
| 
 | |
| 	void Initialize(WbemServiceThread *serviceThread,
 | |
| 					CWbemClassObject &m_inst,
 | |
| 					bstr_t m_deviceID,
 | |
| 					LPWSTR m_idiotName,
 | |
| 					LPWSTR m_provider,
 | |
| 					LPWSTR m_mangled);
 | |
| 	
 | |
| 	// *** ISecurityInformation methods ***
 | |
| 	STDMETHOD(GetObjectInformation)(PSI_OBJECT_INFO pObjectInfo);
 | |
| 
 | |
|     STDMETHOD(GetSecurity) (THIS_ SECURITY_INFORMATION RequestedInformation,
 | |
|                             PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
 | |
|                             BOOL fDefault);
 | |
| 
 | |
| 	STDMETHOD(SetSecurity)(SECURITY_INFORMATION SecurityInformation,
 | |
| 						 PSECURITY_DESCRIPTOR pSecurityDescriptor);
 | |
| 
 | |
| 	STDMETHOD(GetAccessRights)(const GUID *pguidObjectType,
 | |
| 							  DWORD       dwFlags,
 | |
| 							  PSI_ACCESS  *ppAccess,
 | |
| 							  ULONG       *pcAccesses,
 | |
| 							  ULONG       *piDefaultAccess);
 | |
| 
 | |
| 	STDMETHOD(MapGeneric)(const GUID  *pguidObjectType,
 | |
| 						  UCHAR       *pAceFlags,
 | |
| 						  ACCESS_MASK *pMask);
 | |
| 
 | |
| 	STDMETHOD(GetInheritTypes)(PSI_INHERIT_TYPE *ppInheritTypes,
 | |
| 								ULONG *pcInheritTypes);
 | |
| 
 | |
| 	STDMETHOD(PropertySheetPageCallback)(HWND hwnd, 
 | |
| 									  UINT uMsg, 
 | |
| 									  SI_PAGE_TYPE uPage);
 | |
| 
 | |
| protected:
 | |
| 	// NOTE: From ResultDrive
 | |
| 	bstr_t m_deviceID;
 | |
| 	wchar_t m_idiotName[100];
 | |
| 	wchar_t m_provider[100];
 | |
| 	wchar_t m_mangled[255];
 | |
| 
 | |
| 	//Variables required for storing the initial previlege
 | |
| 	DWORD m_dwprevSize;
 | |
| 	TOKEN_PRIVILEGES* m_prevTokens;
 | |
| 	BYTE *m_prevBuffer;
 | |
| 
 | |
| 	WbemServiceThread *g_serviceThread;
 | |
| 	CWbemClassObject m_inst;  //of Win32_logicalDisk
 | |
| 	
 | |
| 	//-------------------------
 | |
| 	CWbemServices m_WbemServices;
 | |
| 	HRESULT m_cacheHR;
 | |
| 	bool m_initingDlg;
 | |
| 
 | |
| 	FakeSecuritySetting m_sec;	
 | |
| 
 | |
| 	void SetPriv(IWbemServices *service);
 | |
| 	DWORD EnablePriv(IWbemServices *service,
 | |
| 						bool fEnable);
 | |
| 	void ClearPriv(IWbemServices *service);
 | |
| 
 | |
| 	HANDLE m_hAccessToken;
 | |
| 	LUID m_luid, m_luid2;
 | |
| 	bool m_fClearToken;
 | |
| 
 | |
| 	PSECURITY_DESCRIPTOR m_ppCachedSD;
 | |
| 
 | |
| 	LPWSTR CloneWideString(_bstr_t pszSrc);
 | |
| 
 | |
| 	void ProtectACLs(SECURITY_INFORMATION si, 
 | |
| 						PSECURITY_DESCRIPTOR pSD);
 | |
| 	DWORD GetAccessMask(CWbemClassObject &inst);
 | |
| 
 | |
|     STDMETHOD(CacheSecurity)(THIS_ SECURITY_INFORMATION RequestedInformation,
 | |
|                             PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
 | |
|                             BOOL fDefault );
 | |
| 	void FixSynchronizeAccess(SECURITY_INFORMATION si, 
 | |
| 								PSECURITY_DESCRIPTOR pSD);
 | |
| 
 | |
| };
 | |
| 
 | |
| #endif __SI__ |