Поделиться через


Функция GetShortField (wdbgexts.h)

Функция GetShortField считывает значение элемента в структуре, если его размер меньше или равен 8 байтам, или инициализирует структуру, чтобы ее можно было прочитать позже. Эта функция не предназначена для непосредственного использования; вместо этого следует использовать InitTypeRead Или InitTypeReadPhysical и ReadField.

Синтаксис

ULONG64 GetShortField(
  [in] IN ULONG64 TypeAddress,
  [in] IN LPCSTR  Name,
  [in] IN USHORT  StoreAddress
);

Параметры

[in] TypeAddress

Значение этого параметра зависит от значения StoreAddress.

Если StoreAddress не равно нулю:

Указывает адрес структуры в памяти целевого объекта. Этот адрес используется для последующих вызовов, когда StoreAddress равно нулю.

Если StoreAddress равно нулю:

TypeAddress игнорируется. Значение TypeAddress из последнего вызова, когда StoreAddress ненулевым используется для указания адреса структуры в памяти целевого объекта.

[in] Name

Значение этого параметра зависит от значения StoreAddress.

Если StoreAddress не равно нулю:

Указывает имя типа структуры в TypeAddress.

Если StoreAddress равно нулю:

Указывает имя элемента в структуре для чтения. Адрес и тип структуры запоминаются из предыдущего вызова этой функции с StoreAddress не равно нулю. Вложенные элементы можно указать с помощью пути, разделенного периодом, например myfield.mysubfield.

[in] StoreAddress

Задает режим этой функции.

Если StoreAddress не равно нулю:

Эта функция инициализирует структуру для чтения его членов. Имя адреса и типа структуры запоминается.

Если битовое значение 0x2 задано в StoreAddress, адрес TypeAddress считается физическим адресом; в противном случае он считается виртуальным адресом.

Если StoreAddress равно нулю:

Эта функция считывает элемент из ранее инициализированной структуры.

Возвращаемое значение

Возвращаемый код Описание
Если StoreAddress не равно нулю:
Если функция выполнена успешно, она возвращает значение ноль. Если функция завершается ошибкой, так как вызывающий объект передал нулевое значение как TypeAddress, он возвращает значение MEMORY_READ_ERROR (определено в Wdbgexts.h). Если функция завершается ошибкой по какой-либо другой причине, она возвращает код ошибки IG_DUMP_SYMBOL_INFO.
Если StoreAddress равно нулю:
Если функция успешно выполнена, она возвращает значение указанного поля в ранее инициализированной структуре. Структура инициализирована в предыдущем вызове GetShortField. Поле — это поле, указанное параметром имени текущего вызова GetShortField. Возвращаемое значение приведение к ULONG64. Если функция завершается ошибкой, она возвращает нулевое значение.

Замечания

Если GetShortField вызывается с ненулевой StoreAddress значением, оно инициализирует структуру, расположенную по адресу, указанному TypeAddress. Одновременно можно инициализировать только одну структуру. Если GetShortField вызывается несколько раз с ненулевой значением StoreAddress, инициализируется только структура, указанная в последнем вызове. При вызове GetShortField с StoreAddress равно нулю, он обращается к последней инициализированной структуре, считывает в этой структуре поле, указанное имени, и возвращает значение этого поля.

Эту функцию не нужно вызывать напрямую. Макросы InitTypeRead и InitTypeReadPhysical вызовите эту функцию с StoreAddress ненулевым, чтобы подготовить структуру для чтения его членов. Макрос ReadField вызывает эту функцию с StoreAddressTypeAddress) равны нулю, чтобы считывать элементы из структуры.

Примечание, так как эта функция хранит TypeAddress и Name с помощью статических локальных переменных, и так как эта функция определена в WdbgExts.h, предварительная версия C создаст новый экземпляр этой функции для каждой библиотеки DLL, а TypeAddress и Name будет доступен только в одном исходном файле. Другими словами, структура должна быть инициализирована в том же исходном файле, из которого считываются члены.
 
Макросы ReadField и ReadFieldStr считывают поле, размер которого меньше 8 байтов из структуры, инициализированной с InitTypeRead или InitTypeReadPhysical.
#define ReadField(Field) \
    GetShortField(0, #Field, 0)

#define ReadFieldStr(FieldStr) \
    GetShortField(0, FieldStr, 0)

Параметры

Поле fieldFieldStr

возвращаемое значение

Если этот макрос успешно выполнен, он возвращает значение указанного поля в ранее инициализированной структуре. Структура инициализирована в предыдущем вызове InitTypeRead, InitTypeStrRead, InitTypeReadPhysical, InitTypeStrReadPhysicalили GetShortField. Поле — это поле, указанное параметром поля или FieldStrReadField. Возвращаемое значение приведение к ULONG64. Если функция завершается ошибкой, она возвращает нулевое значение.

Параметр Поле — это имя элемента. Для ReadFieldобработчик C превратит параметр в строку. Для ReadFieldStrожидается, что поле уже будет строкой ASCII. Например, следующие две команды идентичны и считывают один и тот же член из ранее инициализированной структуры:

  • ReadField(myField);
  • ReadFieldStr( "myField" );

Вложенные элементы можно считывать с помощью пути, разделенного периодом, например myField.mySubfield.

Примечание Поскольку эти макросы используют функцию GetShortField, они должны вызываться из того же файла исходного кода, что и макросы, инициализировать структуру для чтения. Дополнительные сведения см. в разделе GetShortField.
 
Если вы пишете расширение WdbgExts, включите wdbgexts.h. Если вы пишете расширение DbgEng, которое вызывает эту функцию, включите wdbgexts.h до dbgeng.h (дополнительные сведения см. в записи кода расширения DbgEng).

Макрос InitTypeRead инициализирует структуру, чтобы его члены могли читаться с помощью ReadField.

#define InitTypeRead(
    Addr,
    Type
);

Параметры

Addr

Указывает адрес структуры в виртуальной памяти целевого объекта.

типа

Указывает имя типа структуры. Предварительный процессор C преобразует тип в строку.

Возвращает значение

Если этот макрос выполнен успешно, он возвращает значение ноль. Если он завершается ошибкой, так как вызывающий объект передал нулевое значение как Addr, он возвращает значение MEMORY_READ_ERROR (определено в Wdbgexts.h). Если он завершается ошибкой по какой-либо другой причине, он возвращает код ошибки IG_DUMP_SYMBOL_INFO.

Макросы initTypeReadPhysical и InitTypeStrReadPhysical инициализировать структуру в физической памяти, чтобы ее члены могли считываться с помощью ReadField.

#define InitTypeReadPhysical(
    Addr,
    Type,
    TypeStr
);

Параметры

Addr

Указывает адрес структуры в физической памяти целевого объекта.

типа

Указывает имя типа структуры. Предварительный процессор C преобразует тип в строку.

TypeStr

Указывает имя типа структуры. TypeStr, как ожидается, будет строкой ASCII.

Возвращает значение

Если этот макрос выполнен успешно, он возвращает значение ноль. Если он завершается ошибкой, так как вызывающий объект передал нулевое значение как Addr, он возвращает значение MEMORY_READ_ERROR (определено в Wdbgexts.h). Если он завершается ошибкой по какой-либо другой причине, он возвращает код ошибки IG_DUMP_SYMBOL_INFO.

Макрос InitTypeRead инициализирует структуру, чтобы его члены могли читаться с помощью ReadField.

#define InitTypeRead(
    Addr,
    TypeStr
);

Параметры

Addr

Указывает адрес структуры в виртуальной памяти целевого объекта.

типа

Указывает имя типа структуры. TypeStr, как ожидается, будет строкой ASCII.

Возвращает значение

Если этот макрос выполнен успешно, он возвращает значение ноль. Если он завершается ошибкой, так как вызывающий объект передал нулевое значение как Addr, он возвращает значение MEMORY_READ_ERROR (определено в Wdbgexts.h). Если он завершается ошибкой по какой-либо другой причине, он возвращает код ошибки IG_DUMP_SYMBOL_INFO.

Требования

Требование Ценность
целевая платформа Настольный
заголовка wdbgexts.h (include Wdbgexts.h, Dbgeng.h)

См. также

InitTypeRead

InitTypeReadPhysical

ReadField