ExtExtension

ExtExtension 类是表示 EngExtCpp 扩展库的 C++ 类的基类。

ExtExtension 类包含以下方法,子类可以使用这些方法:

初始化

Uninitialize

OnSessionActive

OnSessionInactive

OnSessionAccessible

OnSessionInaccessible

IsUserMode

IsKernelMode

IsLiveLocalUser

IsMachine32

IsCurMachine32

IsMachine64

IsCurMachine64

Is32On64

CanQueryVirtual

HasFullMemBasic

IsExtensionRemote

AreOutputCallbacksDmlAware

RequireUserMode

RequireKernelMode

GetNumUnnamedArgs

GetUnnamedArgStr

GetUnnamedArgU64

HasUnnamedArg

GetArgStr

GetArgU64

HasArg

HasCharArg

SetUnnamedArg

SetUnnamedArgStr

SetUnnamedArgU64

SetArg

SetArgStr

SetArgU64

GetRawArgStr

GetRawArgCopy

Out

警告

犯 错

谓词

Dml

DmlWarn

DmlErr

DmlVerb

DmlCmdLink

DmlCmdExec

RefreshOutputCallbackFlags

WrapLine

OutWrapStr

OutWrapVa

OutWrap

DemandWrap

AllowWrap

TestWrap

RequestCircleString

CopyCircleString

PrintCircleStringVa

PrintCircleString

SetAppendBuffer

AppendBufferString

AppendStringVa

AppendString

IsAppendStart

SetCallStatus

GetCachedSymbolTypeId

GetCachedFieldOffset

GetCachedFieldOffset

AddCachedSymbolInfo

GetExpr64

GetExprU64

GetExprS64

ThrowCommandHelp

ThrowInterrupt

ThrowOutOfMemory

ThrowContinueSearch

ThrowReloadExtension

ThrowInvalidArg

ThrowRemote

ThrowStatus

ThrowLastError

ExtExtension 类还包含以下子类可以使用的字段:

class ExtExtension
{
public:
    USHORT  m_ExtMajorVersion;
    USHORT  m_ExtMinorVersion;
    ULONG  m_ExtInitFlags;
    ExtKnownStruct *  m_KnownStructs;
    ExtProvidedValue *  m_ProvidedValues;
    ExtCheckedPointer<IDebugAdvanced>  m_Advanced;
    ExtCheckedPointer<IDebugClient>  m_Client;
    ExtCheckedPointer<IDebugControl>  m_Control;
    ExtCheckedPointer<IDebugDataSpaces>  m_Data;
    ExtCheckedPointer<IDebugRegisters>  m_Registers;
    ExtCheckedPointer<IDebugSymbols>  m_Symbols;
    ExtCheckedPointer<IDebugSystemObjects>  m_System;
    ExtCheckedPointer<IDebugAdvanced2>  m_Advanced2;
    ExtCheckedPointer<IDebugAdvanced3>  m_Advanced3;
    ExtCheckedPointer<IDebugClient2>  m_Client2;
    ExtCheckedPointer<IDebugClient3>  m_Client3;
    ExtCheckedPointer<IDebugClient4>  m_Client4;
    ExtCheckedPointer<IDebugClient5>  m_Client5;
    ExtCheckedPointer<IDebugControl2>  m_Control2;
    ExtCheckedPointer<IDebugControl3>  m_Control3;
    ExtCheckedPointer<IDebugControl4>  m_Control4;
    ExtCheckedPointer<IDebugDataSpaces2>  m_Data2;
    ExtCheckedPointer<IDebugDataSpaces3>  m_Data3;
    ExtCheckedPointer<IDebugDataSpaces4>  m_Data4;
    ExtCheckedPointer<IDebugRegisters2>  m_Registers2;
    ExtCheckedPointer<IDebugSymbols2>  m_Symbols2;
    ExtCheckedPointer<IDebugSymbols3>  m_Symbols3;
    ExtCheckedPointer<IDebugSystemObjects2>  m_System2;
    ExtCheckedPointer<IDebugSystemObjects3>  m_System3;
    ExtCheckedPointer<IDebugSystemObjects4>  m_System4;
    ULONG  m_OutputWidth;
    ULONG  m_ActualMachine;
    ULONG  m_Machine;
    ULONG  m_PageSize;
    ULONG  m_PtrSize;
    ULONG  m_NumProcessors;
    ULONG64  m_OffsetMask;
    ULONG  m_DebuggeeClass;
    ULONG  m_DebuggeeQual;
    ULONG  m_DumpFormatFlags;
    bool  m_IsRemote;
    bool  m_OutCallbacksDmlAware;
    ULONG  m_OutMask;
    ULONG  m_CurChar;
    ULONG  m_LeftIndent;
    bool  m_AllowWrap;
    bool  m_TestWrap;
    ULONG  m_TestWrapChars;
    PSTR  m_AppendBuffer;
    ULONG  m_AppendBufferChars;
    PSTR  m_AppendAt;
};

成员

m_ExtMajorVersion
扩展库的主版本号。 这应由 Initialize 方法设置。 如果未设置,则默认为 1

m_ExtMinorVersion
扩展库的次要版本号。 这应由 Initialize 方法设置。 如果未设置,则默认为 0 (零) 。

m_ExtInitFlags
DebugExtensionInitialize 的 DbgEng 扩展初始化标志。

m_KnownStructs
扩展库能够格式化输出的 ExtKnownStruct 结构的数组。 此成员应由 Initialize 方法设置,并且不应在此方法返回后进行更改。

如果m_KnownStructs不为 NULL,则数组中最后一个 ExtKnownStruct 结构的 TypeName 成员必须为 NULL

为输出设置目标结构的格式时,如果结构类型的名称与此数组中 ExtKnownStruct 结构之一的 TypeName 成员匹配,则会调用 Method 成员中指定的回调函数来执行格式设置。

m_ProvidedValues
ExtProvidedValue 结构的数组,其中列出了扩展库可以提供值的伪寄存器。 此成员应由 Initialize 方法设置,并且不应在此方法返回后进行更改。

如果 m_ProvidedValues 不为 NULL,则数组中最后一个 ExtProvidedValue 结构的 ValueName 成员必须为 NULL

计算伪寄存器时,如果伪寄存器的名称与此数组中某个 ExtProvidedValue 结构的 ValueName 成员匹配,则调用 Method 成员中指定的回调函数来计算伪寄存器。

m_Advanced
扩展库可以使用的客户端对象的 IDebugAdvanced 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_Client
扩展库可以使用的客户端对象的 IDebugClient 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_Control
扩展库可以使用的客户端对象的 IDebugControl 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_Data
扩展库可以使用的客户端对象的 IDebugDataSpaces 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_Registers
扩展库可以使用的客户端对象的 IDebugRegisters 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_Symbols
扩展库可以使用的客户端对象的 IDebugSymbols 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_System
扩展库可以使用的客户端对象的 IDebugSystemObjects 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod

m_Advanced2
扩展库可以使用的客户端对象的 IDebugAdvanced2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Advanced3
扩展库可以使用的客户端对象的 IDebugAdvanced3 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Client2
扩展库可以使用的客户端对象的 IDebugClient2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Client3
扩展库可以使用的客户端对象的 IDebugClient3 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Client4
扩展库可以使用的客户端对象的 IDebugClient4 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Client5
扩展库可以使用的客户端对象的 IDebugClient5 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Control2
扩展库可以使用的客户端对象的 IDebugControl2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Control3
扩展库可以使用的客户端对象的 IDebugControl3 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Control4
扩展库可以使用的客户端对象的 IDebugControl4 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Data2
可由扩展库使用的客户端对象的 IDebugDataSpaces2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Data3
扩展库可以使用的客户端对象的 IDebugDataSpaces3 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Data4
扩展库可以使用的客户端对象的 IDebugDataSpaces4 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Registers2
可由扩展库使用的客户端对象的 IDebugRegisters2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Symbols2
扩展库可以使用的客户端对象的 IDebugSymbols2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_Symbols3
扩展库可以使用的客户端对象的 IDebugSymbols3 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_System2
扩展库可以使用的客户端对象的 IDebugSystemObjects2 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_System3
扩展库可以使用的客户端对象的 IDebugSystemObjects3 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_System4
扩展库可以使用的客户端对象的 IDebugSystemObjects4 接口指针。 它在调用外部调用的扩展方法期间有效,例如,执行扩展命令、调用 ExtKnownStructMethodExtProvideValueMethod。 此接口可能并非在所有版本的调试器引擎中都可用。

m_PtrSize
当前目标上的指针的大小。 如果目标使用 32 位指针, m_PtrSize 为 4。 如果目标使用 64 位指针, m_PtrSize 为 8。

m_AppendBuffer
用于将字符串从扩展库返回到引擎的字符缓冲区。 此缓冲区的大小m_AppendBufferChars。 AppendBufferStringAppendStringVaAppendString 方法可用于将字符串写入此缓冲区。

m_AppendBufferChars
缓冲区 m_AppendBuffer的大小(以字符为单位)。