当前位置: 首页 > news >正文

window显示驱动开发-验证从用户模式发送到内核模式的专用数据

显示微型端口驱动程序必须验证从用户模式显示驱动程序发送的所有专用数据,以防止微型端口驱动程序崩溃、不响应 (挂起) 、断言或损坏内存(如果私有数据无效)。 但是,由于操作系统重置了“挂起”的硬件,因此显示微型端口驱动程序可以将指令发送到导致 GPU“挂起”的图形处理单元 (GPU) 。私有数据可以包括以下任一项:

1.命令缓冲区内容发送到微型端口驱动程序的 DxgkDdiRender 或 DXGKARG_RENDER 结构的 pCommand 缓冲区成员中的 DxgkDdiRenderKm 函数。

其中 DXGKARG_RENDER 结构定义如下:

typedef struct _DXGKARG_RENDER {[in]     const VOID               *pCommand;[in]     UINT                     CommandLength;[out]    VOID                     *pDmaBuffer;[in]     UINT                     DmaSize;[in]     VOID                     *pDmaBufferPrivateData;[in]     UINT                     DmaBufferPrivateDataSize;[in]     DXGK_ALLOCATIONLIST      *pAllocationList;[in]     UINT                     AllocationListSize;[in]     D3DDDI_PATCHLOCATIONLIST *pPatchLocationListIn;[in]     UINT                     PatchLocationListInSize;[in/out] D3DDDI_PATCHLOCATIONLIST *pPatchLocationListOut;[in]     UINT                     PatchLocationListOutSize;[in/out] UINT                     MultipassOffset;[in]     UINT                     DmaBufferSegmentId;[in]     PHYSICAL_ADDRESS         DmaBufferPhysicalAddress;
} DXGKARG_RENDER;

DXGKARG_RENDER结构描述用于从命令缓冲区生成直接内存访问(DMA)缓冲区的成员。

[in] pCommand: 指向命令缓冲区开头的指针。

注意 调用 dxgkDdiRender 时,显示微型端口驱动程序必须验证缓冲区。 有关驱动程序应如何访问此成员的重要信息,请参阅 dxgkDdiRender 中的备注。

[in] CommandLength:pCommand 指向的命令缓冲区的大小(以字节为单位)。

[out] pDmaBuffer:指向 DMA 缓冲区开头的指针,该缓冲区在 4 KB 上对齐。 可以通过 DMA 将此缓冲区发送到图形硬件。 在显示微型端口驱动程序从 DxgkDdiRender 或 DxgkDdiRenderKm 函数返回之前,驱动程序应将 pDmaBuffer 设置为驱动程序写入的最后一个字节之后的下一个空字节,或者驱动程序应指向位置(缓冲区空间之外的一个字节),前提是没有更多空间可用。 如果缓冲区足够大,则此位置是正确的。

[in] DmaSize:pDmaBuffer 指向的 DMA 缓冲区的大小(以字节为单位)。

[in] pDmaBufferPrivateData:指向驱动程序驻留的专用数据结构的指针,该结构用于生成 pDmaBuffer 指向的 DMA 缓冲区。

[in] DmaBufferPrivateDataSize:pDmaBufferPrivateData 指向当前作的专用数据结构中保留的字节数。

[in] pAllocationList:DMA 缓冲区引用的分配列表的 DXGK_ALLOCATIONLIST 结构的数组。 应显示引用的每个分配一次,以获得最佳性能。

[in] AllocationListSize:pAllocationList 数组中的可用元素数,表示要通过 DMA 发送到图形硬件的分配规范数。

[in] pPatchLocationListIn:用户模式显示驱动程序在调用 pfnRenderCb 函数时提供的修补程序位置列表 D3DDDI_PATCHLOCATIONLIST 结构数组。

注意 调用 dxgkDdiRender 时,显示微型端口驱动程序必须验证缓冲区。 

[in] PatchLocationListInSize:pPatchLocationListIn 指定的修补程序位置列表中的元素数。

[in/out] pPatchLocationListOut:显示微型端口驱动程序填充的修补程序位置列表 D3DDDI_PATCHLOCATIONLIST 结构的数组。 在驱动程序从调用其 DxgkDdiRender 或 DxgkDdiRenderKm 函数返回之前,驱动程序必须将 pPatchLocationListOut 设置为驱动程序更新的最后一个 D3DDDI_PATCHLOCATIONLIST 元素后面的下一个 D3DDDI_PATCHLOCATIONLIST 元素。

[in] PatchLocationListOutSize:pPatchLocationListOut 指定的修补程序位置列表中的元素数。 显示微型端口驱动程序不需要填充整个列表中的所有元素;驱动程序只能使用描述 DMA 缓冲区中修补程序位置所必需的元素。

[in/out] MultipassOffset:如果显示微型端口驱动程序的 DxgkDdiRender 或 DxgkDdiRenderKm 函数必须返回 STATUS_GRAPHICS_INSUFFICIENT_DMA_BUFFER 以获取新的 DMA 缓冲区,则指定呈现作的 UINT 值。 当驱动程序的 DxgkDdiRender 或 DxgkDdiRenderKm 函数首次使用新的命令缓冲区调用时,MultipassOffset 初始化为零。 在驱动程序从 DxgkDdiRender 或 DxgkDdiRenderKm 调用返回之前,驱动程序将设置此成员以显示后续 DxgkDdiRender 或 DxgkDdiRenderKm 调用的转换进度。 DirectX 图形内核子系统不会进一步更改该值。

[in] DmaBufferSegmentId:分页 DMA 缓冲区的内存段的标识符。 如果标识符为零,则 DMA 缓冲区未正确分页。

[in] DmaBufferPhysicalAddress:PHYSICAL_ADDRESS 数据类型(定义为 LARGE_INTEGER),指示 DMA 缓冲区在其中分页的物理地址。 如果物理地址为零,则 DMA 缓冲区未正确分页。

2. 发送到以下微型端口驱动程序函数的数据:

  • DXGKARG_CREATEALLOCATION 和DXGK_ALLOCATIONINFO 结构的 pPrivateDriverData 缓冲区成员中的 DxgkDdiCreateAllocation 函数。
  • DXGKARG_ESCAPE 结构的 pPrivateDriverData 缓冲区成员中的 DxgkDdiEscape 函数。
  • DXGKARG_ACQUIRESWIZZLINGRANGE 结构的 PrivateDriverData 32 位成员中的 DxgkDdiAcquireSwizzlingRange 函数。
  • DXGKARG_RELEASESWIZZLINGRANGE 结构的PrivateDriverData 32 位成员中的 DxgkDdiReleaseSwizzlingRange 函数。
  • 在 Type 成员中指定DXGKQAITYPE_UMDRIVERPRIVATE值时,DXGKARG_QUERYADAPTERINFO 结构的 pInputData 缓冲区成员中的 DxgkDdiQueryAdapterInfo 函数。
http://www.dtcms.com/a/454152.html

相关文章:

  • 网站建设 中企动力南昌0792在线购物网站 模版
  • 凡科网站设计模板品牌网站分析
  • 【Spring 2】深入剖析 Spring 的 Singleton 作用域:不仅仅是单例
  • 【密码学实战】openHiTLS kdf命令行:密钥派生工具
  • 手机网站微信网站开发南京米雅途做网站如何
  • AQS(抽象队列同步器)
  • 【深度学习计算机视觉】10:转置卷积——从图像上采样到特征图还原的核心技术
  • 做坑人网站二维码全网热度指数
  • 购物网站设计的目的新绛网站建设
  • ERT中正问题和逆问题的传统数学推导
  • 模电基础:电流源电路
  • 58同城济南网站建设网站建设公司人员配置
  • 山西品牌网站建设什么网站上做效果图可以赚钱
  • 尚庭公寓中Redis的使用
  • 网站建设服务采购方案惠阳网站优化
  • Python 学习(2) ---- Python 数据类型
  • 三更app下载网站衡阳网站设计
  • 语言结构的基本单位:语素、词根与词缀
  • 线程邮箱(1)
  • 【深入理解计算机系统第3版】浮点数舍入和在不同位模式下的变换2.52
  • 有了域名和空间怎么做网站网站怎么做下拉刷新
  • 【完整源码+数据集+部署教程】 水果叶片分割系统: yolov8-seg-dyhead
  • 前端如何做双语网站wordpress缓存插件汉化破解版
  • Python回调函数中携带额外状态的完整指南:从基础到高级实践
  • 郑州的设计公司企业网站建设推荐乐云seo
  • OpenAI 推出 ChatGPT 应用系统,开发者可在平台内构建互动式应用
  • 【Coze】1.Coze 的基本介绍
  • 字符串比较函数strcmp和strncmp以及memcmp详解与对比分析
  • linux练习-2
  • 大连做网站首选领超科技35互联做的网站