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
174 lines
3.1 KiB
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
All rights reserved
|
|
|
|
Module Name:
|
|
|
|
lsalht.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 "lsalht.hxx"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
TLHT::TLHT(void) : m_hr(E_FAIL)
|
|
{
|
|
}
|
|
|
|
TLHT::TLHT(IN ULONG64 baseOffset)
|
|
: m_baseOffset(baseOffset), m_hr(E_FAIL)
|
|
{
|
|
m_hr = Initialize();
|
|
}
|
|
|
|
TLHT::~TLHT(void)
|
|
{
|
|
}
|
|
|
|
HRESULT TLHT::IsValid(void) const
|
|
{
|
|
return m_hr;
|
|
}
|
|
|
|
ULONG TLHT::GetFlags(void) const
|
|
{
|
|
ULONG Flags = 0;
|
|
|
|
ReadStructField(m_baseOffset, kstrLHT, "Flags", sizeof(Flags), &Flags);
|
|
|
|
return Flags;
|
|
}
|
|
|
|
ULONG TLHT::GetCount(void) const
|
|
{
|
|
ULONG Count = 0;
|
|
|
|
ReadStructField(m_baseOffset, kstrLHT, "Count", sizeof(Count), &Count);
|
|
|
|
return Count;
|
|
}
|
|
|
|
ULONG TLHT::GetListsFlags(IN ULONG index) const
|
|
{
|
|
CHAR szTmp[64] = {0};
|
|
ULONG Flags = 0;
|
|
|
|
_snprintf(szTmp, sizeof(szTmp) - 1, "Lists[%#x].Flags", index);
|
|
|
|
DBG_LOG(LSA_LOG, ("Reading %s from %s %#I64x\n", szTmp, kstrLHT, m_baseOffset));
|
|
|
|
ReadStructField(m_baseOffset, kstrLHT, szTmp, sizeof(Flags), &Flags);
|
|
|
|
return Flags;
|
|
}
|
|
|
|
ULONG64 TLHT::GetPendingHandle(void) const
|
|
{
|
|
return ReadStructPtrField(m_baseOffset, kstrLHT, "PendingHandle");
|
|
}
|
|
|
|
ULONG64 TLHT::GetListsFlink(IN ULONG index) const
|
|
{
|
|
CHAR szTmp[64] = {0};
|
|
|
|
_snprintf(szTmp, sizeof(szTmp) - 1, "Lists[%#x].List.Flink", index);
|
|
|
|
DBG_LOG(LSA_LOG, ("Reading %s from %s %#I64x\n", szTmp, kstrLHT, m_baseOffset));
|
|
|
|
return ReadStructPtrField(m_baseOffset, kstrLHT, szTmp);
|
|
}
|
|
|
|
ULONG64 TLHT::GetAddrLists(IN ULONG index) const
|
|
{
|
|
CHAR szTmp[64] = {0};
|
|
|
|
ULONG fieldOffset = 0;
|
|
|
|
_snprintf(szTmp, sizeof(szTmp) - 1, "Lists[%#x]", index);
|
|
|
|
DBG_LOG(LSA_LOG, ("Reading offset %s from %s %#I64x\n", szTmp, kstrLHT, m_baseOffset));
|
|
|
|
fieldOffset = ReadFieldOffset(kstrLHT, szTmp);
|
|
|
|
return m_baseOffset + fieldOffset;
|
|
}
|
|
|
|
ULONG64 TLHT::GetDeleteCallback(void) const
|
|
{
|
|
return ReadStructPtrField(m_baseOffset, kstrLHT, "DeleteCallback");
|
|
}
|
|
|
|
ULONG TLHT::GetDepth(void) const
|
|
{
|
|
ULONG Depth = 0;
|
|
|
|
ReadStructField(m_baseOffset, kstrLHT, "Depth", sizeof(Depth), &Depth);
|
|
|
|
return Depth;
|
|
}
|
|
|
|
ULONG64 TLHT::GetParent(void) const
|
|
{
|
|
return ReadStructPtrField(m_baseOffset, kstrLHT, "Parent");
|
|
}
|
|
|
|
/******************************************************************************
|
|
|
|
Private Methods
|
|
|
|
******************************************************************************/
|
|
/*++
|
|
|
|
Routine Name:
|
|
|
|
Initialize
|
|
|
|
Routine Description:
|
|
|
|
Do necessary initialization.
|
|
|
|
Arguments:
|
|
|
|
None
|
|
|
|
Return Value:
|
|
|
|
An HRESULT
|
|
|
|
--*/
|
|
HRESULT TLHT::Initialize(void)
|
|
{
|
|
HRESULT hRetval = E_FAIL;
|
|
|
|
hRetval = S_OK;
|
|
|
|
return hRetval;
|
|
}
|
|
|
|
HRESULT TLHT::Initialize(IN ULONG64 baseOffset)
|
|
{
|
|
m_baseOffset = baseOffset;
|
|
|
|
m_hr = Initialize();
|
|
|
|
return m_hr;
|
|
}
|