Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс 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 не задан, пока итерация не инициализирована с помощью начальной или StartTail. m_Node имеет тип ExtRemoteData, описывающий указатель.
- m_CurIter
- Количество шагов, выполненных в текущей итерации списка. Для двухуровневых списков m_CurIter увеличивается как для переадресации, так и для обратных шагов.
Методика
Класс ExtRemoteList имеет эти методы.
|
ExtRemoteList::ExtRemoteList Конструкторы ExtRemoteList(ExtRemoteData&,ULONG,bool) создают новый экземпляр, который заключает в себя список, связанный с singly или вдвойне связанного списка. |
|
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 инициализирует список для итерации назад, начиная с головы. |
Требования
| Требование | Ценность |
|---|---|
| целевая платформа | Виндоус |
| заголовка | engextcpp.hpp (include Engextcpp.hpp) |