DXGKCB_MAP_MEMORY回调函数 (dispmprt.h)
DxgkCbMapMemory 函数将一系列已转换的物理地址 (与分配给显示适配器的内存资源相关联,) 映射到系统空间或用户模式进程的虚拟地址空间。
语法
DXGKCB_MAP_MEMORY DxgkcbMapMemory;
NTSTATUS DxgkcbMapMemory(
[in] HANDLE DeviceHandle,
[in] PHYSICAL_ADDRESS TranslatedAddress,
[in] ULONG Length,
[in] BOOLEAN InIoSpace,
[in] BOOLEAN MapToUserMode,
[in] MEMORY_CACHING_TYPE CacheType,
[out] PVOID *VirtualAddress
)
{...}
参数
[in] DeviceHandle
表示显示适配器的句柄。 显示微型端口驱动程序以前在传递给 DxgkDdiStartDevice的 DXGKRNL_INTERFACE 结构的 DeviceHandle 成员中获取此句柄。
[in] TranslatedAddress
要映射的内存范围的基本转换物理地址。 显示微型端口驱动程序以前通过调用 DxgkCbGetDeviceInformation 获取此地址。
[in] Length
要映射的范围的大小(以字节为单位)。
[in] InIoSpace
一个布尔值,指定范围是在 I/O 空间中 (TRUE) 还是内存空间 (FALSE) 。
[in] MapToUserMode
一个布尔值,指定范围是映射到用户模式空间还是系统空间。 如果 为 TRUE,则范围映射到当前进程的 (用户模式) 虚拟地址空间中。 如果 为 FALSE,则范围将映射到系统空间中。 如果 InIoSpace 为 TRUE,则忽略此参数。
[in] CacheType
指定映射范围的缓存行为的 MEMORY_CACHING_TYPE 枚举器。
[out] VirtualAddress
指向变量的指针,该变量接收映射范围开头的地址。 访问映射范围的方式取决于 InIoSpace 和 MapToUserMode 的值。 下表总结了访问映射范围的不同方式。
InIoSpace 的值 | MapToUserMode 为 FALSE | MapToUserMode 为 TRUE |
---|---|---|
FALSE | READ_REGISTER_X WRITE_REGISTER_X | 用户模式代码执行普通内存访问。 |
TRUE | READ_PORT_X WRITE_PORT_X | 不可能。 |
返回值
如果成功,DxgkCbMapMemory 将返回STATUS_SUCCESS。 否则,它将返回 Ntstatus.h 中定义的错误代码之一。
注解
PHYSICAL_ADDRESS数据类型在 Ntdef.h 中定义。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
目标平台 | 桌面 |
标头 | dispmprt.h (包括 Dispmprt.h) |
IRQL | PASSIVE_LEVEL |