Windows NT 4.0 source code leak
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.

134 lines
3.1 KiB

4 years ago
  1. #ifndef _LOCCLASS_
  2. #define _LOCCLASS_
  3. /*
  4. Class __LOCATOR
  5. */
  6. #include "locquery.h"
  7. struct CACHEDNODE
  8. {
  9. struct CACHEDNODE * Next;
  10. struct CACHEDNODE * Previous;
  11. UICHAR ServerName[UNCLEN+1];
  12. };
  13. typedef CACHEDNODE * PCACHEDNODE;
  14. #define CACHESIZE 4
  15. class NATIVE_CLASS_LOCATOR
  16. {
  17. private:
  18. protected:
  19. MUTEX DataStructureMutex;
  20. unsigned short * MasterLocator;
  21. unsigned short * MasterLocatorStringBinding;
  22. unsigned long State;
  23. unsigned long SysType;
  24. unsigned long IamMasterLocatorFlag;
  25. unsigned long LocatorStartTime;
  26. public:
  27. virtual unsigned long QueryType(void)
  28. {
  29. return SysType;
  30. }
  31. virtual handle_t GetBindingToMasterLocator(int * Status);
  32. virtual void SetupHelperRoutine();
  33. virtual void DestroyBindingToMasterLocator();
  34. virtual handle_t GetBindingToNamedLocator(
  35. unsigned short * Server,
  36. int * Status
  37. );
  38. virtual void SetIamMasterLocator();
  39. virtual BOOL InqIfIamMasterLocator()
  40. {
  41. return(IamMasterLocatorFlag == TRUE);
  42. }
  43. virtual BOOL IsReplyNeeded(PQUERYLOCATOR Query);
  44. virtual void ProcessMessage(PQUERYLOCATOR Query,
  45. int *Status);
  46. virtual void CacheThisServer(PUZ ServerName);
  47. NATIVE_CLASS_LOCATOR(
  48. IN unsigned long Type,
  49. IN OUT int * Status
  50. ):DataStructureMutex(Status)
  51. {
  52. SysType = Type;
  53. MasterLocatorStringBinding = 0;
  54. MasterLocator = 0;
  55. State = UNBOUND;
  56. LocatorStartTime = CurrentTimeMS();
  57. }
  58. };
  59. class DOMAIN_MACHINE_LOCATOR: public NATIVE_CLASS_LOCATOR
  60. {
  61. public:
  62. virtual handle_t GetBindingToMasterLocator(int * Status);
  63. DOMAIN_MACHINE_LOCATOR(
  64. unsigned long Type,
  65. int * Status):NATIVE_CLASS_LOCATOR(Type, Status)
  66. {
  67. IamMasterLocatorFlag = (Type == ROLE_LMNT_PDC);
  68. }
  69. };
  70. class WRKGRP_MACHINE_LOCATOR: public NATIVE_CLASS_LOCATOR
  71. {
  72. private:
  73. PCACHEDNODE Head;
  74. PCACHEDNODE Tail;
  75. unsigned long CacheSize;
  76. public:
  77. virtual handle_t GetBindingToMasterLocator(int * Status);
  78. WRKGRP_MACHINE_LOCATOR(
  79. unsigned long Type,
  80. int * Status):NATIVE_CLASS_LOCATOR(Type, Status)
  81. {
  82. IamMasterLocatorFlag = FALSE;
  83. Head = Tail = (PCACHEDNODE) NULL;
  84. CacheSize = 0;
  85. }
  86. void InsertCacheEntry(PCACHEDNODE pNode);
  87. PCACHEDNODE DeleteCachedEntry(PCACHEDNODE pNode);
  88. PCACHEDNODE FindCachedEntry(PUZ ServerName);
  89. void TryBroadcastingForMasterLocator(void);
  90. virtual void CacheThisServer(PUZ ServerName);
  91. };
  92. #endif // _LOCCLASS_