Source code of Windows XP (NT5)
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.

926 lines
14 KiB

  1. #include "dspch.h"
  2. #pragma hdrstop
  3. #include <ntdsa.h>
  4. #include <wxlpc.h>
  5. #include <drs.h>
  6. #include <scache.h>
  7. #include <dbglobal.h>
  8. #include <mdglobal.h>
  9. #include <mappings.h>
  10. //
  11. // Notes on stub behavior
  12. //
  13. //
  14. // Whenever possible, STATUS_PROCEDURE_NOT_FOUHD, ERROR_PROC_NOT_FOUND, NULL,
  15. // or FALSE is returned.
  16. //
  17. //
  18. // Some of the functions below require the caller to look at an OUT
  19. // parameter to determine whether the results of the function (in addition
  20. // or independent of the return value). Since these are private functions
  21. // there is no need in shipping code to check for the validity of the OUT
  22. // parameter (typically a pointer). These values should always be present
  23. // in RTM versions.
  24. //
  25. //
  26. // Some functions don't return a status and were designed to never fail
  27. // (for example, functions that effectively do a table lookup). For these
  28. // functions there is no reasonable return value. However, this is not
  29. // a practical issue since these API's would only be called after the DS
  30. // initialized which means that API would have already been "snapped" in via
  31. // GetProcAddress().
  32. //
  33. // Of course, it is possible to rewrite these routines to return errors,
  34. // however, as above, this will have no practical effect.
  35. //
  36. #define NTDSA_STUB_NO_REASONABLE_DEFAULT 0xFFFFFFFF
  37. //
  38. // Most Dir functions return 0 on success and simply a non zero on failure.
  39. // The error space can be from the DB layer or sometimes from the Jet layer.
  40. // To extract the real error, the caller looks at an OUT parameter. In
  41. // these cases we return a standard failure value.
  42. //
  43. #define NTDSA_STUB_GENERAL_FAILURE (!0)
  44. static
  45. unsigned
  46. AppendRDN(
  47. DSNAME *pDNBase,
  48. DSNAME *pDNNew,
  49. ULONG ulBufSize,
  50. WCHAR *pRDNVal,
  51. ULONG RDNlen,
  52. ATTRTYP AttId
  53. )
  54. {
  55. return NTDSA_STUB_GENERAL_FAILURE;
  56. }
  57. static
  58. ULONG
  59. DirAddEntry (
  60. ADDARG * pAddArg,
  61. ADDRES ** ppAddRes
  62. )
  63. {
  64. *ppAddRes = NULL;
  65. return NTDSA_STUB_GENERAL_FAILURE;
  66. }
  67. static
  68. NTSTATUS
  69. DirErrorToNtStatus(
  70. IN DWORD DirError,
  71. IN COMMRES *CommonResult
  72. )
  73. {
  74. return STATUS_PROCEDURE_NOT_FOUND;
  75. }
  76. static
  77. DWORD
  78. DirErrorToWinError(
  79. IN DWORD DirError,
  80. IN COMMRES *CommonResult
  81. )
  82. {
  83. return ERROR_PROC_NOT_FOUND;
  84. }
  85. static
  86. ULONG
  87. DirFindEntry(
  88. FINDARG *pFindArg,
  89. FINDRES ** ppFindRes
  90. )
  91. {
  92. *ppFindRes = NULL;
  93. return NTDSA_STUB_GENERAL_FAILURE;
  94. }
  95. static
  96. DWORD
  97. DirGetDomainHandle(
  98. DSNAME *pDomainDN
  99. )
  100. {
  101. return NTDSA_STUB_GENERAL_FAILURE;
  102. }
  103. static
  104. ULONG
  105. DirModifyDN(
  106. MODIFYDNARG * pModifyDNArg,
  107. MODIFYDNRES ** ppModifyDNRes
  108. )
  109. {
  110. *ppModifyDNRes = NULL;
  111. return NTDSA_STUB_GENERAL_FAILURE;
  112. }
  113. static
  114. ULONG
  115. DirModifyEntry (
  116. MODIFYARG * pModifyArg,
  117. MODIFYRES ** ppModifyRes
  118. )
  119. {
  120. *ppModifyRes = NULL;
  121. return NTDSA_STUB_GENERAL_FAILURE;
  122. }
  123. static
  124. ULONG
  125. DirNotifyRegister(
  126. SEARCHARG *pSearchArg,
  127. NOTIFYARG *pNotifyArg,
  128. NOTIFYRES **ppNotifyRes
  129. )
  130. {
  131. *ppNotifyRes = NULL;
  132. return NTDSA_STUB_GENERAL_FAILURE;
  133. }
  134. static
  135. ULONG
  136. DirNotifyUnRegister(
  137. DWORD hServer,
  138. NOTIFYRES **pNotifyRes
  139. )
  140. {
  141. *pNotifyRes = NULL;
  142. return NTDSA_STUB_GENERAL_FAILURE;
  143. }
  144. static
  145. ULONG
  146. DirOperationControl(
  147. OPARG * pOpArg,
  148. OPRES ** ppOpRes
  149. )
  150. {
  151. *ppOpRes= NULL;
  152. return NTDSA_STUB_GENERAL_FAILURE;
  153. }
  154. static
  155. ULONG
  156. DirProtectEntry(
  157. IN DSNAME *pObj
  158. )
  159. {
  160. return NTDSA_STUB_GENERAL_FAILURE;
  161. }
  162. static
  163. ULONG
  164. DirRead (
  165. READARG FAR * pReadArg,
  166. READRES ** ppReadRes
  167. )
  168. {
  169. *ppReadRes = NULL;
  170. return NTDSA_STUB_GENERAL_FAILURE;
  171. }
  172. static
  173. ULONG
  174. DirRemoveEntry (
  175. REMOVEARG * pRemoveArg,
  176. REMOVERES ** ppRemoveRes
  177. )
  178. {
  179. *ppRemoveRes = NULL;
  180. return NTDSA_STUB_GENERAL_FAILURE;
  181. }
  182. static
  183. ULONG
  184. DirSearch (
  185. SEARCHARG * pSearchArg,
  186. SEARCHRES ** ppSearchRes
  187. )
  188. {
  189. *ppSearchRes = NULL;
  190. return NTDSA_STUB_GENERAL_FAILURE;
  191. }
  192. static
  193. NTSTATUS
  194. DsChangeBootOptions(
  195. WX_AUTH_TYPE BootOption,
  196. ULONG Flags,
  197. PVOID NewKey,
  198. ULONG cbNewKey
  199. )
  200. {
  201. return STATUS_PROCEDURE_NOT_FOUND;
  202. }
  203. static
  204. BOOL
  205. DsCheckConstraint(
  206. IN ATTRTYP attID,
  207. IN ATTRVAL *pAttVal,
  208. IN BOOL fVerifyAsRDN
  209. )
  210. {
  211. return FALSE;
  212. }
  213. static
  214. WX_AUTH_TYPE
  215. DsGetBootOptions(
  216. VOID
  217. )
  218. {
  219. return WxNone;
  220. }
  221. static
  222. NTSTATUS
  223. DsInitialize(
  224. ULONG Flags,
  225. IN PDS_INSTALL_PARAM InParams OPTIONAL,
  226. OUT PDS_INSTALL_RESULT OutParams OPTIONAL
  227. )
  228. {
  229. return STATUS_PROCEDURE_NOT_FOUND;
  230. }
  231. static
  232. NTSTATUS
  233. DsUninitialize(
  234. BOOL fExternalOnly
  235. )
  236. {
  237. return STATUS_PROCEDURE_NOT_FOUND;
  238. }
  239. static
  240. BOOLEAN
  241. DsaWaitUntilServiceIsRunning(
  242. CHAR *ServiceName
  243. )
  244. {
  245. return FALSE;
  246. }
  247. static
  248. ENTINF *
  249. GCVerifyCacheLookup(
  250. DSNAME *pDSName
  251. )
  252. {
  253. return NULL;
  254. }
  255. static
  256. DWORD
  257. GetConfigParam(
  258. char * parameter,
  259. void * value,
  260. DWORD dwSize
  261. )
  262. {
  263. return ERROR_PROC_NOT_FOUND;
  264. }
  265. static
  266. DWORD
  267. GetConfigParamAllocW(
  268. IN PWCHAR parameter,
  269. OUT PVOID *value,
  270. OUT PDWORD pdwSize
  271. )
  272. {
  273. return ERROR_PROC_NOT_FOUND;
  274. }
  275. static
  276. DWORD
  277. GetConfigParamW(
  278. WCHAR * parameter,
  279. void * value,
  280. DWORD dwSize
  281. )
  282. {
  283. return ERROR_PROC_NOT_FOUND;
  284. }
  285. static
  286. NTSTATUS
  287. GetConfigurationName(
  288. DWORD which,
  289. DWORD *pcbName,
  290. DSNAME *pName
  291. )
  292. {
  293. return STATUS_PROCEDURE_NOT_FOUND;
  294. }
  295. static
  296. unsigned
  297. GetRDNInfoExternal(
  298. const DSNAME *pDN,
  299. WCHAR *pRDNVal,
  300. ULONG *pRDNlen,
  301. ATTRTYP *pRDNtype
  302. )
  303. {
  304. return NTDSA_STUB_GENERAL_FAILURE;
  305. }
  306. static
  307. DWORD
  308. ImpersonateAnyClient(
  309. void
  310. )
  311. {
  312. return ERROR_PROC_NOT_FOUND;
  313. }
  314. static
  315. VOID
  316. InitCommarg(
  317. COMMARG *pCommArg
  318. )
  319. {
  320. return;
  321. }
  322. static
  323. int
  324. NameMatched(
  325. const DSNAME *pDN1,
  326. const DSNAME *pDN2
  327. )
  328. {
  329. return !0;
  330. }
  331. static
  332. unsigned
  333. QuoteRDNValue(
  334. const WCHAR * pVal,
  335. unsigned ccVal,
  336. WCHAR * pQuote,
  337. unsigned ccQuoteBufMax
  338. )
  339. {
  340. return NTDSA_STUB_GENERAL_FAILURE;
  341. }
  342. static
  343. BOOLEAN
  344. SampAddLoopbackTask(
  345. IN PVOID NotifyInfo
  346. )
  347. {
  348. return FALSE;
  349. }
  350. static
  351. BOOL
  352. SampAmIGC()
  353. {
  354. return FALSE;
  355. }
  356. static
  357. NTSTATUS
  358. SampComputeGroupType(
  359. ULONG ObjectClass,
  360. ULONG GroupType,
  361. NT4_GROUP_TYPE *pNT4GroupType,
  362. NT5_GROUP_TYPE *pNT5GroupType,
  363. BOOLEAN *pSecurityEnabled
  364. )
  365. {
  366. return STATUS_PROCEDURE_NOT_FOUND;
  367. }
  368. static
  369. ULONG
  370. SampDeriveMostBasicDsClass(
  371. ULONG DerivedClass
  372. )
  373. {
  374. return DerivedClass;
  375. }
  376. static
  377. ULONG
  378. SampDsAttrFromSamAttr(
  379. SAMP_OBJECT_TYPE ObjectType,
  380. ULONG SamAttr
  381. )
  382. {
  383. return NTDSA_STUB_NO_REASONABLE_DEFAULT;
  384. }
  385. static
  386. ULONG
  387. SampDsClassFromSamObjectType(
  388. ULONG SamObjectType
  389. )
  390. {
  391. return NTDSA_STUB_NO_REASONABLE_DEFAULT;
  392. }
  393. static
  394. BOOL
  395. SampExistsDsLoopback(
  396. DSNAME **ppLoopbackName
  397. )
  398. {
  399. return FALSE;
  400. }
  401. static
  402. BOOL
  403. SampExistsDsTransaction()
  404. {
  405. return FALSE;
  406. }
  407. static
  408. NTSTATUS
  409. SampGCLookupNames(
  410. IN ULONG cNames,
  411. IN UNICODE_STRING *rNames,
  412. OUT ENTINF **rEntInf
  413. )
  414. {
  415. return STATUS_PROCEDURE_NOT_FOUND;
  416. }
  417. static
  418. NTSTATUS
  419. SampGCLookupSids(
  420. IN ULONG cSid,
  421. IN PSID *rpSid,
  422. OUT PDS_NAME_RESULTW *Results
  423. )
  424. {
  425. return STATUS_PROCEDURE_NOT_FOUND;
  426. }
  427. static
  428. NTSTATUS
  429. SampGetAccountCounts(
  430. DSNAME * DomainObjectName,
  431. BOOLEAN GetApproximateCount,
  432. int * UserCount,
  433. int * GroupCount,
  434. int * AliasCount
  435. )
  436. {
  437. return STATUS_PROCEDURE_NOT_FOUND;
  438. }
  439. static
  440. NTSTATUS
  441. SampGetClassAttribute(
  442. IN ULONG ClassId,
  443. IN ULONG Attribute,
  444. OUT PULONG attLen,
  445. OUT PVOID pattVal
  446. )
  447. {
  448. return STATUS_PROCEDURE_NOT_FOUND;
  449. }
  450. static
  451. NTSTATUS
  452. SampGetDisplayEnumerationIndex (
  453. IN DSNAME *DomainName,
  454. IN DOMAIN_DISPLAY_INFORMATION DisplayInformation,
  455. IN PRPC_UNICODE_STRING Prefix,
  456. OUT PULONG Index,
  457. OUT PRESTART *RestartToReturn
  458. )
  459. {
  460. return STATUS_PROCEDURE_NOT_FOUND;
  461. }
  462. static
  463. ULONG
  464. SampGetDsAttrIdByName(
  465. UNICODE_STRING AttributeIdentifier
  466. )
  467. {
  468. return NTDSA_STUB_NO_REASONABLE_DEFAULT;
  469. }
  470. static
  471. VOID
  472. SampGetEnterpriseSidList(
  473. IN PULONG pcSids,
  474. IN OPTIONAL PSID * rgSids
  475. )
  476. {
  477. *pcSids = 0;
  478. if (rgSids) {
  479. *rgSids = NULL;
  480. }
  481. return;
  482. }
  483. static
  484. NTSTATUS
  485. SampGetGroupsForToken(
  486. IN DSNAME * pObjName,
  487. IN ULONG Flags,
  488. OUT ULONG *pcSids,
  489. OUT PSID **prpSids
  490. )
  491. {
  492. return STATUS_PROCEDURE_NOT_FOUND;
  493. }
  494. static
  495. VOID
  496. SampGetLoopbackObjectClassId(
  497. PULONG ClassId
  498. )
  499. {
  500. *ClassId = NTDSA_STUB_NO_REASONABLE_DEFAULT;
  501. return;
  502. }
  503. static
  504. NTSTATUS
  505. SampGetMemberships(
  506. IN PDSNAME *rgObjNames,
  507. IN ULONG cObjNames,
  508. IN OPTIONAL DSNAME *pLimitingDomain,
  509. IN REVERSE_MEMBERSHIP_OPERATION_TYPE OperationType,
  510. OUT ULONG *pcDsNames,
  511. OUT PDSNAME **prpDsNames,
  512. OUT PULONG *Attributes OPTIONAL,
  513. OUT PULONG pcSidHistory OPTIONAL,
  514. OUT PSID **rgSidHistory OPTIONAL
  515. )
  516. {
  517. return STATUS_PROCEDURE_NOT_FOUND;
  518. }
  519. static
  520. NTSTATUS
  521. SampGetQDIRestart(
  522. IN PDSNAME DomainName,
  523. IN DOMAIN_DISPLAY_INFORMATION DisplayInformation,
  524. IN ULONG LastObjectDNT,
  525. OUT PRESTART *ppRestart
  526. )
  527. {
  528. return STATUS_PROCEDURE_NOT_FOUND;
  529. }
  530. static
  531. NTSTATUS
  532. SampGetServerRoleFromFSMO(
  533. DOMAIN_SERVER_ROLE *ServerRole
  534. )
  535. {
  536. return STATUS_PROCEDURE_NOT_FOUND;
  537. }
  538. static
  539. BOOLEAN
  540. SampIsSecureLdapConnection(
  541. VOID
  542. )
  543. {
  544. return FALSE;
  545. }
  546. static
  547. BOOL
  548. SampIsWriteLockHeldByDs()
  549. {
  550. return FALSE;
  551. }
  552. static
  553. NTSTATUS
  554. SampMaybeBeginDsTransaction(
  555. SAMP_DS_TRANSACTION_CONTROL ReadOrWrite
  556. )
  557. {
  558. return STATUS_PROCEDURE_NOT_FOUND;
  559. }
  560. static
  561. NTSTATUS
  562. SampMaybeEndDsTransaction(
  563. SAMP_DS_TRANSACTION_CONTROL CommitOrAbort
  564. )
  565. {
  566. return STATUS_PROCEDURE_NOT_FOUND;
  567. }
  568. static
  569. NTSTATUS
  570. SampNetlogonPing(
  571. IN ULONG DomainHandle,
  572. IN PUNICODE_STRING AccountName,
  573. OUT PBOOLEAN AccountExists,
  574. OUT PULONG UserAccountControl
  575. )
  576. {
  577. return STATUS_PROCEDURE_NOT_FOUND;
  578. }
  579. static
  580. ULONG
  581. SampSamAttrFromDsAttr(
  582. SAMP_OBJECT_TYPE ObjectType,
  583. ULONG DsAttr
  584. )
  585. {
  586. return NTDSA_STUB_NO_REASONABLE_DEFAULT;
  587. }
  588. static
  589. ULONG
  590. SampSamObjectTypeFromDsClass(
  591. ULONG DsClass
  592. )
  593. {
  594. return NTDSA_STUB_NO_REASONABLE_DEFAULT;
  595. }
  596. static
  597. VOID
  598. SampSetDsa(
  599. BOOLEAN DsaFlag
  600. )
  601. {
  602. return;
  603. }
  604. static
  605. NTSTATUS
  606. SampSetIndexRanges(
  607. ULONG IndexTypeToUse,
  608. ULONG LowLimitLength1,
  609. PVOID LowLimit1,
  610. ULONG LowLimitLength2,
  611. PVOID LowLimit2,
  612. ULONG HighLimitLength1,
  613. PVOID HighLimit1,
  614. ULONG HighLimitLength2,
  615. PVOID HighLimit2,
  616. BOOL RootOfSearchIsNcHead
  617. )
  618. {
  619. return STATUS_PROCEDURE_NOT_FOUND;
  620. }
  621. static
  622. VOID
  623. SampSetSam(
  624. IN BOOLEAN fSAM
  625. )
  626. {
  627. return;
  628. }
  629. static
  630. VOID
  631. SampSignalStart(
  632. VOID
  633. )
  634. {
  635. return;
  636. }
  637. static
  638. ULONG
  639. SampVerifySids(
  640. ULONG cSid,
  641. PSID *rpSid,
  642. DSNAME ***prpDSName
  643. )
  644. {
  645. return NTDSA_STUB_GENERAL_FAILURE;
  646. }
  647. static
  648. void *
  649. THAlloc(
  650. DWORD size
  651. )
  652. {
  653. return NULL;
  654. }
  655. static
  656. VOID
  657. THClearErrors()
  658. {
  659. return;
  660. }
  661. static
  662. ULONG
  663. THCreate(
  664. DWORD x
  665. )
  666. {
  667. return NTDSA_STUB_GENERAL_FAILURE;
  668. }
  669. static
  670. ULONG
  671. THDestroy(
  672. void
  673. )
  674. {
  675. return NTDSA_STUB_GENERAL_FAILURE;
  676. }
  677. static
  678. void
  679. THFree(
  680. void *buff
  681. )
  682. {
  683. return;
  684. }
  685. static
  686. BOOL
  687. THQuery(
  688. void
  689. )
  690. {
  691. return FALSE;
  692. }
  693. static
  694. VOID
  695. THRestore(
  696. PVOID x
  697. )
  698. {
  699. return;
  700. }
  701. static
  702. PVOID
  703. THSave()
  704. {
  705. return NULL;
  706. }
  707. static
  708. BOOL
  709. TrimDSNameBy(
  710. DSNAME *pDNSrc,
  711. ULONG cava,
  712. DSNAME *pDNDst
  713. )
  714. {
  715. return FALSE;
  716. }
  717. static
  718. VOID
  719. UnImpersonateAnyClient(
  720. void
  721. )
  722. {
  723. return;
  724. }
  725. static
  726. VOID
  727. UpdateDSPerfStats(
  728. IN DWORD dwStat,
  729. IN DWORD dwOperation,
  730. IN DWORD dwChange
  731. )
  732. {
  733. return;
  734. }
  735. static
  736. BOOL
  737. fNullUuid(
  738. const UUID *pUuid
  739. )
  740. {
  741. return FALSE;
  742. }
  743. //
  744. // !! WARNING !! The entries below must be in alphabetical order, and are CASE SENSITIVE (eg lower case comes last!)
  745. //
  746. DEFINE_PROCNAME_ENTRIES(ntdsa)
  747. {
  748. DLPENTRY(AppendRDN)
  749. DLPENTRY(DirAddEntry)
  750. DLPENTRY(DirErrorToNtStatus)
  751. DLPENTRY(DirErrorToWinError)
  752. DLPENTRY(DirFindEntry)
  753. DLPENTRY(DirGetDomainHandle)
  754. DLPENTRY(DirModifyDN)
  755. DLPENTRY(DirModifyEntry)
  756. DLPENTRY(DirNotifyRegister)
  757. DLPENTRY(DirNotifyUnRegister)
  758. DLPENTRY(DirOperationControl)
  759. DLPENTRY(DirProtectEntry)
  760. DLPENTRY(DirRead)
  761. DLPENTRY(DirRemoveEntry)
  762. DLPENTRY(DirSearch)
  763. DLPENTRY(DsChangeBootOptions)
  764. DLPENTRY(DsCheckConstraint)
  765. DLPENTRY(DsGetBootOptions)
  766. DLPENTRY(DsInitialize)
  767. DLPENTRY(DsUninitialize)
  768. DLPENTRY(DsaWaitUntilServiceIsRunning)
  769. DLPENTRY(GCVerifyCacheLookup)
  770. DLPENTRY(GetConfigParam)
  771. DLPENTRY(GetConfigParamAllocW)
  772. DLPENTRY(GetConfigParamW)
  773. DLPENTRY(GetConfigurationName)
  774. DLPENTRY(GetRDNInfoExternal)
  775. DLPENTRY(ImpersonateAnyClient)
  776. DLPENTRY(InitCommarg)
  777. DLPENTRY(NameMatched)
  778. DLPENTRY(QuoteRDNValue)
  779. DLPENTRY(SampAddLoopbackTask)
  780. DLPENTRY(SampAmIGC)
  781. DLPENTRY(SampComputeGroupType)
  782. DLPENTRY(SampDeriveMostBasicDsClass)
  783. DLPENTRY(SampDsAttrFromSamAttr)
  784. DLPENTRY(SampDsClassFromSamObjectType)
  785. DLPENTRY(SampExistsDsLoopback)
  786. DLPENTRY(SampExistsDsTransaction)
  787. DLPENTRY(SampGCLookupNames)
  788. DLPENTRY(SampGCLookupSids)
  789. DLPENTRY(SampGetAccountCounts)
  790. DLPENTRY(SampGetClassAttribute)
  791. DLPENTRY(SampGetDisplayEnumerationIndex)
  792. DLPENTRY(SampGetDsAttrIdByName)
  793. DLPENTRY(SampGetEnterpriseSidList)
  794. DLPENTRY(SampGetGroupsForToken)
  795. DLPENTRY(SampGetLoopbackObjectClassId)
  796. DLPENTRY(SampGetMemberships)
  797. DLPENTRY(SampGetQDIRestart)
  798. DLPENTRY(SampGetServerRoleFromFSMO)
  799. DLPENTRY(SampIsSecureLdapConnection)
  800. DLPENTRY(SampIsWriteLockHeldByDs)
  801. DLPENTRY(SampMaybeBeginDsTransaction)
  802. DLPENTRY(SampMaybeEndDsTransaction)
  803. DLPENTRY(SampNetlogonPing)
  804. DLPENTRY(SampSamAttrFromDsAttr)
  805. DLPENTRY(SampSamObjectTypeFromDsClass)
  806. DLPENTRY(SampSetDsa)
  807. DLPENTRY(SampSetIndexRanges)
  808. DLPENTRY(SampSetSam)
  809. DLPENTRY(SampSignalStart)
  810. DLPENTRY(SampVerifySids)
  811. DLPENTRY(THAlloc)
  812. DLPENTRY(THClearErrors)
  813. DLPENTRY(THCreate)
  814. DLPENTRY(THDestroy)
  815. DLPENTRY(THFree)
  816. DLPENTRY(THQuery)
  817. DLPENTRY(THRestore)
  818. DLPENTRY(THSave)
  819. DLPENTRY(TrimDSNameBy)
  820. DLPENTRY(UnImpersonateAnyClient)
  821. DLPENTRY(UpdateDSPerfStats)
  822. DLPENTRY(fNullUuid)
  823. };
  824. DEFINE_PROCNAME_MAP(ntdsa)