408 lines
8.5 KiB
C
408 lines
8.5 KiB
C
|
/*++
|
||
|
|
||
|
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
|