Функция UMDEtwLogUnmapAllocation (umdprovider.h)
Указывает, что подсистема графического ядра Microsoft DirectX (Dxgkrnl.sys) или часть выделения памяти больше не используется. Вызовите эту функцию независимо от того, уничтожается ли выделение.
Синтаксис
void UMDEtwLogUnmapAllocation(
ULONGLONG hD3DAllocation,
ULONGLONG hDxgAllocation,
ULONGLONG Offset,
ULONGLONG Size,
UMDETW_ALLOCATION_USAGE Usage,
UMDETW_ALLOCATION_SEMANTIC Semantic
);
Параметры
hD3DAllocation
Дескриптор выделения Direct3D.
Для драйверов режима пользователя Direct3D 10 дескриптором будет значение параметра hResource функции CreateResource(D3D10). Для драйверов в режиме пользователя Direct3D 9 дескриптором будет значение параметра pResource , возвращаемое драйвером в функции CreateResource .
Драйвер может присвоить этому значению значение NULL , если он использует внутренние выделения.
hDxgAllocation
Дескриптор выделения подсистемы ядра графики DirectX (Dxgkrnl.sys), с которым сопоставляется выделение Direct3D.
Offset
Начальный адрес в байтах выделения Direct3D в пределах выделения Dxgkrnl.
Size
Размер в байтах выделения Direct3D в пределах выделения Dxgkrnl.
Usage
Структура UMDETW_ALLOCATION_USAGE , указывающая причину этого сопоставления.
Semantic
Если выделение используется внутренним драйвером пользовательского режима, это UMDETW_ALLOCATION_SEMANTIC структура, которая указывает, для чего используется выделение.
Возвращаемое значение
None
Remarks
При вызове эта функция регистрирует событие, описывающее, для какого ресурса API используется выделение. Если с выделением не связан ни ресурс API, функция регистрирует событие, описывающее назначение, указанное драйвером для этого выделения.
Драйвер дисплея пользовательского режима должен полностью учитывать выделенную видеопамяти, поэтому он должен вызывать эту функцию, чтобы регистрировать событие при каждом изменении выделения.
Драйвер должен передать те же значения параметров в UMDEtwLogUnmapAllocation , что и в UMDEtwLogMapAllocation.
UMDEtwLogUnmapAllocation определяется в Umdprovider.h как:
FORCEINLINE void LogMapAllocation(BOOLEAN Enter,
ULONGLONG hD3DAllocation,
ULONGLONG hDxgAllocation,
ULONGLONG Offset,
ULONGLONG Size,
UMDETW_ALLOCATION_USAGE Usage,
UMDETW_ALLOCATION_SEMANTIC Semantic)
{
if (Enabled)
{
EVENT_DATA_DESCRIPTOR Descriptors[6];
// Create a description of the event
EventDataDescCreate(&Descriptors[0], &hD3DAllocation, 8);
EventDataDescCreate(&Descriptors[1], &hDxgAllocation, 8);
EventDataDescCreate(&Descriptors[2], &Offset, 8);
EventDataDescCreate(&Descriptors[3], &Size, 8);
EventDataDescCreate(&Descriptors[4], &Usage, 4);
EventDataDescCreate(&Descriptors[5], &Semantic, 4);
// Log the event
EventWrite(
RegHandle,
Enter ? (InRundown ? &RundownAllocationEvent : &MapAllocationEvent) : &UnmapAllocationEvent,
sizeof(Descriptors) / sizeof(Descriptors[0]),
Descriptors
);
}
}
FORCEINLINE void UMDEtwLogUnmapAllocation(ULONGLONG hD3DAllocation,
ULONGLONG hDxgAllocation,
ULONGLONG Offset,
ULONGLONG Size,
UMDETW_ALLOCATION_USAGE Usage,
UMDETW_ALLOCATION_SEMANTIC Semantic)
{
LogMapAllocation(FALSE,
hD3DAllocation,
hDxgAllocation,
Offset,
Size,
Usage,
Semantic);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 |
Минимальная версия сервера | Windows Server 2012 |
Целевая платформа | Персональный компьютер |
Верхняя часть | umdprovider.h (включая Umdprovider.h) |