|
|
#include "dspch.h"
#pragma hdrstop
#include <ntdsa.h>
#include <wxlpc.h>
#include <drs.h>
#include <scache.h>
#include <dbglobal.h>
#include <mdglobal.h>
#include <mappings.h>
//
// Notes on stub behavior
//
//
// Whenever possible, STATUS_PROCEDURE_NOT_FOUHD, ERROR_PROC_NOT_FOUND, NULL,
// or FALSE is returned.
//
//
// Some of the functions below require the caller to look at an OUT
// parameter to determine whether the results of the function (in addition
// or independent of the return value). Since these are private functions
// there is no need in shipping code to check for the validity of the OUT
// parameter (typically a pointer). These values should always be present
// in RTM versions.
//
//
// Some functions don't return a status and were designed to never fail
// (for example, functions that effectively do a table lookup). For these
// functions there is no reasonable return value. However, this is not
// a practical issue since these API's would only be called after the DS
// initialized which means that API would have already been "snapped" in via
// GetProcAddress().
//
// Of course, it is possible to rewrite these routines to return errors,
// however, as above, this will have no practical effect.
//
#define NTDSA_STUB_NO_REASONABLE_DEFAULT 0xFFFFFFFF
//
// Most Dir functions return 0 on success and simply a non zero on failure.
// The error space can be from the DB layer or sometimes from the Jet layer.
// To extract the real error, the caller looks at an OUT parameter. In
// these cases we return a standard failure value.
//
#define NTDSA_STUB_GENERAL_FAILURE (!0)
static unsigned AppendRDN( DSNAME *pDNBase, DSNAME *pDNNew, ULONG ulBufSize, WCHAR *pRDNVal, ULONG RDNlen, ATTRTYP AttId ) { return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirAddEntry ( ADDARG * pAddArg, ADDRES ** ppAddRes ) { *ppAddRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static NTSTATUS DirErrorToNtStatus( IN DWORD DirError, IN COMMRES *CommonResult ) { return STATUS_PROCEDURE_NOT_FOUND; }
static DWORD DirErrorToWinError( IN DWORD DirError, IN COMMRES *CommonResult ) { return ERROR_PROC_NOT_FOUND; }
static ULONG DirFindEntry( FINDARG *pFindArg, FINDRES ** ppFindRes ) { *ppFindRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static DWORD DirGetDomainHandle( DSNAME *pDomainDN ) { return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirModifyDN( MODIFYDNARG * pModifyDNArg, MODIFYDNRES ** ppModifyDNRes ) { *ppModifyDNRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirModifyEntry ( MODIFYARG * pModifyArg, MODIFYRES ** ppModifyRes ) { *ppModifyRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirNotifyRegister( SEARCHARG *pSearchArg, NOTIFYARG *pNotifyArg, NOTIFYRES **ppNotifyRes ) { *ppNotifyRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirNotifyUnRegister( DWORD hServer, NOTIFYRES **pNotifyRes ) { *pNotifyRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirOperationControl( OPARG * pOpArg, OPRES ** ppOpRes ) { *ppOpRes= NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirProtectEntry( IN DSNAME *pObj ) { return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirRead ( READARG FAR * pReadArg, READRES ** ppReadRes ) { *ppReadRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirRemoveEntry ( REMOVEARG * pRemoveArg, REMOVERES ** ppRemoveRes ) { *ppRemoveRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG DirSearch ( SEARCHARG * pSearchArg, SEARCHRES ** ppSearchRes ) { *ppSearchRes = NULL; return NTDSA_STUB_GENERAL_FAILURE; }
static NTSTATUS DsChangeBootOptions( WX_AUTH_TYPE BootOption, ULONG Flags, PVOID NewKey, ULONG cbNewKey ) { return STATUS_PROCEDURE_NOT_FOUND; }
static BOOL DsCheckConstraint( IN ATTRTYP attID, IN ATTRVAL *pAttVal, IN BOOL fVerifyAsRDN ) { return FALSE; }
static WX_AUTH_TYPE DsGetBootOptions( VOID ) { return WxNone; }
static NTSTATUS DsInitialize( ULONG Flags, IN PDS_INSTALL_PARAM InParams OPTIONAL, OUT PDS_INSTALL_RESULT OutParams OPTIONAL ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS DsUninitialize( BOOL fExternalOnly ) { return STATUS_PROCEDURE_NOT_FOUND; }
static BOOLEAN DsaWaitUntilServiceIsRunning( CHAR *ServiceName ) { return FALSE; }
static ENTINF * GCVerifyCacheLookup( DSNAME *pDSName ) { return NULL; }
static DWORD GetConfigParam( char * parameter, void * value, DWORD dwSize ) { return ERROR_PROC_NOT_FOUND; }
static DWORD GetConfigParamAllocW( IN PWCHAR parameter, OUT PVOID *value, OUT PDWORD pdwSize ) { return ERROR_PROC_NOT_FOUND; }
static DWORD GetConfigParamW( WCHAR * parameter, void * value, DWORD dwSize ) { return ERROR_PROC_NOT_FOUND; }
static NTSTATUS GetConfigurationName( DWORD which, DWORD *pcbName, DSNAME *pName ) { return STATUS_PROCEDURE_NOT_FOUND; }
static unsigned GetRDNInfoExternal( const DSNAME *pDN, WCHAR *pRDNVal, ULONG *pRDNlen, ATTRTYP *pRDNtype ) { return NTDSA_STUB_GENERAL_FAILURE; }
static DWORD ImpersonateAnyClient( void ) { return ERROR_PROC_NOT_FOUND; }
static VOID InitCommarg( COMMARG *pCommArg ) { return; }
static int NameMatched( const DSNAME *pDN1, const DSNAME *pDN2 ) { return !0; }
static unsigned QuoteRDNValue( const WCHAR * pVal, unsigned ccVal, WCHAR * pQuote, unsigned ccQuoteBufMax ) { return NTDSA_STUB_GENERAL_FAILURE; }
static BOOLEAN SampAddLoopbackTask( IN PVOID NotifyInfo ) { return FALSE; }
static BOOL SampAmIGC() { return FALSE; }
static NTSTATUS SampComputeGroupType( ULONG ObjectClass, ULONG GroupType, NT4_GROUP_TYPE *pNT4GroupType, NT5_GROUP_TYPE *pNT5GroupType, BOOLEAN *pSecurityEnabled ) { return STATUS_PROCEDURE_NOT_FOUND; }
static ULONG SampDeriveMostBasicDsClass( ULONG DerivedClass ) { return DerivedClass; }
static ULONG SampDsAttrFromSamAttr( SAMP_OBJECT_TYPE ObjectType, ULONG SamAttr ) { return NTDSA_STUB_NO_REASONABLE_DEFAULT; }
static ULONG SampDsClassFromSamObjectType( ULONG SamObjectType ) { return NTDSA_STUB_NO_REASONABLE_DEFAULT; }
static BOOL SampExistsDsLoopback( DSNAME **ppLoopbackName ) { return FALSE; }
static BOOL SampExistsDsTransaction() { return FALSE; }
static NTSTATUS SampGCLookupNames( IN ULONG cNames, IN UNICODE_STRING *rNames, OUT ENTINF **rEntInf ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampGCLookupSids( IN ULONG cSid, IN PSID *rpSid, OUT PDS_NAME_RESULTW *Results ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampGetAccountCounts( DSNAME * DomainObjectName, BOOLEAN GetApproximateCount, int * UserCount, int * GroupCount, int * AliasCount ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampGetClassAttribute( IN ULONG ClassId, IN ULONG Attribute, OUT PULONG attLen, OUT PVOID pattVal ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampGetDisplayEnumerationIndex ( IN DSNAME *DomainName, IN DOMAIN_DISPLAY_INFORMATION DisplayInformation, IN PRPC_UNICODE_STRING Prefix, OUT PULONG Index, OUT PRESTART *RestartToReturn ) { return STATUS_PROCEDURE_NOT_FOUND; }
static ULONG SampGetDsAttrIdByName( UNICODE_STRING AttributeIdentifier ) { return NTDSA_STUB_NO_REASONABLE_DEFAULT; }
static VOID SampGetEnterpriseSidList( IN PULONG pcSids, IN OPTIONAL PSID * rgSids ) { *pcSids = 0; if (rgSids) { *rgSids = NULL; } return; }
static NTSTATUS SampGetGroupsForToken( IN DSNAME * pObjName, IN ULONG Flags, OUT ULONG *pcSids, OUT PSID **prpSids ) { return STATUS_PROCEDURE_NOT_FOUND; }
static VOID SampGetLoopbackObjectClassId( PULONG ClassId ) { *ClassId = NTDSA_STUB_NO_REASONABLE_DEFAULT; return; }
static NTSTATUS SampGetMemberships( IN PDSNAME *rgObjNames, IN ULONG cObjNames, IN OPTIONAL DSNAME *pLimitingDomain, IN REVERSE_MEMBERSHIP_OPERATION_TYPE OperationType, OUT ULONG *pcDsNames, OUT PDSNAME **prpDsNames, OUT PULONG *Attributes OPTIONAL, OUT PULONG pcSidHistory OPTIONAL, OUT PSID **rgSidHistory OPTIONAL ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampGetQDIRestart( IN PDSNAME DomainName, IN DOMAIN_DISPLAY_INFORMATION DisplayInformation, IN ULONG LastObjectDNT, OUT PRESTART *ppRestart ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampGetServerRoleFromFSMO( DOMAIN_SERVER_ROLE *ServerRole ) { return STATUS_PROCEDURE_NOT_FOUND; }
static BOOLEAN SampIsSecureLdapConnection( VOID ) { return FALSE; }
static BOOL SampIsWriteLockHeldByDs() { return FALSE; }
static NTSTATUS SampMaybeBeginDsTransaction( SAMP_DS_TRANSACTION_CONTROL ReadOrWrite ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampMaybeEndDsTransaction( SAMP_DS_TRANSACTION_CONTROL CommitOrAbort ) { return STATUS_PROCEDURE_NOT_FOUND; }
static NTSTATUS SampNetlogonPing( IN ULONG DomainHandle, IN PUNICODE_STRING AccountName, OUT PBOOLEAN AccountExists, OUT PULONG UserAccountControl ) { return STATUS_PROCEDURE_NOT_FOUND; }
static ULONG SampSamAttrFromDsAttr( SAMP_OBJECT_TYPE ObjectType, ULONG DsAttr ) { return NTDSA_STUB_NO_REASONABLE_DEFAULT; }
static ULONG SampSamObjectTypeFromDsClass( ULONG DsClass ) { return NTDSA_STUB_NO_REASONABLE_DEFAULT; }
static VOID SampSetDsa( BOOLEAN DsaFlag ) { return; }
static NTSTATUS SampSetIndexRanges( ULONG IndexTypeToUse, ULONG LowLimitLength1, PVOID LowLimit1, ULONG LowLimitLength2, PVOID LowLimit2, ULONG HighLimitLength1, PVOID HighLimit1, ULONG HighLimitLength2, PVOID HighLimit2, BOOL RootOfSearchIsNcHead ) { return STATUS_PROCEDURE_NOT_FOUND; }
static VOID SampSetSam( IN BOOLEAN fSAM ) { return; }
static VOID SampSignalStart( VOID ) { return; }
static ULONG SampVerifySids( ULONG cSid, PSID *rpSid, DSNAME ***prpDSName ) { return NTDSA_STUB_GENERAL_FAILURE; }
static void * THAlloc( DWORD size ) { return NULL; }
static VOID THClearErrors() { return; }
static ULONG THCreate( DWORD x ) { return NTDSA_STUB_GENERAL_FAILURE; }
static ULONG THDestroy( void ) { return NTDSA_STUB_GENERAL_FAILURE; }
static void THFree( void *buff ) { return; }
static BOOL THQuery( void ) { return FALSE; }
static VOID THRestore( PVOID x ) { return; }
static PVOID THSave() { return NULL; }
static BOOL TrimDSNameBy( DSNAME *pDNSrc, ULONG cava, DSNAME *pDNDst ) { return FALSE; }
static VOID UnImpersonateAnyClient( void ) { return; }
static VOID UpdateDSPerfStats( IN DWORD dwStat, IN DWORD dwOperation, IN DWORD dwChange ) { return; }
static BOOL fNullUuid( const UUID *pUuid ) { return FALSE; } //
// !! WARNING !! The entries below must be in alphabetical order, and are CASE SENSITIVE (eg lower case comes last!)
//
DEFINE_PROCNAME_ENTRIES(ntdsa) { DLPENTRY(AppendRDN) DLPENTRY(DirAddEntry) DLPENTRY(DirErrorToNtStatus) DLPENTRY(DirErrorToWinError) DLPENTRY(DirFindEntry) DLPENTRY(DirGetDomainHandle) DLPENTRY(DirModifyDN) DLPENTRY(DirModifyEntry) DLPENTRY(DirNotifyRegister) DLPENTRY(DirNotifyUnRegister) DLPENTRY(DirOperationControl) DLPENTRY(DirProtectEntry) DLPENTRY(DirRead) DLPENTRY(DirRemoveEntry) DLPENTRY(DirSearch) DLPENTRY(DsChangeBootOptions) DLPENTRY(DsCheckConstraint) DLPENTRY(DsGetBootOptions) DLPENTRY(DsInitialize) DLPENTRY(DsUninitialize) DLPENTRY(DsaWaitUntilServiceIsRunning) DLPENTRY(GCVerifyCacheLookup) DLPENTRY(GetConfigParam) DLPENTRY(GetConfigParamAllocW) DLPENTRY(GetConfigParamW) DLPENTRY(GetConfigurationName) DLPENTRY(GetRDNInfoExternal) DLPENTRY(ImpersonateAnyClient) DLPENTRY(InitCommarg) DLPENTRY(NameMatched) DLPENTRY(QuoteRDNValue) DLPENTRY(SampAddLoopbackTask) DLPENTRY(SampAmIGC) DLPENTRY(SampComputeGroupType) DLPENTRY(SampDeriveMostBasicDsClass) DLPENTRY(SampDsAttrFromSamAttr) DLPENTRY(SampDsClassFromSamObjectType) DLPENTRY(SampExistsDsLoopback) DLPENTRY(SampExistsDsTransaction) DLPENTRY(SampGCLookupNames) DLPENTRY(SampGCLookupSids) DLPENTRY(SampGetAccountCounts) DLPENTRY(SampGetClassAttribute) DLPENTRY(SampGetDisplayEnumerationIndex) DLPENTRY(SampGetDsAttrIdByName) DLPENTRY(SampGetEnterpriseSidList) DLPENTRY(SampGetGroupsForToken) DLPENTRY(SampGetLoopbackObjectClassId) DLPENTRY(SampGetMemberships) DLPENTRY(SampGetQDIRestart) DLPENTRY(SampGetServerRoleFromFSMO) DLPENTRY(SampIsSecureLdapConnection) DLPENTRY(SampIsWriteLockHeldByDs) DLPENTRY(SampMaybeBeginDsTransaction) DLPENTRY(SampMaybeEndDsTransaction) DLPENTRY(SampNetlogonPing) DLPENTRY(SampSamAttrFromDsAttr) DLPENTRY(SampSamObjectTypeFromDsClass) DLPENTRY(SampSetDsa) DLPENTRY(SampSetIndexRanges) DLPENTRY(SampSetSam) DLPENTRY(SampSignalStart) DLPENTRY(SampVerifySids) DLPENTRY(THAlloc) DLPENTRY(THClearErrors) DLPENTRY(THCreate) DLPENTRY(THDestroy) DLPENTRY(THFree) DLPENTRY(THQuery) DLPENTRY(THRestore) DLPENTRY(THSave) DLPENTRY(TrimDSNameBy) DLPENTRY(UnImpersonateAnyClient) DLPENTRY(UpdateDSPerfStats) DLPENTRY(fNullUuid) };
DEFINE_PROCNAME_MAP(ntdsa)
|