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
232 lines
4.8 KiB
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
All rights reserved
|
|
|
|
Module Name:
|
|
|
|
lsaspmapi.cxx
|
|
|
|
Abstract:
|
|
|
|
This file provides useful accssors and mutators.
|
|
|
|
Author:
|
|
|
|
Larry Zhu (LZhu) May 1, 2001 Created
|
|
|
|
Environment:
|
|
|
|
User Mode -Win32
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "precomp.hxx"
|
|
#pragma hdrstop
|
|
|
|
#include "lsaspmapi.hxx"
|
|
|
|
TSPM_API::TSPM_API(void) : m_hr(E_FAIL)
|
|
{
|
|
}
|
|
|
|
TSPM_API::TSPM_API(IN ULONG64 baseOffset)
|
|
: m_baseOffset(baseOffset), m_hr(E_FAIL)
|
|
{
|
|
m_hr = Initialize();
|
|
}
|
|
|
|
TSPM_API::~TSPM_API(void)
|
|
{
|
|
}
|
|
|
|
HRESULT TSPM_API::IsValid(void) const
|
|
{
|
|
return m_hr;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetGetBinding(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetInitContext(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
TSecBuffer TSPM_API::GetSecBufferInitSbData(IN ULONG index) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset(kstrSpmNtCntxt, kstrSbData);
|
|
static ULONG cbSecBufferSize = TSecBuffer::GetcbSecBufferSizeInArray();
|
|
|
|
return TSecBuffer(m_baseOffset + fieldOffset + index * cbSecBufferSize);
|
|
}
|
|
|
|
TSecBuffer TSPM_API::GetSecBufferInitContextData(void) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset(kstrSpmNtCntxt, kstrCtxtData);
|
|
|
|
return TSecBuffer(m_baseOffset + fieldOffset);
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetAcceptContext(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
TSecBuffer TSPM_API::GetSecBufferAcceptContextData(void) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset(kstrSpmCptCntxt, kstrCtxtData);
|
|
|
|
return TSecBuffer(m_baseOffset + fieldOffset);
|
|
}
|
|
|
|
TSecBuffer TSPM_API::GetSecBufferAcceptsbData(IN ULONG index) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset(kstrSpmCptCntxt, kstrSbData);
|
|
static ULONG cbSecBufferSize = TSecBuffer::GetcbSecBufferSizeInArray();
|
|
|
|
return TSecBuffer(m_baseOffset + fieldOffset + index * cbSecBufferSize);
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetAcquireCreds(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetFreeCredHandle(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetDeleteContext(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetQueryCredAttributes(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetQueryContextAttributes(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetQueryCredAttrBuffers(IN ULONG index) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset("_SPMQueryCredAttributesAPI", "Buffers");
|
|
static ULONG cbPointerSize = ReadTypeSize("ULONG_PTR");
|
|
|
|
ULONG64 value = 0;
|
|
|
|
if (GetPtrWithVoidStar(m_baseOffset + fieldOffset + index * cbPointerSize, &value)) {
|
|
|
|
DBG_LOG(LSA_ERROR, ("Unable to read TSPM_API %#I64x::QueryCredAttrBuffer index %d\n", m_baseOffset, index));
|
|
|
|
throw "TSPM_API::GetQueryCredAttrBuffer failed";
|
|
}
|
|
|
|
return toPtr(value);
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetQueryContextAttrBuffers(IN ULONG index) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset("_SPMQueryContextAttrAPI", "Buffers");
|
|
static ULONG cbPointerSize = ReadTypeSize("ULONG_PTR");
|
|
|
|
ULONG64 value = 0;
|
|
|
|
if (GetPtrWithVoidStar(m_baseOffset + fieldOffset + index * cbPointerSize, &value)) {
|
|
|
|
DBG_LOG(LSA_ERROR, ("Unable to read TSPM_API %#I64x::GetQueryContextAttrBuffer index %d\n", m_baseOffset, index));
|
|
|
|
throw "TSPM_API::GetQueryContextAttrBuffer failed";
|
|
}
|
|
|
|
return toPtr(value);
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetEfsGenerateKey(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetEfsGenerateDirEfs(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetEfsDecryptFek(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetCallback(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
TSecBuffer TSPM_API::GetSecBufferCallbackInput(void) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset(kstrClBk, "Input");
|
|
|
|
return TSecBuffer(m_baseOffset + fieldOffset);
|
|
}
|
|
|
|
TSecBuffer TSPM_API::GetSecBufferCallbackOutput(void) const
|
|
{
|
|
static ULONG fieldOffset = ReadFieldOffset(kstrClBk, "Output");
|
|
|
|
return TSecBuffer(m_baseOffset + fieldOffset);
|
|
}
|
|
|
|
ULONG64 TSPM_API::GetAddCredential(void) const
|
|
{
|
|
return m_baseOffset;
|
|
}
|
|
|
|
/******************************************************************************
|
|
|
|
Private Methods
|
|
|
|
******************************************************************************/
|
|
/*++
|
|
|
|
Routine Name:
|
|
|
|
Initialize
|
|
|
|
Routine Description:
|
|
|
|
Do necessary initialization.
|
|
|
|
Arguments:
|
|
|
|
None
|
|
|
|
Return Value:
|
|
|
|
An HRESULT
|
|
|
|
--*/
|
|
HRESULT TSPM_API::Initialize(void)
|
|
{
|
|
HRESULT hRetval = E_FAIL;
|
|
|
|
hRetval = S_OK;
|
|
|
|
return hRetval;
|
|
}
|
|
|
|
HRESULT TSPM_API::Initialize(IN ULONG64 baseOffset)
|
|
{
|
|
m_baseOffset = baseOffset;
|
|
m_hr = S_OK;
|
|
|
|
return m_hr;
|
|
}
|