Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

335 lines
6.8 KiB

//
// permissi.h : header file
//
//
// Services
//
enum
{
#ifdef GATEWAY
ACC_FTP = 0,
ACC_GOPHER,
ACC_W3,
#else
ACC_MSN = 0,
#endif
//
// Don't touch this one!
//
ACC_COUNT
};
//
// Change flags
//
#define UPD_NONE 0x00000000 // No changes made in this session
#define UPD_CHANGED 0x00000001 // Some changes were made in this session.
#define UPD_ADDED 0x00000002 // The entry was added during this session.
#define UPD_DELETED 0x00000004 // Entry is marked for deletion
//
// Rights structure
//
typedef struct _RIGHTS
{
UINT nName; // Resource ID of string description
int nService; // Service this applies to (services enum above)
ACCESS_MASK accMask; // Access Mask (see gateway.h)
} RIGHTS;
///////////////////////////////////////////////////////////////////////////////
//
// CAccessEntry - an entry in the permissions listbox
//
class CAccessEntry : public CObjectPlus
{
public:
//
// Service names (used by the gateway API's)
//
static LPCTSTR lpstrServiceNames[ACC_COUNT];
public:
static BOOL LookupAccountSid(
CString &str,
int &nPictureID,
PSID pSid,
LPCTSTR lpstrSystemName = NULL
);
//
// Construction/Destrcution
//
public:
CAccessEntry(
LPACCESS_ENTRY lpAccessEntry,
LPCTSTR lpstrSystemName = NULL,
BOOL fResolveSID = FALSE
);
CAccessEntry(
ACCESS_MASK accPermissions,
PSID pSid,
LPCTSTR lpstrSystemName = NULL,
BOOL fResolveSID = FALSE
);
~CAccessEntry();
//
// Operations
//
void SetAccessMask(LPACCESS_ENTRY lpAccessEntry);
BOOL ResolveSID();
BOOL operator ==(const CAccessEntry & acc) const;
BOOL operator ==(const PSID pSid) const;
void AddPermissions(ACCESS_MASK accnewPermissions);
void RemovePermissions(ACCESS_MASK accPermissions);
void MarkEntryAsNew();
void MarkEntryAsClean();
//
// Access Functions
//
public:
inline CString QueryUserName()
{
ASSERT(m_fSIDResolved); // Has to have been, to make sense.
return m_strUserName;
}
//
// The "picture" id is the 0-based index of the
// bitmap that goes with this entry, and which
// is used for display in the listbox.
//
inline int QueryPictureID() const
{
ASSERT(m_fSIDResolved); // Has to have been, to make sense.
return m_nPictureID;
}
inline PSID GetSid()
{
return m_pSid;
}
inline ACCESS_MASK QueryAccessMask() const
{
return m_accMask;
}
//
// Check to see if this entry has undergone
// any changes since we called it up
//
inline BOOL IsDirty() const
{
return m_fDirty;
}
//
// Check to see if we've already looked up the
// name of this SID
//
inline BOOL IsSIDResolved() const
{
return m_fSIDResolved;
}
//
// Check to see if the add flag has been set for this
// entry.
//
inline BOOL IsNew() const
{
return m_fUpdates & UPD_ADDED;
}
//
// Check to see if the update flag has been set for this
// entry.
//
inline BOOL IsDifferent() const
{
return m_fUpdates & UPD_CHANGED;
}
//
// See if the entyy has the access mask required.
//
inline BOOL HasAppropriateAccess(ACCESS_MASK accTargetMask) const
{
return (m_accMask & accTargetMask) == accTargetMask;
}
//
// Check to see if the entry has at least some
// privileges (if it doesn't, it should be deleted)
//
inline BOOL HasSomeAccess() const
{
return m_accMask;
}
private:
ACCESS_MASK m_accMask;
CString m_strUserName;
LPTSTR m_lpstrSystemName;
PSID m_pSid;
BOOL m_fDirty;
BOOL m_fSIDResolved;
int m_nPictureID;
int m_fUpdates;
};
///////////////////////////////////////////////////////////////////////////////
//
// Listbox of CAccessEntry objects
//
class CAccessEntryListBox : public CListBoxEx
{
DECLARE_DYNAMIC(CAccessEntryListBox);
public:
static const nBitmaps; // Number of bitmaps
public:
CAccessEntryListBox(
int nTab = 0
);
public:
inline CAccessEntry * GetItem(
UINT nIndex
)
{
return (CAccessEntry *)GetItemDataPtr(nIndex);
}
inline int AddItem(
CAccessEntry * pItem
)
{
return AddString ((LPCTSTR)pItem);
}
void SetTabs(
int nTab
);
protected:
virtual void DrawItemEx( CListBoxExDrawStruct & s);
private:
int m_nTab;
};
///////////////////////////////////////////////////////////////////////////////
//
// CPermissionsPage Property page
//
class CPermissionsPage : public INetPropertyPage
{
DECLARE_DYNCREATE(CPermissionsPage)
//
// Construction
//
public:
CPermissionsPage(INetPropertySheet * pSheet = NULL);
~CPermissionsPage();
//
// Dialog Data
//
//{{AFX_DATA(CPermissionsPage)
enum { IDD = IDD_PERMISSIONS };
CButton m_button_RemoveService;
CButton m_button_AddService;
CComboBox m_combo_Rights;
CStatic m_static_ServiceRights;
CStatic m_static_ServiceName;
//}}AFX_DATA
CAccessEntryListBox m_list_Services;
//
// Overrides
//
inline NET_API_STATUS QueryError() const
{
return m_err;
}
virtual NET_API_STATUS SaveInfo(BOOL fUpdateData = FALSE);
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(CPermissionsPage)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
//
// Implementation
//
protected:
// Generated message map functions
//{{AFX_MSG(CPermissionsPage)
virtual BOOL OnInitDialog();
afx_msg void OnButtonAddPermService();
afx_msg void OnButtonRemovePermService();
afx_msg void OnSelchangeComboRights();
afx_msg void OnSelchangeListServicePermissions();
//}}AFX_MSG
afx_msg void OnItemChanged();
DECLARE_MESSAGE_MAP()
void AddUserPermissions(
int nService,
LPUSERDETAILS pusdtNewUser,
ACCESS_MASK accPermissions
);
NET_API_STATUS BuildList(
CObOwnedList &obl,
LPCTSTR lpstrServer,
int nService,
BOOL fResolveSID = FALSE
);
void ResolveList(
CObOwnedList &obl
);
void FillListBox(
CAccessEntryListBox & list,
CObOwnedList &obl,
ACCESS_MASK accMask
);
void FillServiceListBox(
int nService,
ACCESS_MASK accMask
);
void SetControlStates();
void FillComboBox();
void SetListTabs();
private:
CObOwnedList m_obSID[ACC_COUNT];
CListBoxExResources m_ListBoxRes;
NET_API_STATUS m_err;
CString m_strServer;
CString m_strHelpFile;
};