windows-nt/Source/XPSP1/NT/inetsrv/iis/staxinc/actlapi.h
2020-09-26 16:20:57 +08:00

1047 lines
19 KiB
C

//>-------------------------------------------------------------------------------<
//
// File: Actlapi.h
//
// Synopsis: Access Control and Authentication API's:
//
// UiGetAccountRights,
// UiGetValidationInfo
//
// Sysop API's for accout/group/token maintenance in security DB:
//
// AddAcct
// UpdateAcct
// DeleteAcct
// DeleteAcctByLogin
// SetPassword
// GetHandle
// GetAcctInfo
// GetAcctPlan
//
// EnumUserGroups
// EnumUserGroupsEx
// GetUserGroupDetails
// FindUserGroup
// AddUserGroup
// UpdateUserGroup
// DeleteUserGroup
// EnumGroupMembers
// EnumGroupMembersEx
// EnumGroupMembersExpire
// EnumGroupMembersExpireEx
// AddAcctToGroup
// AddAcctToGroupExpire
// RemoveAcctFromGroup
// RemoveExpiredAcctsFromGroup
//
// EnumTokens
// EnumTokensEx
// CreateToken
// ModifyToken
// DeleteToken
// EnumAcctPrivateTokens
// EnumAcctPrivateTokensEx
// EnumGroupsWithToken
// EnumGroupsWithTokenEx
// EnumGroupsWithTokenExpire
// EnumGroupsWithTokenExpireEx
// AddGroupToToken
// AddGroupToTokenExpire
// EnumAcctsWithToken
// RemoveGroupFromToken
// RemoveExpiredGroupsFromToken
// EnumAcctsWithToken
// EnumAcctsWithTokenEx
// EnumAcctsWithTokenExpire
// EnumAcctsWithTokenExpireEx
// AddAcctToToken
// AddAcctToTokenExpire
// RemoveAcctFromToken
// RemoveExpiredAcctsFromToken
// GetTokenDetails
// TokenIdFromTokenName
// UiIsAccountInGroup
// EnumExcludedAccts
// EnumExcludedAcctsEx
// AddExclusion
// AddExclusionEx
// RemoveExclusion
// GetMaxTokenId
//
// AddAccessPlan
// UpdateAccessPlan
// DeleteAccessPlan
// EnumAccessPlans
// EnumAccessPlansEx
//
// SearchAcctsWithToken
// SearchExcludedAcctsWithToken
// SearchGroupMembers
// SearchGroupsWithToken
// SearchTokens
// SearchUserGroups
// TotalAcctsWithToken
// TotalExcludedAcctsWithToken
// TotalGroupMembers
// TotalGroupsWithToken
// TotalTokens
// TotalUserGroups
//
// History: DanielLi Ported to 2.x tree 03/22/96
//
// Copyright (C) 1994-1996 Microsoft Corporation
// All rights reserved
//
//>-------------------------------------------------------------------------------<
#if !defined(__ACTLAPI_H__)
#define __ACTLAPI_H__
#include <acsctl.h>
#if !defined(_ACTL_DLL_DEFINED)
#if defined(WIN32)
#if defined(_ACTLDLL)
#define ActlDLL DllExport __stdcall
#else
#define ActlDLL DllImport __stdcall
#endif
#else
#define ActlDLL
#endif
#define _ACTL_DLL_DEFINED
#endif
//--------------------------------------------------------------------------------
//
// Adjustable parameters
//
//--------------------------------------------------------------------------------
typedef struct _ACCESS_TUNING
{
//
// max number of user caches; default is: 100K
//
DWORD dwMaxUserCaches;
//
// the beginning instance size of CPool list, in the power of 2, so, the actual
// size is : 2^dwFirstCPool; default is: 7 (128 bytes)
//
DWORD dwFirstPoolSize;
//
// the number of CPool in the CPool list; default is: 5
//
DWORD dwPoolSteps;
} ACCESS_TUNING, *PACCESS_TUNING;
//--------------------------------------------------------------------------------
//
// Performance counters
//
//--------------------------------------------------------------------------------
typedef struct _ACCESS_STATISTICS
{
//
// number of times UiGetAccountRights got called
//
LONG cGetAccountRights;
LONG cGetAccountRightsRate;
//
// number of times UiGetAccountRights failed
//
LONG cGetAccountRightsFailures;
LONG cGetAccountRightsFailuresRate;
//
// number of times pass-through queries w/o hitting cache
//
LONG cGetAccountRightsPassThru;
LONG cGetAccountRightsPassThruRate;
#if 0
//
// number of times UiGetAccountRigts failed due to query timeout
//
LONG cGetAccountRightsTimeout;
LONG cGetValidationInfo;
LONG cGetValidationInfoFailures;
//
// number of times Security DB query (sp_get_tokens_and_groups) is issued to
// refresh the user cache
//
LONG cNumDBQueriesForCache;
//
// number of times the user cache is added into the cache pool
//
LONG cNumUserCacheAdded;
//
// number of times the user cache is released from the cache pool
//
LONG cNumUserCacheReleased;
//
// number of times CDBUserCache::operator new() got called
//
LONG cNewUserCache;
//
// number of times CDBUserCache::operator delete() got called
//
LONG cDeleteUserCache;
//
// number of times token-group cache allocated (one token-group cache per CDBUserCache)
//
LONG cAllocTokenGroupCache;
//
// number of token-group cache allocated (one token-group cache per CDBUserCache)
//
LONG cFreeTokenGroupCache;
//
// number of times the plan list is refreshed (GetPlans)
//
LONG cNumPlanListRefreshed;
//
// number of times GetPlanRightsOnToken is called
//
LONG cGetPlanRightsOnToken;
//
// number of AddAcct are called
//
LONG cAddAcct;
//
// number of AddAcct failed
//
LONG cAddAcctFailures;
//
// number of UpdateAcct are called
//
LONG cUpdateAcct;
//
// number of UpdateAcct failed
//
LONG cUpdateAcctFailures;
LONG cDeleteAcct;
LONG cDeleteAcctFailures;
LONG cSetPassword;
LONG cSetPasswordFailures;
LONG cGetHandle;
LONG cGetHandleFailures;
LONG cAddAcctToToken;
LONG cAddAcctToTokenFailures;
LONG cRemoveAcctFromToken;
LONG cRemoveAcctFromTokenFailures;
LONG cGetTokenDetails;
LONG cGetTokenDetailsFailures;
LONG cEnumAcctPrivateTokens;
LONG cEnumAcctPrivateTokensFailures;
LONG cGetAcctInfo;
LONG cGetAcctInfoFailures;
#endif
} ACCESS_STATISTICS, *PACCESS_STATISTICS;
#define INC_ACCESS_COUNTER(counter) if (g_pCntrs) \
InterlockedIncrement((LPLONG)&g_pCntrs->##counter)
#define DEC_ACCESS_COUNTER(counter) if (g_pCntrs) \
InterlockedDecrement((LPLONG)&g_pCntrs->##counter)
//
// Structures to manipulate token, group, account info
//
typedef struct _ACCOUNT_INFO
{
HACCT hAcct;
CHAR szLoginName[AC_MAX_LOGIN_NAME_LENGTH+1];
CHAR szDomainName[AC_MAX_DOMAIN_NAME_LENGTH+1]; // reserved
CHAR szFirstName[AC_MAX_FIRST_NAME_LENGTH+1];
CHAR szLastName[AC_MAX_LAST_NAME_LENGTH+1];
WORD wAcctType;
CHAR szPassword[AC_MAX_PASSWORD_LENGTH+1];
WORD wAcctStatus;
SYSTEMTIME tmExpired;
} ACCOUNT_INFO, *PACCOUNT_INFO;
typedef struct _ACCOUNT_INFO_RIGHT
{
HACCT hAcct;
CHAR szLoginName[AC_MAX_LOGIN_NAME_LENGTH+1];
CHAR szFirstName[AC_MAX_FIRST_NAME_LENGTH+1];
CHAR szLastName[AC_MAX_LAST_NAME_LENGTH+1];
AR arRight;
SYSTEMTIME tmExpired;
} ACCOUNT_INFO_RIGHT, *PACCOUNT_INFO_RIGHT;
typedef struct _USER_GROUP
{
HGROUP hGroup;
CHAR szName[AC_MAX_GROUP_NAME_LENGTH];
} USER_GROUP, *PUSER_GROUP;
typedef struct _USER_GROUP_RIGHT
{
HGROUP hGroup;
CHAR szName[AC_MAX_GROUP_NAME_LENGTH+1];
AR arRight;
SYSTEMTIME tmExpired;
} USER_GROUP_RIGHT, *PUSER_GROUP_RIGHT;
typedef struct _USER_GROUP_DETAILS
{
HGROUP hGroup;
CHAR szName[AC_MAX_GROUP_NAME_LENGTH+1];
TOKEN token;
} USER_GROUP_DETAILS, *PUSER_GROUP_DETAILS;
typedef struct _TOKEN_DETAILS
{
TOKEN token;
CHAR szName[AC_MAX_TOKEN_NAME_LENGTH+1];
CHAR szDesc[AC_MAX_TOKEN_DESC_LENGTH+1];
HGROUP hOwnerGroup;
} TOKEN_DETAILS, *PTOKEN_DETAILS;
typedef struct _TOKEN_RIGHT
{
TOKEN token;
AR arRight;
SYSTEMTIME tmExpired;
} TOKEN_RIGHT, *PTOKEN_RIGHT;
typedef struct _ACCESS_PLAN
{
CHAR szName[AC_MAX_GROUP_NAME_LENGTH+1];
HGROUP hGroup; // group id used as plan id
HACCT hAcct; // proxy account for this group
HACCT hOwner; // reserved for owner id
TOKEN token;
} ACCESS_PLAN, *PACCESS_PLAN;
//--------------------------------------------------------------------------------
//
// Prototypes of caller-defined callback functions passed into EnumXXXXEx API's
//
//--------------------------------------------------------------------------------
typedef UINT (__cdecl *PGROUPENUMPROC)( PUSER_GROUP pGroup, LPARAM lParam );
typedef UINT (__cdecl *PACCTENUMPROC)( PACCOUNT_INFO pAcct, LPARAM lParam );
typedef UINT (__cdecl *PTOKENENUMPROC)( PTOKEN_DETAILS pToken, LPARAM lParam );
typedef UINT (__cdecl *PTOKENRITENUMPROC)( PTOKEN_RIGHT pTokenRit, LPARAM lParam );
typedef UINT (__cdecl *PACCTRITENUMPROC)( PACCOUNT_INFO_RIGHT pAcctRit, LPARAM lParam );
typedef UINT (__cdecl *PGROUPRITENUMPROC)( PUSER_GROUP_RIGHT pGroupRit, LPARAM lParam );
typedef UINT (__cdecl *PPLANENUMPROC)( PACCESS_PLAN pPlan, LPARAM lParam );
extern "C"
{
BOOL ActlDLL FInitAccessLib(BOOL fCacheNeeded);
VOID ActlDLL TerminateAccessLib();
UINT ActlDLL UiResetAccessTuningBlock();
VOID ActlDLL GetDefaultAccessTuningParam(PACCESS_TUNING pTuning);
UINT ActlDLL UiSetAccessTuningBlock(PACCESS_TUNING pTuning);
PACCESS_STATISTICS ActlDLL
GetAccessPerfmonBlock();
UINT ActlDLL SetAccessPerfmonBlock(PACCESS_STATISTICS pStat);
UINT ActlDLL UiRegisterAccessDB
(
CHAR *szServerName,
CHAR *szDBName,
CHAR *szLogin,
CHAR *szPassword,
CHAR *szQryServerName,
CHAR *szQryDBName,
CHAR *szQryLogin,
CHAR *szQryPassword
);
UINT ActlDLL UiGetAccountRights(HACCT hAcct, TOKEN dwToken, AR *pRights);
UINT ActlDLL UiGetValidationInfo
(
CHAR *szLoginName,
CHAR *szDomain,
HACCT *phAcct,
WORD *pwAcctType,
CHAR *szPassword,
WORD *pwStatus
);
VOID ActlDLL ReleaseUserCache(HACCT hAcct);
VOID ActlDLL ReleaseGroupInCache(HGROUP hGroup);
UINT ActlDLL
AddAcct
(
PACCOUNT_INFO pAcctInfo
);
UINT ActlDLL
UpdateAcct
(
PACCOUNT_INFO pAcctInfo
);
UINT ActlDLL
DeleteAcct
(
HACCT hAcct
);
UINT ActlDLL
DeleteAcctByLogin
(
CHAR *szLoginName
);
UINT ActlDLL
SetPassword
(
HACCT hAcct,
PCHAR szOldPassword,
PCHAR szNewPassword
);
UINT ActlDLL
SetPasswordAdmin
(
HACCT hAcct,
PCHAR szNewPassword
);
UINT ActlDLL
GetHandle
(
PCHAR szLoginName,
PHACCT phAcct
);
UINT ActlDLL
GetAcctInfo
(
HACCT hAcct,
PACCOUNT_INFO pAcctInfo
);
UINT ActlDLL
GetAcctPlan
(
HACCT hAcct,
PACCESS_PLAN pPlan
);
UINT ActlDLL
EnumUserGroups
(
PUSER_GROUP pGroups,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumUserGroupsEx
(
PGROUPENUMPROC lpGroupEnumFunc,
LPARAM lParam
);
UINT ActlDLL
GetUserGroupDetails
(
HGROUP hGroup,
PUSER_GROUP_DETAILS pDetails
);
UINT ActlDLL
FindUserGroup
(
PSTR szName,
PUSER_GROUP_DETAILS pDetails
);
UINT ActlDLL
AddUserGroup
(
PUSER_GROUP_DETAILS pDetails
);
UINT ActlDLL
UpdateUserGroup
(
PUSER_GROUP_DETAILS pDetails
);
UINT ActlDLL
DeleteUserGroup
(
HGROUP hGroup
);
UINT ActlDLL
EnumGroupMembers
(
HGROUP hGroup,
PACCOUNT_INFO pAccts,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumGroupMembersEx
(
HGROUP hGroup,
PACCTENUMPROC lpAcctEnumFunc,
LPARAM lParam
);
UINT ActlDLL
EnumGroupMembersExpire
(
HGROUP hGroup,
LPSYSTEMTIME lptmExpired,
PACCOUNT_INFO pAccts,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumGroupMembersExpireEx
(
HGROUP hGroup,
LPSYSTEMTIME lptmExpired,
PACCTENUMPROC lpAcctEnumFunc,
LPARAM lParam
);
UINT ActlDLL
AddAcctToGroup
(
HGROUP hGroup,
HACCT hAcct
);
UINT ActlDLL
AddAcctToGroupExpire
(
HGROUP hGroup,
HACCT hAcct,
LPSYSTEMTIME lptmExpired
);
UINT ActlDLL
RemoveAcctFromGroup
(
HGROUP hGroup,
HACCT hAcct
);
UINT ActlDLL
RemoveExpiredAcctsFromGroup
(
HGROUP hGroup
);
UINT ActlDLL
EnumTokens
(
PTOKEN_DETAILS pTokens,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumTokensEx
(
PTOKENENUMPROC lpTokenEnumFunc,
LPARAM lParam
);
UINT ActlDLL
CreateToken
(
PTOKEN_DETAILS pToken
);
UINT ActlDLL
ModifyToken
(
PTOKEN_DETAILS pToken
);
UINT ActlDLL
DeleteToken
(
TOKEN token
);
UINT ActlDLL
EnumAcctPrivateTokens
(
HACCT hAcct,
AR arRight,
PTOKEN_RIGHT pTokenRit,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumAcctPrivateTokensEx
(
HACCT hAcct,
AR arRight,
PTOKENRITENUMPROC lpTokenRitEnumFunc,
LPARAM lParam
);
UINT ActlDLL
EnumGroupsWithToken
(
TOKEN token,
PUSER_GROUP_RIGHT pGroups,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumGroupsWithTokenEx
(
TOKEN token,
PGROUPRITENUMPROC lpGroupRitEnumFunc,
LPARAM lParam
);
UINT ActlDLL
EnumGroupsWithTokenExpire
(
TOKEN token,
LPSYSTEMTIME lptmExpired,
PUSER_GROUP_RIGHT pGroups,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumGroupsWithTokenExpireEx
(
TOKEN token,
LPSYSTEMTIME lptmExpired,
PGROUPRITENUMPROC lpGroupRitEnumFunc,
LPARAM lParam
);
UINT ActlDLL
AddGroupToToken
(
TOKEN token,
HGROUP hGroup,
AR wRights
);
UINT ActlDLL
AddGroupToTokenExpire
(
TOKEN token,
HGROUP hGroup,
AR wRights,
LPSYSTEMTIME lptmExpired
);
UINT ActlDLL
RemoveGroupFromToken
(
TOKEN token,
HGROUP hGroup
);
UINT ActlDLL
RemoveExpiredGroupsFromToken
(
TOKEN token
);
UINT ActlDLL
EnumAcctsWithToken
(
TOKEN token,
PACCOUNT_INFO_RIGHT pAcctRits,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumAcctsWithTokenEx
(
TOKEN token,
PACCTRITENUMPROC lpAcctRitEnumFunc,
LPARAM lParam
);
UINT ActlDLL
EnumAcctsWithTokenExpire
(
TOKEN token,
LPSYSTEMTIME lptmExpired,
PACCOUNT_INFO_RIGHT pAcctRits,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumAcctsWithTokenExpireEx
(
TOKEN token,
LPSYSTEMTIME lptmExpired,
PACCTRITENUMPROC lpAcctRitEnumFunc,
LPARAM lParam
);
UINT ActlDLL
AddAcctToToken
(
TOKEN token,
HACCT hAcct,
AR arRights
);
UINT ActlDLL
AddAcctToTokenExpire
(
TOKEN token,
HACCT hAcct,
AR arRights,
LPSYSTEMTIME lptmExpired
);
UINT ActlDLL
RemoveAcctFromToken
(
TOKEN token,
HACCT hAcct
);
UINT ActlDLL
RemoveExpiredAcctsFromToken
(
TOKEN token
);
UINT ActlDLL
GetTokenDetails
(
TOKEN token,
PTOKEN_DETAILS pDetails
);
UINT ActlDLL
TokenIdFromTokenName
(
PSTR szName,
TOKEN *ptoken
);
UINT ActlDLL
UiIsAccountInGroup
(
HACCT hAcct,
HGROUP hGroup,
PBOOL pfRet
);
UINT ActlDLL
EnumExcludedAccts
(
TOKEN token,
PACCOUNT_INFO_RIGHT pAcctRits,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumExcludedAcctsEx
(
TOKEN token,
PACCTRITENUMPROC lpAcctRitEnumFunc,
LPARAM lParam
);
UINT ActlDLL
AddExclusion
(
TOKEN token,
HACCT hAcct
);
UINT ActlDLL
AddExclusionEx
(
TOKEN token,
HACCT hAcct,
AR arRights
);
UINT ActlDLL
RemoveExclusion
(
TOKEN token,
HACCT hAcct
);
UINT ActlDLL
GetMaxTokenId
(
PTOKEN plMaxTokenId
);
BOOL ActlDLL
IsLegalPassword
(
CHAR *szOldPassword,
CHAR *szNewPassword
);
BOOL ActlDLL
IsLegalLoginName
(
CHAR *szLoginName
);
UINT ActlDLL
AddAccessPlan
(
PACCESS_PLAN pPlan
);
UINT ActlDLL
DeleteAccessPlan
(
HGROUP hGroup
);
UINT ActlDLL
UpdateAccessPlan
(
PACCESS_PLAN pPlan
);
UINT ActlDLL
EnumAccessPlans
(
PACCESS_PLAN pPlan,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned
);
UINT ActlDLL
EnumAccessPlansEx
(
PPLANENUMPROC lpPlanEnumFunc,
LPARAM lParam
);
UINT ActlDLL
SearchAccts
(
ACCOUNT_INFO *pAccts,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szLogin,
BOOL fForward
);
UINT ActlDLL
SearchUserGroups
(
PUSER_GROUP_DETAILS pGroupsDetails,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szGroupName,
BOOL fForward
);
UINT ActlDLL
SearchGroupMembers
(
HGROUP hGroup,
ACCOUNT_INFO *pAccts,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szGroupMemberName,
BOOL fForward
);
UINT ActlDLL
SearchTokens
(
TOKEN_DETAILS *pTokenDetails,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szTokenName,
BOOL fForward
);
UINT ActlDLL
SearchGroupsWithToken
(
TOKEN token,
USER_GROUP_RIGHT *pGroups,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szGroupName,
BOOL fForward
);
UINT ActlDLL
SearchAcctsWithToken
(
TOKEN token,
ACCOUNT_INFO_RIGHT *pAcctRits,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szAcctName,
BOOL fForward
);
UINT ActlDLL
SearchExcludedAccts
(
TOKEN token,
ACCOUNT_INFO_RIGHT *pAcctRits,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szAcctName,
BOOL fForward
);
UINT ActlDLL
SearchExcludedAcctsWithToken
(
TOKEN token,
ACCOUNT_INFO_RIGHT *pAcctRits,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szAcctName,
BOOL fForward
);
UINT ActlDLL
SearchAccessPlans
(
PACCESS_PLAN pPlans,
DWORD cBuf,
LPDWORD pcTotal,
LPDWORD pcReturned,
LPCSTR szPlanName,
BOOL fForward
);
UINT ActlDLL
TotalAccts
(
LPDWORD pcTotal
);
UINT ActlDLL
TotalUserGroups
(
LPDWORD pcTotal
);
UINT ActlDLL
TotalGroupMembers
(
HGROUP hGroup,
LPDWORD pcTotal
);
UINT ActlDLL
TotalTokens
(
LPDWORD pcTotal
);
UINT ActlDLL
TotalGroupsWithToken
(
TOKEN token,
LPDWORD pcTotal
);
UINT ActlDLL
TotalAcctsWithToken
(
TOKEN token,
LPDWORD pcTotal
);
UINT ActlDLL
TotalExcludedAccts
(
TOKEN token,
LPDWORD pcTotal
);
UINT ActlDLL
TotalExcludedAcctsWithToken
(
TOKEN token,
LPDWORD pcTotal
);
} //----- end of extern "C" ------
#endif // #if !defined(__ACTLAPI_H__)