Класс ExtRemoteList (engextcpp.hpp)

Класс ExtRemoteList предоставляет оболочку вокруг последовательно связанного списка или вдвойне связанного списка. Класс содержит методы, которые можно использовать для перемещения как вперед, так и обратно через список.

ExtRemoteList поддерживает как завершенные, так и циклические списки NULL.

ExtRemoteList ожидает, что список реализуется так, как в nt-версиях Windows реализуется список. Он также ожидает, что в списке используется структура SINGLE_LIST_ENTRY или LIST_ENTRY. В частности, ExtRemoteList ожидает, что списки имеют следующие характеристики:

  1. Список содержит голову. Голова представляет начало (и для циклических и вдвойне связанных списков, конец) списка и не является элементом списка. Тип головы — SINGLE_LIST_ENTRY или LIST_ENTRY.
  2. Указатель на следующий элемент в списке указывает на указатель на следующий элемент. Другими словами, указатель на следующий элемент указывает на структуру SINGLE_LIST_ENTRY или LIST_ENTRY, внедренную в следующий элемент.
  3. Для вдвойне связанных списков указатель на предыдущий элемент в списке указывает указатель на текущий элемент. Другими словами, указатель на предыдущий элемент указывает на структуру LIST_ENTRY, внедренную в предыдущий элемент.
  4. Для двояковых списков указатель на предыдущий элемент сразу же следует указателю на следующий элемент. Это соответствует макету структуры LIST_ENTRY в памяти.
Дополнительные сведения о структурах SINGLE_LIST_ENTRY и LIST_ENTRY и их использовании см. в документации по комплекту драйверов Windows (WDK).

Класс ExtRemoteList включает следующие методы:

ExtRemoteList::ExtRemoteList (ExtRemoteData)

ExtRemoteList::ExtRemoteList (ULONG64)

начальной

StartTail

HasNode

GetNodeOffset

следующее

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)

См. также

ExtRemoteData

начальной

StartTail