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


Класс 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 не устанавливается, пока итерация не инициализирована с помощью 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)

См. также раздел

ExtRemoteData

Начальная часть

StartTail