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,范围将映射到系统空间。 如果 InIoSpaceTRUE,则忽略此参数。
[in] CacheType
一个指定映射范围的缓存行为的 MEMORY_CACHING_TYPE 枚举器。
[out] VirtualAddress
指向接收映射范围的开头地址的变量的指针。 访问映射范围的方式取决于 InIoSpace 和 MapToUserMode的值。 下表总结了访问映射范围的不同方式。
InIoSpace 的值 | MapToUserMode 为 FALSE | MapToUserMode 为 TRUE |
---|---|---|
假 | READ_REGISTER_X WRITE_REGISTER_X | 用户模式代码执行普通内存访问。 |
真 | READ_PORT_X WRITE_PORT_X | 不可能。 |
返回值
DxgkCbMapMemory 如果成功,则返回STATUS_SUCCESS。 否则,它将返回 Ntstatus.h中定义的错误代码之一。
言论
PHYSICAL_ADDRESS数据类型在 Ntdef.h中定义。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista |
目标平台 | 桌面 |
标头 | dispmprt.h (包括 Dispmprt.h) |
IRQL | PASSIVE_LEVEL |