Класс ExtRemoteList (engextcpp.hpp)
Класс ExtRemoteList предоставляет оболочку вокруг списка, связанного по отдельности или вдвойне связанного списка. Класс содержит методы, которые можно использовать для перемещения вперед и назад по списку.
ExtRemoteList поддерживает как завершаемые null, так и циклические списки.
ExtRemoteList ожидает, что список будет реализован так, как в nt-версиях Windows реализуется список. Кроме того, предполагается, что в списке используется структура SINGLE_LIST_ENTRY или LIST_ENTRY. В частности, ExtRemoteList ожидает, что списки будут иметь следующие характеристики:
- Список содержит голову. Головка представляет начало (а для циклических и дважды связанных списков — конец) списка и не является элементом списка. Тип головы — SINGLE_LIST_ENTRY или LIST_ENTRY.
- Указатель на следующий элемент в списке указывает на указатель на следующий элемент. Иными словами, указатель на следующий элемент указывает на SINGLE_LIST_ENTRY или LIST_ENTRY структуру, внедренную в следующий элемент.
- Для списков с двойной связью указатель на предыдущий элемент в списке указывает на указатель на текущий элемент. Иными словами, указатель на предыдущий элемент указывает на LIST_ENTRY структуру, внедренную в предыдущий элемент.
- Для списков с двойной связью указатель на предыдущий элемент сразу же следует за указателем на следующий элемент. Это соответствует макету структуры LIST_ENTRY в памяти.
Класс ExtRemoteList включает следующие методы:
class ExtRemoteList
{
public:
ULONG64 m_Head;
ULONG m_LinkOffset;
bool m_Double;
ULONG m_MaxIter;
ExtRemoteData m_Node;
ULONG m_CurIter;
};
- m_Head
- Расположение заголовка списка в памяти целевого объекта.
- m_LinkOffset
- Смещение SINGLE_LIST_ENTRY или LIST_ENTRY структур, внедренных в элементы списка.
- m_Double
-
true
для списка с двойной связью.false
для единого связанного списка. - m_MaxIter
- Максимальное количество узлов, которые могут быть возвращены при переборе списка. Значение по умолчанию m_MaxIter равно 65536. Ограничение количества узлов, которые могут быть возвращены в итерации, защищает от циклов.
- m_Node
- Указатель на текущий элемент в списке. m_Node не устанавливается, пока итерация не инициализирована с помощью StartHead или StartTail. m_Node имеет тип ExtRemoteData, который описывает указатель.
- m_CurIter
- Количество шагов, выполненных в текущей итерации списка. Для списков с двойной связью m_CurIter увеличивается для шагов вперед и назад.
Методы
Класс ExtRemoteList содержит следующие методы.
ExtRemoteList::ExtRemoteList Конструкторы ExtRemoteList(ExtRemoteData&,ULONG,bool) создают новый экземпляр, который создает оболочку для списка с отдельной или двойной привязкой. |
ExtRemoteList::ExtRemoteList Конструкторы ExtRemoteList(ULONG64,ULONG,bool) создают новый экземпляр, который создает оболочку для списка, связанного по отдельности или вдвойне связанного списка. |
ExtRemoteList::GetNodeOffset Метод GetNodeOffset возвращает адрес текущего элемента списка. |
ExtRemoteList::HasNode Метод HasNode определяет, есть ли текущий элемент в итерации списка. |
ExtRemoteList::Next Метод Next изменяет текущий элемент на следующий элемент в списке. |
ExtRemoteList::P rev Метод Prev изменяет текущий элемент на предыдущий элемент в списке. |
ExtRemoteList::StartHead Метод StartHead инициализирует список для перебора вперед, начиная с головы. |
ExtRemoteList::StartTail Метод StartTail инициализирует список для итерации назад, начиная с заголовка. |
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | engextcpp.hpp (включая Engextcpp.hpp) |