SYM_DUMP_PARAM 结构 (wdbgexts.h)

IG_DUMP_SYMBOL_INFO Ioctl 操作提供有关符号类型的信息。 在将 IoctlType 设置为 IG_DUMP_SYMBOL_INFO 的情况下调用 Ioctl 时, IpvData 应包含 SYM_DUMP_PARAM 结构的实例。

语法

typedef struct _SYM_DUMP_PARAM {
  ULONG                    size;
  PUCHAR                   sName;
  ULONG                    Options;
  ULONG64                  addr;
  PFIELD_INFO              listLink;
  union {
    PVOID Context;
    PVOID pBuffer;
  };
  PSYM_DUMP_FIELD_CALLBACK CallbackRoutine;
  ULONG                    nFields;
  PFIELD_INFO              Fields;
  ULONG64                  ModBase;
  ULONG                    TypeId;
  ULONG                    TypeSize;
  ULONG                    BufferSize;
  ULONG                    fPointer : 2;
  ULONG                    fArray : 1;
  ULONG                    fStruct : 1;
  ULONG                    fConstant : 1;
  ULONG                    Reserved : 27;
} SYM_DUMP_PARAM, *PSYM_DUMP_PARAM;

成员

size

指定此结构的大小(以字节为单位)。 它应设置为 sizeof(SYM_DUMP_PARAM)

sName

指定要查找的符号的名称。

Options

指定用于确定此 Ioctl 操作行为的标志。 有关这些标志的说明,请参阅备注。

addr

指定符号的地址。

listLink

指定包含链接列表中的下一项的字段。 如果符号是链接列表中的条目,则此 Ioctl 操作可以使用此处指定为指向列表中下一项的指针的字段循环访问列表中的项。 此结构的类型 FIELD_INFO

在此 Ioctl 操作期间,将为此列表中的每个项调用在此结构的 fieldCallBack 成员中指定的回调函数。 调用它时,将传递此 linkList 结构,其中包含为列表条目填充的成员以及 Context 成员的内容。

应在 “选项” 中设置DBG_DUMP_LIST,以告知此 Ioctl 循环访问列表。

Context

指定一个指针,该指针传递到 CallbackRoutine 成员中的回调函数和 linkListFields 成员的 fieldCallBack 成员中的回调函数。

pBuffer

指定接收符号相关信息的缓冲区。 仅当在 “选项”中设置了DBG_DUMP_COPY_TYPE_DATA标志时,才使用此缓冲区。 缓冲区的大小在 BufferSize 中指定。

CallbackRoutine

指定由引擎调用的回调函数。 引擎为回调函数提供符号及其成员的相关信息。

nFields

指定 Fields 数组中的条目数。

Fields

指定 FIELD_INFO 结构的数组,这些结构控制指定符号的各个成员的此操作的行为。 有关详细信息,请参阅FIELD_INFO。

ModBase

接收包含 符号的模块开头的目标内存中的位置。

TypeId

接收符号的类型 ID。

TypeSize

接收目标内存中符号的大小(以字节为单位)。

BufferSize

指定 pBuffer 缓冲区的大小(以字节为单位)。

fPointer

接收一个布尔值,该值指示符号是否为指针。 如果符号不是指针,fPointerFALSE。 如果符号是 32 位指针,则为 1;如果符号为 64 位指针,则为 3。

fArray

接收一个布尔值,该值指示符号是否为数组。 如果符号不是数组,则 fArrayFALSE;如果为 TRUE,则为 TRUE

fStruct

接收一个布尔值,该值指示符号是否为结构。 如果符号不是结构,fStructFALSE;如果为 TRUE,则为 TRUE。

fConstant

接收一个布尔值,该值指示符号是否为常量。 如果符号不是常量,则 fConstantFALSE;如果为 TRUE,则为 TRUE

Reserved

注解

IG_DUMP_SYMBOL_INFO Ioctl 操作的参数是SYM_DUMP_PARAM结构的成员。

Ioctl 操作查找符号的模块信息,并加载模块符号(如果可能)。

如果 nFields 为零并在 Options 中设置了DBG_DUMP_CALL_FOR_EACH,则会为符号中的每个字段调用 CallbackRoutine 中指定的回调函数。

如果 nFields 为非零且在 Options 中设置了DBG_DUMP_CALL_FOR_EACH,则仅针对与其中一个 Fields 元素的 fName 成员匹配的字段进行回调。 如果字段与 fName 成员匹配,而 fieldCallBack 成员不为 NULL,则调用 fieldCallBack 中的回调函数;如果为 NULL,则改为调用 CallbackRoutine 中的回调函数。

SYM_DUMP_PARAM 结构的 Options 成员使用 DBG_DUMP_XXX 位标志来控制IG_DUMP_SYMBOL_INFOIoctl 操作的行为。

可以存在以下标志。

标志 效果
DBG_DUMP_NO_INDENT 成员不会在输出中缩进。
DBG_DUMP_NO_OFFSET 不打印偏移量。
DBG_DUMP_VERBOSE 详细输出。
DBG_DUMP_CALL_FOR_EACH 为每个成员调用回调函数。
DBG_DUMP_LIST 符号是链接列表中的条目,IG_DUMP_SYMBOL_INFO Ioctl 操作将循环访问此列表。 指向列表中下一项的成员的说明由 SYM_DUMP_PARAM 结构的 linkList 成员指定。
DBG_DUMP_NO_PRINT (只调用回调函数并) 执行数据复制,则不打印任何内容。
DBG_DUMP_GET_SIZE_ONLY Ioctl 操作仅返回符号的大小;它不会打印成员信息或调用回调函数。
DBG_DUMP_COMPACT_OUT 不在每个成员之后打印换行符。
DBG_DUMP_ARRAY 符号是数组。 数组中的元素数由SYM_DUMP_PARAM结构的成员 listLink->大小 指定。
DBG_DUMP_ADDRESS_OF_FIELD addr 的值实际上是SYM_DUMP_PARAM结构的成员 listLink->fName 的地址,而不是符号的开头。
DBG_DUMP_ADDRESS_AT_END addr 的值实际上是符号末尾的地址,而不是符号的开头。
DBG_DUMP_COPY_TYPE_DATA 符号的值将复制到成员 pBuffer 中。 这只能用于基元类型(例如 ULONG 或 PVOID),它不能与结构一起使用。
DBG_DUMP_READ_PHYSICAL 符号的值将直接从目标的物理内存中读取。
DBG_DUMP_FUNCTION_FORMAT 设置具有函数类型的符号的格式时,将使用函数格式,例如, function(arg1, arg2, ...)
DBG_DUMP_BLOCK_RECURSE 通过嵌套结构递归;但不遵循指针。
 

此外,可以将宏DBG_DUMP_RECUR_LEVEL (级别) 的结果添加到位集中,以指定要递归结构的深度。 级别 可以是介于 0 和 15 之间的数字。

FIELD_INFO 结构的fOptions 成员使用 DBG_DUMP_FIELD_XXX 位标志来控制IG_DUMP_SYMBOL_INFOIoctl 操作的行为。

可以存在以下标志。

标志 效果
DBG_DUMP_FIELD_CALL_BEFORE_PRINT 回调函数在打印成员之前调用。
DBG_DUMP_FIELD_NO_CALLBACK_REQ 不调用回调函数。
DBG_DUMP_FIELD_RECUR_ON_THIS 处理成员的子成员。
DBG_DUMP_FIELD_FULL_NAME fName 必须完全匹配,而不是仅具有匹配的前缀,才能处理成员。
DBG_DUMP_FIELD_ARRAY 打印数组成员的数组元素。
DBG_DUMP_FIELD_COPY_FIELD_DATA 成员的值将复制到 pBuffer 中
DBG_DUMP_FIELD_RETURN_ADDRESS 在回调期间或 Ioctl 返回时,FIELD_INFO。address 成员包含符号成员的地址。

如果未为类型提供地址,FIELD_INFO。address 包含成员与类型开头的总偏移量。

DBG_DUMP_FIELD_SIZE_IN_BITS 对于位字段,返回偏移量和大小(以位而不是字节为单位)。
DBG_DUMP_FIELD_NO_PRINT 请勿打印此成员 (仅调用回调函数并) 执行数据复制。
DBG_DUMP_FIELD_DEFAULT_STRING DBG_DUMP_FIELD_WCHAR_STRING DBG_DUMP_FIELD_MULTI_STRING DBG_DUMP_FIELD_GUID_STRING 如果成员是指针,则将其打印为字符串、ANSI 字符串、WCHAR 字符串、MULTI 字符串或 GUID。
 

此外,可以将宏DBG_DUMP_RECUR_LEVEL (Level) 的结果添加到位集中,以指定要递归结构的深度。 级别 可以是介于 0 和 15 之间的数字。

要求

要求
Header wdbgexts.h (包括 Wdbgexts.h、Dbgeng.h)

另请参阅

DBG_DUMP_XXX

FIELD_INFO

IG_DUMP_SYMBOL_INFO 错误代码

Ioctl