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 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | dispmprt.h (包括 Dispmprt.h) |
IRQL | PASSIVE_LEVEL |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈