|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1996 - 1999
//
// File: ntfssi.h
//
// This file contains the definition of the CNTFSSecurity object.
//
//--------------------------------------------------------------------------
#ifndef _NTFSSI_H_
#define _NTFSSI_H_
#include "si.h"
STDMETHODIMP CheckFileAccess(LPCTSTR pszObjectName, LPDWORD pdwAccessGranted);
struct NTFS_COMPARE_DATA { HDPA hItemList; DWORD dwSIFlags; SECURITY_INFORMATION siConflict; UINT idsSaclPrompt; UINT idsDaclPrompt; LPTSTR pszSaclConflict; LPTSTR pszDaclConflict; HRESULT hrResult; BOOL bAbortThread;
NTFS_COMPARE_DATA(HDPA h, DWORD dw) : hItemList(h), dwSIFlags(dw) {} ~NTFS_COMPARE_DATA(); }; typedef NTFS_COMPARE_DATA *PNTFS_COMPARE_DATA;
class CNTFSSecurity; struct NTFS_PF_DATA { SECURITY_INFORMATION si; CNTFSSecurity * pNTFSSec; PSECURITY_DESCRIPTOR pSD; BOOL bCancel; }; typedef NTFS_PF_DATA * PNTFS_PF_DATA;
class CNTFSSecurity : public CSecurityInformation { private: HANDLE m_hCompareThread; PNTFS_COMPARE_DATA m_pCompareData; IProgressDialog *m_pProgressDlg; HWND m_hwndPopupOwner; PSECURITY_DESCRIPTOR m_psdOwnerFullControl;
public: CNTFSSecurity(SE_OBJECT_TYPE seType); virtual ~CNTFSSecurity();
STDMETHOD(Initialize)(HDPA hItemList, DWORD dwFlags, LPTSTR pszServer, LPTSTR pszObject);
// ISecurityInformation methods not handled by CSecurityInformation
// or overridden here.
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(GetSecurity)(SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR *ppSD, BOOL fDefault); STDMETHOD(SetSecurity)(SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR pSD); STDMETHOD(PropertySheetPageCallback)(HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage); STDMETHOD(GetInheritSource)(SECURITY_INFORMATION si, PACL pACL, PINHERITED_FROM *ppInheritArray);
HWND GetHwndPopOwner() { return m_hwndPopupOwner; } HRESULT SetProgress(LPTSTR pszFile); HRESULT GiveOwnerFullControl(LPCWSTR lpszFileName, PSECURITY_DESCRIPTOR pSD, PBOOL pbIsFile );
protected:
HRESULT SetSecurityLocal(SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR pSD, LPBOOL pbNotAllApplied = NULL); void CreateProgressDialog(SECURITY_INFORMATION si); void CloseProgressDialog(void);
HRESULT BuildOwnerFullControlSD(PSECURITY_DESCRIPTOR pSD);
#ifdef SUPPORT_NTFS_DEFAULT
HRESULT GetParentSecurity(SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR *ppSD); HRESULT GetDefaultSecurity(SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR *ppSD); #endif
#ifdef DONT_USE_ACLAPI
STDMETHOD(ReadObjectSecurity)(LPCTSTR pszObject, SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR *ppSD); #endif // DONT_USE_ACLAPI
STDMETHOD(WriteObjectSecurity)(LPCTSTR pszObject, SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR pSD);
void WaitForComparison(); static DWORD WINAPI NTFSReadSD(LPCTSTR pszObject, SECURITY_INFORMATION si, PSECURITY_DESCRIPTOR* ppSD); static DWORD WINAPI NTFSCompareThreadProc(LPVOID pvData); };
#endif /* _NTFSSI_H_ */
|