|
|
/*++
Copyright (c) 1991-92 Microsoft Corporation
Module Name:
uasp.h
Abstract:
Private declartions for function defined in uasp.c, aliasp.c, groupp.c, and userp.c
Author:
Cliff Van Dyke (cliffv) 20-Feb-1991
Environment:
User mode only. Contains NT-specific code. Requires ANSI C extensions: slash-slash comments, long external names.
Revision History:
17-Apr-1991 (cliffv) Incorporated review comments. 09-Apr-1992 JohnRo Prepare for WCHAR.H (_wcsicmp vs _wcscmpi, etc). 28-Oct-1992 RitaW Added private support routines for localgroups (aliases) 30-Nov-1992 Johnl Added AliaspOpenAlias2 (same as AliaspOpenAlias except operates on RID instead of account name).
--*/
//
// Procedure Forwards for uasp.c
//
NET_API_STATUS UaspOpenSam( IN LPCWSTR ServerName OPTIONAL, IN BOOL AllowNullSession, OUT PSAM_HANDLE SamServerHandle );
NET_API_STATUS UaspOpenDomain( IN SAM_HANDLE SamServerHandle, IN ULONG DesiredAccess, IN BOOL AccountDomain, OUT PSAM_HANDLE DomainHandle, OUT PSID *DomainId OPTIONAL );
NET_API_STATUS UaspOpenDomainWithDomainName( IN LPCWSTR DomainName, IN ULONG DesiredAccess, IN BOOL AccountDomain, OUT PSAM_HANDLE DomainHandle, OUT PSID *DomainId OPTIONAL );
VOID UaspCloseDomain( IN SAM_HANDLE DomainHandle );
NET_API_STATUS UaspGetDomainId( IN SAM_HANDLE SamServerHandle, OUT PSID *DomainId );
NET_API_STATUS UaspLSASetServerRole( IN LPCWSTR ServerName, IN PDOMAIN_SERVER_ROLE_INFORMATION DomainServerRole );
NET_API_STATUS UaspBuiltinDomainSetServerRole( IN SAM_HANDLE SamServerHandle, IN PDOMAIN_SERVER_ROLE_INFORMATION DomainServerRole );
//
// Procedure forwards for aliasp.c
//
typedef enum _ALIASP_DOMAIN_TYPE {
AliaspBuiltinOrAccountDomain, AliaspAccountDomain, AliaspBuiltinDomain
} ALIASP_DOMAIN_TYPE;
NET_API_STATUS AliaspOpenAliasInDomain( IN SAM_HANDLE SamServerHandle, IN ALIASP_DOMAIN_TYPE DomainType, IN ACCESS_MASK DesiredAccess, IN LPCWSTR AliasName, OUT PSAM_HANDLE AliasHandle );
NET_API_STATUS AliaspOpenAlias( IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN LPCWSTR AliasName, OUT PSAM_HANDLE AliasHandle );
NET_API_STATUS AliaspOpenAlias2( IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN ULONG RelativeID, OUT PSAM_HANDLE AliasHandle );
NET_API_STATUS AliaspChangeMember( IN LPCWSTR ServerName OPTIONAL, IN LPCWSTR AliasName, IN PSID MemberSid, IN BOOL AddMember );
typedef enum { SetMembers, AddMembers, DelMembers } ALIAS_MEMBER_CHANGE_TYPE;
NET_API_STATUS AliaspSetMembers ( IN LPCWSTR ServerName OPTIONAL, IN LPCWSTR AliasName, IN DWORD Level, IN LPBYTE Buffer, IN DWORD NewMemberCount, IN ALIAS_MEMBER_CHANGE_TYPE );
NET_API_STATUS AliaspGetInfo( IN SAM_HANDLE AliasHandle, IN DWORD Level, OUT PVOID *Buffer );
VOID AliaspRelocationRoutine( IN DWORD Level, IN OUT PBUFFER_DESCRIPTOR BufferDescriptor, IN PTRDIFF_T Offset );
VOID AliaspMemberRelocationRoutine( IN DWORD Level, IN OUT PBUFFER_DESCRIPTOR BufferDescriptor, IN PTRDIFF_T Offset );
NET_API_STATUS AliaspPackBuf( IN DWORD Level, IN DWORD PrefMaxLen, IN DWORD EntriesCount, OUT LPDWORD EntriesRead, BUFFER_DESCRIPTOR *BufferDescriptor, DWORD FixedSize, PUNICODE_STRING Names) ;
NET_API_STATUS AliaspNamesToSids ( IN LPCWSTR ServerName, IN BOOL OnlyAllowUsers, IN DWORD NameCount, IN LPWSTR *Names, OUT PSID **Sids );
VOID AliaspFreeSidList ( IN DWORD SidCount, IN PSID *Sids );
//
// Procedure forwards for groupp.c
//
NET_API_STATUS GrouppOpenGroup( IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN LPCWSTR GroupName, OUT PSAM_HANDLE GroupHandle OPTIONAL, OUT PULONG RelativeId OPTIONAL );
NET_API_STATUS GrouppChangeMember( IN LPCWSTR ServerName OPTIONAL, IN LPCWSTR GroupName, IN LPCWSTR UserName, IN BOOL AddMember );
NET_API_STATUS GrouppGetInfo( IN SAM_HANDLE DomainHandle, IN ULONG RelativeId, IN DWORD Level, OUT PVOID *Buffer // Caller must deallocate buffer using NetApiBufferFree.
);
VOID GrouppRelocationRoutine( IN DWORD Level, IN OUT PBUFFER_DESCRIPTOR BufferDescriptor, IN PTRDIFF_T Offset );
VOID GrouppMemberRelocationRoutine( IN DWORD Level, IN OUT PBUFFER_DESCRIPTOR BufferDescriptor, IN PTRDIFF_T Offset );
NET_API_STATUS GrouppSetUsers ( IN LPCWSTR ServerName OPTIONAL, IN LPCWSTR GroupName, IN DWORD Level, IN LPBYTE Buffer, IN DWORD NewMemberCount, IN BOOL DeleteGroup );
//
// Procedure forwards for userp.c
//
NET_API_STATUS UserpOpenUser( IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN LPCWSTR UserName, OUT PSAM_HANDLE UserHandle OPTIONAL, OUT PULONG RelativeId OPTIONAL );
NET_API_STATUS UserpGetInfo( IN SAM_HANDLE DomainHandle, IN PSID DomainId, IN SAM_HANDLE BuiltinDomainHandle OPTIONAL, IN UNICODE_STRING UserName, IN ULONG UserRelativeId, IN DWORD Level, IN DWORD PrefMaxLen, IN OUT PBUFFER_DESCRIPTOR BufferDescriptor, // Caller must deallocate BD->Buffer using MIDL_user_free.
IN BOOL IsGet, IN DWORD SamFilter );
NET_API_STATUS UserpSetInfo( IN SAM_HANDLE DomainHandle, IN PSID DomainId, IN SAM_HANDLE UserHandle OPTIONAL, IN SAM_HANDLE BuiltinDomainHandle OPTIONAL, IN ULONG UserRelativeId, IN LPCWSTR UserName, IN DWORD Level, IN LPBYTE Buffer, IN ULONG WhichFieldsMask, OUT LPDWORD ParmError OPTIONAL // Name required by NetpSetParmError
);
ULONG NetpDeltaTimeToSeconds( IN LARGE_INTEGER DeltaTime );
LARGE_INTEGER NetpSecondsToDeltaTime( IN ULONG Seconds );
DWORD NetpGetElapsedSeconds( IN PLARGE_INTEGER Time );
//
// Determine if the passed in DWORD has precisely one bit set.
//
#define JUST_ONE_BIT( _x ) (((_x) != 0 ) && ( ( (~(_x) + 1) & (_x) ) == (_x) ))
//
// Local macro to add a byte offset to a pointer.
//
#define RELOCATE_ONE( _fieldname, _offset ) \
_fieldname = (PVOID) ((LPBYTE)(_fieldname) + _offset)
////////////////////////////////////////////////////////////////////////
//
// UaspNameCompare
//
// I_NetNameCompare but always takes UNICODE strings
//
////////////////////////////////////////////////////////////////////////
#ifdef UNICODE
#define UaspNameCompare( _name1, _name2, _nametype ) \
I_NetNameCompare(NULL, (_name1), (_name2), (_nametype), 0 )
#else // UNICODE
#define UaspNameCompare( _name1, _name2, _nametype ) \
_wcsicmp( (_name1), (_name2) )
#endif // UNICODE
////////////////////////////////////////////////////////////////////////
//
// UASP_DOWNLEVEL
//
// Decide if call is to be made to a downlevel server.
// This macro contains a 'return', so do not allocate any resources
// before calling this macro.
//
////////////////////////////////////////////////////////////////////////
NET_API_STATUS UaspDownlevel( IN LPCWSTR ServerName OPTIONAL, IN NET_API_STATUS OriginalError, OUT LPBOOL TryDownLevel );
#define UASP_DOWNLEVEL_BEGIN( _ServerName, _NetStatus ) \
if ( _NetStatus != NERR_Success && \ _NetStatus != ERROR_MORE_DATA ) { \ BOOL TryDownLevel; \ \ _NetStatus = UaspDownlevel( \ _ServerName, \ _NetStatus, \ &TryDownLevel \ ); \ \ if (TryDownLevel) {
#define UASP_DOWNLEVEL_END \
} \ }
//
// Debug Macros
//
#define UAS_DEBUG_USER 0x00000001 // NetUser APIs
#define UAS_DEBUG_GROUP 0x00000002 // NetGroup APIs
#define UAS_DEBUG_ACCESS 0x00000004 // NetAccess APIs
#define UAS_DEBUG_ALIAS 0x00000008 // NetLocalGroup APIs
#define UAS_DEBUG_UASP 0x00000010 // uasp.c
#define UAS_DEBUG_AUASP 0x00000020 // uasp.c LocalGroup related functions
#if DBG
#define UAS_DEBUG
#endif // DBG
#ifdef UAS_DEBUG
extern DWORD UasTrace;
#define IF_DEBUG(Function) if (UasTrace & Function)
#else
/*lint -e614 */ /* Auto aggregate initializers need not be constant */ #define IF_DEBUG(Function) if (FALSE)
#endif // UAS_DEBUG
|