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.

232 lines
4.8 KiB

  1. /*++
  2. Copyright (c) 2001 Microsoft Corporation
  3. All rights reserved
  4. Module Name:
  5. lsaspmapi.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 "lsaspmapi.hxx"
  17. TSPM_API::TSPM_API(void) : m_hr(E_FAIL)
  18. {
  19. }
  20. TSPM_API::TSPM_API(IN ULONG64 baseOffset)
  21. : m_baseOffset(baseOffset), m_hr(E_FAIL)
  22. {
  23. m_hr = Initialize();
  24. }
  25. TSPM_API::~TSPM_API(void)
  26. {
  27. }
  28. HRESULT TSPM_API::IsValid(void) const
  29. {
  30. return m_hr;
  31. }
  32. ULONG64 TSPM_API::GetGetBinding(void) const
  33. {
  34. return m_baseOffset;
  35. }
  36. ULONG64 TSPM_API::GetInitContext(void) const
  37. {
  38. return m_baseOffset;
  39. }
  40. TSecBuffer TSPM_API::GetSecBufferInitSbData(IN ULONG index) const
  41. {
  42. static ULONG fieldOffset = ReadFieldOffset(kstrSpmNtCntxt, kstrSbData);
  43. static ULONG cbSecBufferSize = TSecBuffer::GetcbSecBufferSizeInArray();
  44. return TSecBuffer(m_baseOffset + fieldOffset + index * cbSecBufferSize);
  45. }
  46. TSecBuffer TSPM_API::GetSecBufferInitContextData(void) const
  47. {
  48. static ULONG fieldOffset = ReadFieldOffset(kstrSpmNtCntxt, kstrCtxtData);
  49. return TSecBuffer(m_baseOffset + fieldOffset);
  50. }
  51. ULONG64 TSPM_API::GetAcceptContext(void) const
  52. {
  53. return m_baseOffset;
  54. }
  55. TSecBuffer TSPM_API::GetSecBufferAcceptContextData(void) const
  56. {
  57. static ULONG fieldOffset = ReadFieldOffset(kstrSpmCptCntxt, kstrCtxtData);
  58. return TSecBuffer(m_baseOffset + fieldOffset);
  59. }
  60. TSecBuffer TSPM_API::GetSecBufferAcceptsbData(IN ULONG index) const
  61. {
  62. static ULONG fieldOffset = ReadFieldOffset(kstrSpmCptCntxt, kstrSbData);
  63. static ULONG cbSecBufferSize = TSecBuffer::GetcbSecBufferSizeInArray();
  64. return TSecBuffer(m_baseOffset + fieldOffset + index * cbSecBufferSize);
  65. }
  66. ULONG64 TSPM_API::GetAcquireCreds(void) const
  67. {
  68. return m_baseOffset;
  69. }
  70. ULONG64 TSPM_API::GetFreeCredHandle(void) const
  71. {
  72. return m_baseOffset;
  73. }
  74. ULONG64 TSPM_API::GetDeleteContext(void) const
  75. {
  76. return m_baseOffset;
  77. }
  78. ULONG64 TSPM_API::GetQueryCredAttributes(void) const
  79. {
  80. return m_baseOffset;
  81. }
  82. ULONG64 TSPM_API::GetQueryContextAttributes(void) const
  83. {
  84. return m_baseOffset;
  85. }
  86. ULONG64 TSPM_API::GetQueryCredAttrBuffers(IN ULONG index) const
  87. {
  88. static ULONG fieldOffset = ReadFieldOffset("_SPMQueryCredAttributesAPI", "Buffers");
  89. static ULONG cbPointerSize = ReadTypeSize("ULONG_PTR");
  90. ULONG64 value = 0;
  91. if (GetPtrWithVoidStar(m_baseOffset + fieldOffset + index * cbPointerSize, &value)) {
  92. DBG_LOG(LSA_ERROR, ("Unable to read TSPM_API %#I64x::QueryCredAttrBuffer index %d\n", m_baseOffset, index));
  93. throw "TSPM_API::GetQueryCredAttrBuffer failed";
  94. }
  95. return toPtr(value);
  96. }
  97. ULONG64 TSPM_API::GetQueryContextAttrBuffers(IN ULONG index) const
  98. {
  99. static ULONG fieldOffset = ReadFieldOffset("_SPMQueryContextAttrAPI", "Buffers");
  100. static ULONG cbPointerSize = ReadTypeSize("ULONG_PTR");
  101. ULONG64 value = 0;
  102. if (GetPtrWithVoidStar(m_baseOffset + fieldOffset + index * cbPointerSize, &value)) {
  103. DBG_LOG(LSA_ERROR, ("Unable to read TSPM_API %#I64x::GetQueryContextAttrBuffer index %d\n", m_baseOffset, index));
  104. throw "TSPM_API::GetQueryContextAttrBuffer failed";
  105. }
  106. return toPtr(value);
  107. }
  108. ULONG64 TSPM_API::GetEfsGenerateKey(void) const
  109. {
  110. return m_baseOffset;
  111. }
  112. ULONG64 TSPM_API::GetEfsGenerateDirEfs(void) const
  113. {
  114. return m_baseOffset;
  115. }
  116. ULONG64 TSPM_API::GetEfsDecryptFek(void) const
  117. {
  118. return m_baseOffset;
  119. }
  120. ULONG64 TSPM_API::GetCallback(void) const
  121. {
  122. return m_baseOffset;
  123. }
  124. TSecBuffer TSPM_API::GetSecBufferCallbackInput(void) const
  125. {
  126. static ULONG fieldOffset = ReadFieldOffset(kstrClBk, "Input");
  127. return TSecBuffer(m_baseOffset + fieldOffset);
  128. }
  129. TSecBuffer TSPM_API::GetSecBufferCallbackOutput(void) const
  130. {
  131. static ULONG fieldOffset = ReadFieldOffset(kstrClBk, "Output");
  132. return TSecBuffer(m_baseOffset + fieldOffset);
  133. }
  134. ULONG64 TSPM_API::GetAddCredential(void) const
  135. {
  136. return m_baseOffset;
  137. }
  138. /******************************************************************************
  139. Private Methods
  140. ******************************************************************************/
  141. /*++
  142. Routine Name:
  143. Initialize
  144. Routine Description:
  145. Do necessary initialization.
  146. Arguments:
  147. None
  148. Return Value:
  149. An HRESULT
  150. --*/
  151. HRESULT TSPM_API::Initialize(void)
  152. {
  153. HRESULT hRetval = E_FAIL;
  154. hRetval = S_OK;
  155. return hRetval;
  156. }
  157. HRESULT TSPM_API::Initialize(IN ULONG64 baseOffset)
  158. {
  159. m_baseOffset = baseOffset;
  160. m_hr = S_OK;
  161. return m_hr;
  162. }