Функция 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 структура, указывающая, для чего используется выделение.
Возвращаемое значение
Никакой
Замечания
При вызове эта функция регистрирует событие, описывающее ресурс 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 (include Umdprovider.h) |