Использование объектов общей платформы
Общий объект платформы — это объект платформы, от которого происходят все остальные типы объектов платформы.
Как и другие объекты платформы, общие объекты поддерживают количество ссылок, контекстное пространство, функции обратного вызова удаления и родительский объект, как описано в разделе Введение в объекты платформы.
Драйверы могут создавать и использовать общие объекты платформы. Если драйвер вызывает WdfObjectCreate для создания общих объектов, драйвер может:
Создайте одно или несколько контекстных пространств для каждого общего объекта.
Пространство контекста объекта можно использовать для хранения сведений о системных ресурсах, которые необходимо связать с общим объектом.
Дополнительные сведения о контекстном пространстве см. в разделе Пространство контекста объектов платформы.
Назначьте родительский объект общему объекту.
Общий объект будет удален при удалении родительского объекта. Например, если драйвер указывает объект устройства платформы в качестве родительского объекта одного из своих общих объектов, платформа удалит общий объект при удалении объекта устройства.
Драйверы задают родительский объект объекта, задавая элемент ParentObjectструктуры WDF_OBJECT_ATTRIBUTES объекта.
Предоставьте функции обратного вызова удаления.
Драйвер может предоставлять функции EvtCleanupCallback и EvtDegradCallback , которые могут освободить системные ресурсы, выделенные драйвером при создании общего объекта. Например, если драйвер с именем ExAllocatePool при создании общего объекта, функция обратного вызова очистки или уничтожения может вызвать ExFreePool.
Использование общих объектов может быть удобным способом управления ресурсами, выделенными драйвером. Например, драйверу более высокого уровня может потребоваться несколько выделений памяти для обработки полученного запроса ввода-вывода, если драйвер отправляет запрос на несколько устройств или разбивает запрос на несколько небольших. Драйвер может создать один или несколько общих объектов, которые являются дочерними элементами полученного запроса ввода-вывода, и может хранить сведения о выделении памяти в контекстном пространстве общих объектов.