Leaked source code of windows server 2003
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.

174 lines
3.1 KiB

  1. /*++
  2. Copyright (c) 2001 Microsoft Corporation
  3. All rights reserved
  4. Module Name:
  5. lsalht.cxx
  6. Abstract:
  7. This file provides useful accssors and mutators.
  8. Author:
  9. Larry Zhu (LZhu) May 1, 2001 Created
  10. Environment:
  11. User Mode -Win32
  12. Revision History:
  13. --*/
  14. #include "precomp.hxx"
  15. #pragma hdrstop
  16. #include "lsalht.hxx"
  17. #include <stdio.h>
  18. #include <string.h>
  19. TLHT::TLHT(void) : m_hr(E_FAIL)
  20. {
  21. }
  22. TLHT::TLHT(IN ULONG64 baseOffset)
  23. : m_baseOffset(baseOffset), m_hr(E_FAIL)
  24. {
  25. m_hr = Initialize();
  26. }
  27. TLHT::~TLHT(void)
  28. {
  29. }
  30. HRESULT TLHT::IsValid(void) const
  31. {
  32. return m_hr;
  33. }
  34. ULONG TLHT::GetFlags(void) const
  35. {
  36. ULONG Flags = 0;
  37. ReadStructField(m_baseOffset, kstrLHT, "Flags", sizeof(Flags), &Flags);
  38. return Flags;
  39. }
  40. ULONG TLHT::GetCount(void) const
  41. {
  42. ULONG Count = 0;
  43. ReadStructField(m_baseOffset, kstrLHT, "Count", sizeof(Count), &Count);
  44. return Count;
  45. }
  46. ULONG TLHT::GetListsFlags(IN ULONG index) const
  47. {
  48. CHAR szTmp[64] = {0};
  49. ULONG Flags = 0;
  50. _snprintf(szTmp, sizeof(szTmp) - 1, "Lists[%#x].Flags", index);
  51. DBG_LOG(LSA_LOG, ("Reading %s from %s %#I64x\n", szTmp, kstrLHT, m_baseOffset));
  52. ReadStructField(m_baseOffset, kstrLHT, szTmp, sizeof(Flags), &Flags);
  53. return Flags;
  54. }
  55. ULONG64 TLHT::GetPendingHandle(void) const
  56. {
  57. return ReadStructPtrField(m_baseOffset, kstrLHT, "PendingHandle");
  58. }
  59. ULONG64 TLHT::GetListsFlink(IN ULONG index) const
  60. {
  61. CHAR szTmp[64] = {0};
  62. _snprintf(szTmp, sizeof(szTmp) - 1, "Lists[%#x].List.Flink", index);
  63. DBG_LOG(LSA_LOG, ("Reading %s from %s %#I64x\n", szTmp, kstrLHT, m_baseOffset));
  64. return ReadStructPtrField(m_baseOffset, kstrLHT, szTmp);
  65. }
  66. ULONG64 TLHT::GetAddrLists(IN ULONG index) const
  67. {
  68. CHAR szTmp[64] = {0};
  69. ULONG fieldOffset = 0;
  70. _snprintf(szTmp, sizeof(szTmp) - 1, "Lists[%#x]", index);
  71. DBG_LOG(LSA_LOG, ("Reading offset %s from %s %#I64x\n", szTmp, kstrLHT, m_baseOffset));
  72. fieldOffset = ReadFieldOffset(kstrLHT, szTmp);
  73. return m_baseOffset + fieldOffset;
  74. }
  75. ULONG64 TLHT::GetDeleteCallback(void) const
  76. {
  77. return ReadStructPtrField(m_baseOffset, kstrLHT, "DeleteCallback");
  78. }
  79. ULONG TLHT::GetDepth(void) const
  80. {
  81. ULONG Depth = 0;
  82. ReadStructField(m_baseOffset, kstrLHT, "Depth", sizeof(Depth), &Depth);
  83. return Depth;
  84. }
  85. ULONG64 TLHT::GetParent(void) const
  86. {
  87. return ReadStructPtrField(m_baseOffset, kstrLHT, "Parent");
  88. }
  89. /******************************************************************************
  90. Private Methods
  91. ******************************************************************************/
  92. /*++
  93. Routine Name:
  94. Initialize
  95. Routine Description:
  96. Do necessary initialization.
  97. Arguments:
  98. None
  99. Return Value:
  100. An HRESULT
  101. --*/
  102. HRESULT TLHT::Initialize(void)
  103. {
  104. HRESULT hRetval = E_FAIL;
  105. hRetval = S_OK;
  106. return hRetval;
  107. }
  108. HRESULT TLHT::Initialize(IN ULONG64 baseOffset)
  109. {
  110. m_baseOffset = baseOffset;
  111. m_hr = Initialize();
  112. return m_hr;
  113. }