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

公司网站数媒设计制作c2c电商网站

公司网站数媒设计制作,c2c电商网站,做网站毕业设计,做电脑网站手机能显示这部分的技术是一些零散的记录知识点#xff0c;它们主要是在WDF框架中特定于KMDF的部分。 将内核模式驱动程序框架和非 PnP 驱动程序配合使用 如果要为不支持 即插即用 (PnP) 的设备编写驱动程序#xff0c;则驱动程序必须#xff1a; 在 WDF_DRIVER_CONFIG 结构的 Driv…这部分的技术是一些零散的记录知识点它们主要是在WDF框架中特定于KMDF的部分。 将内核模式驱动程序框架和非 PnP 驱动程序配合使用 如果要为不支持 即插即用 (PnP) 的设备编写驱动程序则驱动程序必须 在 WDF_DRIVER_CONFIG 结构的 DriverInitFlags 成员中设置 WdfDriverInitNonPnpDriver 标志提供 EvtDriverUnload 事件回调函数创建仅表示控制设备对象的框架 设备对象 如果设备不支持 PnP则驱动程序 不提供EvtDriverDeviceAdd 回调函数。 相反驱动程序必须确定其设备是否存在。 安装非 PnP 驱动程序 如果 KMDF 驱动程序支持Windows 10上的非即插即用 (PnP) 设备请使用与非 PnP 驱动程序示例中所示相同的方法但删除对 INF 文件和共同安装程序的引用。 例如不需要以下内容 #define NONPNP_INF_FILENAME L\\nonpnp.inf #define WDF_SECTION_NAME Lnonpnp.NT.WdfLoadWdfCoInstaller UnloadWdfCoInstallerPFN_WDFPREDEVICEINSTALLEX pfnWdfPreDeviceInstallEx; PFN_WDFPOSTDEVICEINSTALL pfnWdfPostDeviceInstall; PFN_WDFPREDEVICEREMOVE pfnWdfPreDeviceRemove; PFN_WDFPOSTDEVICEREMOVE pfnWdfPostDeviceRemove; 对于非 PnP KMDF 驱动程序只需调用 SCM API 来创建服务。  保证向前推进 I/O 操作 某些驱动程序例如系统分页设备的存储驱动程序必须至少执行一些受支持的 I/O 操作而不会失败以避免丢失关键系统数据。 驱动程序故障的一个潜在原因是内存不足的情况。 如果框架或驱动程序无法分配足够的内存来处理 I/O 请求则其中一个或另一个可能需要通过错误状态值 完成 I/O 请求来使 I/O 请求失败。 在版本 1.9 之前的 KMDF 版本中如果框架无法为 I/O 请求数据包分配框架请求对象 I/O 管理器已发送到驱动程序的 I/O框架始终会失败 I/O 请求。 为了使驱动程序能够在内存不足的情况下处理 I/O 请求框架版本 1.9 及更高版本为 I/O 队列提供了 有保证的向前进度 功能。 此功能使框架和驱动程序能够分别为请求对象集和与请求相关的驱动程序上下文缓冲区预先分配内存。 仅当系统内存量较低时框架和驱动程序才使用此预分配的内存。 保证向前进度的功能 通过使用框架保证的 I/O 队列向前进度驱动程序可以 要求框架预先分配一组请求对象以在内存不足的情况下用于特定的 I/O 队列提供一个回调函数用于预分配特定于请求的资源驱动程序在内存不足的情况下从框架接收预分配的请求对象时可以使用这些资源提供另一个回调函数用于在 未检测到内存不足的情况时为 I/O 请求分配特定于驱动程序的资源。 如果此回调函数的分配由于内存不足而失败它可以指示框架是否应使用其预分配的请求对象之一指定哪些 I/O 请求需要使用预分配的请求对象。 选项包括为所有 IRP 使用预分配的对象、仅在分页 I/O 操作正在进行时使用它们或让其他驱动程序回调函数检查每个 IRP 以确定是否使用预分配的对象 如果驱动程序对其一个或多个 I/O 队列实现了有保证的向前进度则驱动程序将能够更好地在内存不足的情况下成功 处理 I/O 请求 。 你可以为设备的默认 I/O 队列以及驱动程序通过调用 WdfDeviceConfigureRequestDispatching 配置的任何 I/O 队列实现有保证的向前进度。 只有当驱动程序和驱动程序的 I/O 目标 都实现有保证的前进进度时框架的有保证向前进度功能才适用于驱动程序。 换句话说如果驱动程序为设备实现有保证的向前进度则设备驱动程序堆栈中的所有较低级别驱动程序也必须实现有保证的向前进度。 为 I/O 队列启用有保证的向前进度 若要为 I/O 队列启用有保证的向前进度驱动程序会初始化 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 结构然后调用 WdfIoQueueAssignForwardProgressPolicy 方法。 如果驱动程序调用 WdfDeviceConfigureRequestDispatching 来配置 I/O 队列则必须在调用 WdfIoQueueAssignForwardProgressPolicy 之前执行此操作。 当驱动程序调用 WdfIoQueueAssignForwardProgressPolicy 时它可以指定以下三个事件回调函数所有这些函数都是可选的 EvtIoAllocateResourcesForReservedRequest驱动程序的 EvtIoAllocateResourcesForReservedRequest 回调函数为框架在内存不足的情况下保留的请求对象分配和存储特定于请求的资源。框架每次创建保留请求对象时都会调用此回调函数。 驱动程序应为一个 I/O 请求分配特定于请求的资源通常使用保留的请求对象的 上下文空间EvtIoAllocateRequestResources驱动程序的 EvtIoAllocateRequestResources 回调函数分配特定于请求的资源以供立即使用。 在框架收到 IRP 并为 IRP 创建请求对象后将立即调用它。如果回调函数分配资源的尝试失败回调函数将返回错误状态值。 然后框架删除新创建的请求对象并使用其保留的请求对象之一。 反过来驱动程序 的请求处理程序 使用其 EvtIoAllocateRequestResources 回调函数之前分配的特定于请求的资源EvtIoWdmIrpForForwardProgress驱动程序的 EvtIoWdmIrpForForwardProgress 回调函数检查 IRP并告知框架是使用 IRP 的保留请求对象还是通过错误状态值完成 I/O 请求来使该请求失败 仅当框架无法创建新的请求对象并且你通过在驱动程序的 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY结构中 设置标志来指示 希望驱动程序在内存不足的情况下检查 IRP 时框架才会调用此回调函数。 换句话说驱动程序可以评估每个 IRP并确定它是否是即使在内存不足的情况下也必须处理的 IRP。 当驱动程序调用 WdfIoQueueAssignForwardProgressPolicy 时它还指定你希望框架针对内存不足的情况预先分配的保留请求对象数。 可以选择适合你的设备和驱动程序的请求对象数。 为防止性能降低驱动程序通常应指定一个数字该数字近似于驱动程序和设备可以并行处理的 I/O 请求数。 但是如果驱动程序调用 WdfIoQueueAssignForwardProgressPolicy 及其 EvtIoAllocateResourcesForReservedRequest 回调函数预先分配了过多的保留请求对象或过多特定于请求的资源内存则驱动程序实际上可能会导致尝试处理的内存不足的情况。 应测试驱动程序和设备的性能并包括低内存模拟以确定要选择的最佳数字。 在 WdfIoQueueAssignForwardProgressPolicy 返回之前框架会创建并保留驱动程序指定的请求对象数。 每次保留请求对象时框架都会立即调用驱动程序的 EvtIoAllocateResourcesForReservedRequest 回调函数以便在框架实际使用保留请求对象的情况下驱动程序可以分配和保存特定于请求的资源。 当某个驱动程序 的请求处理程序 从 I/O 队列接收 I/O 请求时它可以调用 WdfRequestIsReserved 方法以确定请求对象是否是框架针对内存不足情况预先分配的请求对象。 如果此方法返回 TRUE则驱动程序应使用其 EvtIoAllocateResourcesForReservedRequest 回调函数保留的资源。 如果框架使用其保留请求对象之一则会在驱动程序完成请求后将对象返回到其保留对象集。 框架保存请求对象以及驱动程序通过调用 WdfDeviceInitSetRequestAttributes 或 WdfObjectAllocateContext 创建的任何上下文空间以便在出现另一个内存不足的情况时重复使用。 框架和驱动程序支持如何保证向前推进 以下是驱动程序和框架为支持 I/O 队列的有保证向前进度而执行的步骤 1. 驱动程序调用 WdfIoQueueAssignForwardProgressPolicy。 作为响应框架分配并存储驱动程序指定的请求对象数。 如果驱动程序以前调用 了 WdfDeviceInitSetRequestAttributes则每个分配包括 WdfDeviceInitSetRequestAttributes 指定的上下文空间。 此外如果驱动程序提供了 EvtIoAllocateResourcesForReservedRequest 回调函数则框架会在每次分配和存储请求对象时调用回调函数。 2. 框架接收 I/O 请求数据包 (IRP) I/O 管理器发送到驱动程序。 框架尝试为 IRP 分配请求对象。 如果驱动程序为请求类型创建的 I/O 队列支持保证向前进度则下一步取决于分配是成功还是失败 请求对象分配成功如果驱动程序提供了 EvtIoAllocateRequestResources 回调函数框架将调用它。 如果回调函数返回STATUS_SUCCESS框架会将请求添加到 I/O 队列。 如果回调函数返回错误状态值框架将删除它刚刚创建的请求对象并使用其预分配的请求对象之一。 当驱动程序的请求处理程序收到请求对象时它会确定请求对象是否已预先分配因此是否应使用驱动程序的预分配资源。如果驱动程序 未 提供 EvtIoAllocateRequestResources 回调函数框架会将请求添加到 I/O 队列就像驱动程序未启用有保证的向前进度一样。 请求对象分配失败框架接下来执行的操作取决于驱动程序为 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 结构的 ForwardProgressReservedPolicy 成员提供的值。 此成员通知框架何时使用保留请求始终仅当 I/O 请求是分页 I/O 操作时或仅当 EvtIoWdmIrpForwardProgress 回调函数指示应使用保留请求时。 在所有情况下驱动程序的请求处理程序都可以调用 WdfRequestIsReserved 来确定框架是否使用了保留的请求对象。 如果是这样驱动程序应使用其 EvtIoAllocateResourcesForReservedRequest 回调函数分配的请求资源。 保证向前进度方案 你正在为可能包含系统分页文件的存储设备编写驱动程序。 从分页文件读取操作和写入操作成功非常重要。 你决定为读取和写入操作创建单独的 I/O 队列并为这两个 I/O 队列启用有保证的向前进度。 你决定为所有其他请求类型创建第三个 I/O 队列但不启用有保证的向前进度。 驱动程序堆栈和设备能够并行处理四个写入操作因此在调用 WdfIoQueueAssignForwardForwardProgressPolicy 之前请将 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 结构的 TotalForwardProgressRequests 成员设置为 4。 你决定仅当驱动程序的设备是分页设备时才保证向前进度很重要因此驱动程序将WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY结构的 ForwardProgressReservedPolicy 成员设置为 WdfIoForwardProgressReservedPolicyPagingIO。 由于驱动程序需要每个读取请求和每个写入请求的框架内存对象因此你决定驱动程序应预先分配一些内存对象以便在内存不足的情况下用于调用 WdfIoTargetFormatRequestForRead 和 WdfIoTargetFormatRequestForWrite 。 因此驱动程序为读取队列提供 EvtIoAllocateResourcesForReservedRequest 回调函数为写入队列提供另一个回调函数。 每次框架调用其中一个回调函数时回调函数都会调用 WdfMemoryCreate 并保存返回的对象句柄以应对内存不足的情况。 因为回调函数接收预分配的请求对象的句柄所以它可以将内存对象父级给请求对象。 DMA 设备的驱动程序也可能预先分配 框架 DMA 对象。 读取和写入队列 的请求处理程序 必须确定每个接收的请求对象是否为框架为内存不足的情况保留的对象。 请求处理程序可以调用 WdfRequestIsReserved也可以将请求对象句柄与 EvtIoAllocateResourcesForReservedRequest 回调函数之前收到的句柄进行比较。 该驱动程序还为读取队列提供 EvtIoAllocateRequestResources 回调函数并为写入队列提供另一个回调函数。 框架在收到来自 I/O 管理器的读取或写入请求并成功创建请求对象时调用其中一个回调函数。 其中每个回调函数调用 WdfMemoryCreate 为请求分配内存对象。 如果分配失败回调函数将返回错误状态值以通知框架刚刚出现内存不足的情况。 框架检测错误返回值删除刚刚创建的请求对象并使用其预分配的对象之一。 此驱动程序不提供 EvtIoWdmIrpForForwardProgress 回调函数因为它不需要在框架将其添加到 I/O 队列之前检查单个读取或写入 IRP。 请记住当驱动程序为设备实现有保证的向前进度时设备驱动程序堆栈中的所有较低级别驱动程序也必须实现有保证的向前进度。 完成 I/O 请求时指定优先级提升 当驱动程序完成 I/O 请求时它可以调用 WdfRequestCompleteWithPriorityBoost 以指定系统用于提高请求 I/O 操作的线程的运行时优先级的值。 如果驱动程序调用 WdfRequestComplete 或 WdfRequestCompleteWithInformation 而不是 WdfRequestCompleteWithPriorityBoost框架将使用基于设备类型的默认优先级提升值。 下表列出了框架使用的默认优先级提升值。 设备类型和优先级提升常量在 Wdm.h 中定义。 设备类型默认优先级提升FILE_DEVICE_UNDEFINEDIO_NO_INCREMENTFILE_DEVICE_BEEPIO_NO_INCREMENTFILE_DEVICE_CD_ROMIO_CD_ROM_INCREMENTFILE_DEVICE_CD_ROM_FILE_SYSTEMIO_CD_ROM_INCREMENTFILE_DEVICE_CONTROLLERIO_NO_INCREMENTFILE_DEVICE_DATALINKIO_NO_INCREMENTFILE_DEVICE_DFSIO_NO_INCREMENTFILE_DEVICE_DISKIO_DISK_INCREMENTFILE_DEVICE_DISK_FILE_SYSTEMIO_DISK_INCREMENTFILE_DEVICE_FILE_SYSTEMIO_NO_INCREMENTFILE_DEVICE_INPORT_PORTIO_NO_INCREMENTFILE_DEVICE_KEYBOARDIO_KEYBOARD_INCREMENTFILE_DEVICE_MAILSLOTIO_MAILSLOT_INCREMENTFILE_DEVICE_MIDI_INIO_SOUND_INCREMENTFILE_DEVICE_MIDI_OUTIO_SOUND_INCREMENTFILE_DEVICE_MOUSEIO_MOUSE_INCREMENTFILE_DEVICE_MULTI_UNC_PROVIDERIO_NO_INCREMENTFILE_DEVICE_NAMED_PIPEIO_NAMED_PIPE_INCREMENTFILE_DEVICE_NETWORKIO_NETWORK_INCREMENTFILE_DEVICE_NETWORK_BROWSERIO_NETWORK_INCREMENTFILE_DEVICE_NETWORK_FILE_SYSTEMIO_NETWORK_INCREMENTFILE_DEVICE_NULLIO_NO_INCREMENTFILE_DEVICE_PARALLEL_PORTIO_PARALLEL_INCREMENTFILE_DEVICE_PHYSICAL_NETCARDIO_NETWORK_INCREMENTFILE_DEVICE_PRINTERIO_NO_INCREMENTFILE_DEVICE_SCANNERIO_NO_INCREMENTFILE_DEVICE_SERIAL_MOUSE_PORTIO_SERIAL_INCREMENTFILE_DEVICE_SERIAL_PORTIO_SERIAL_INCREMENTFILE_DEVICE_SCREENIO_VIDEO_INCREMENTFILE_DEVICE_SOUNDIO_SOUND_INCREMENTFILE_DEVICE_STREAMSIO_SOUND_INCREMENTFILE_DEVICE_TAPEIO_NO_INCREMENTFILE_DEVICE_TAPE_FILE_SYSTEMIO_NO_INCREMENTFILE_DEVICE_TRANSPORTIO_NO_INCREMENTFILE_DEVICE_UNKNOWNIO_NO_INCREMENTFILE_DEVICE_VIDEOIO_VIDEO_INCREMENTFILE_DEVICE_VIRTUAL_DISKIO_DISK_INCREMENTFILE_DEVICE_WAVE_INIO_SOUND_INCREMENTFILE_DEVICE_WAVE_OUTIO_SOUND_INCREMENTFILE_DEVICE_8042_PORTIO_KEYBOARD_INCREMENTFILE_DEVICE_NETWORK_REDIRECTORIO_NETWORK_INCREMENTFILE_DEVICE_BATTERYIO_NO_INCREMENTFILE_DEVICE_BUS_EXTENDERIO_NO_INCREMENTFILE_DEVICE_MODEMIO_SERIAL_INCREMENTFILE_DEVICE_VDMIO_NO_INCREMENTFILE_DEVICE_MASS_STORAGEIO_DISK_INCREMENTFILE_DEVICE_SMBIO_NETWORK_INCREMENTFILE_DEVICE_KSIO_SOUND_INCREMENTFILE_DEVICE_CHANGERIO_NO_INCREMENTFILE_DEVICE_SMARTCARDIO_NO_INCREMENTFILE_DEVICE_ACPIIO_NO_INCREMENTFILE_DEVICE_DVDIO_NO_INCREMENTFILE_DEVICE_FULLSCREEN_VIDEOIO_VIDEO_INCREMENTFILE_DEVICE_DFS_FILE_SYSTEMIO_NO_INCREMENTFILE_DEVICE_DFS_VOLUMEIO_NO_INCREMENTFILE_DEVICE_SERENUMIO_SERIAL_INCREMENTFILE_DEVICE_TERMSRVIO_NO_INCREMENTFILE_DEVICE_KSECIO_NO_INCREMENTFILE_DEVICE_FIPSIO_NO_INCREMENTFILE_DEVICE_INFINIBANDIO_NO_INCREMENT
http://www.zqtcl.cn/news/784234/

相关文章:

  • 龙海市城乡规划建设局网站河南郑州哪里可以做公司网站
  • 网站正能量晚上不用下载进入免费成都网站制作方案
  • 宝安做棋牌网站建设哪家公司便宜jsp网站搭建
  • 英文网站建设方法深圳信用网
  • ip查询网站用织梦后台修改网站logo
  • 网站编辑信息怎么做茶叶网站建设策划书ppt
  • 网站建设费摊销几年嵌入式软件开发用什么语言
  • 网站备案 后期商业设计网站
  • 网站负责人半身照国际公司和跨国公司
  • 网站的组成友情下载网站
  • 做视频课程网站中职网站建设
  • seo整站优化服务盗图来做网站
  • 网站服务器基本要素有哪些交易网站的建设规划
  • 网站开发源代码mvc山东网站推广
  • 深圳建网站兴田德润团队织梦的网站模板免费吗
  • 手机响应式网站怎么做图书馆建设网站注意点
  • 白云做网站要多少钱wordpress指定分类子类
  • 侧导航网站济南网上房地产
  • 做得比较好的公司网站自己可以学做网站吗
  • 陕西省两学一做网站产品推广方案
  • 做网站ps文字有锯齿网站建设项目管理基本要求
  • 大连网站制作的网络科技公司取名创意
  • 哈尔滨企业网站建站推荐专业微网站营销
  • 阿里云模板建站怎么样上海免费建站模板
  • 中企动力网站建设合同织梦商业网站内容管理系统
  • 厦门石材网站建设个人网页模板制作
  • 网站建设责任分工手机兼职群
  • 做网站维护的收入怎么确认网校网站毕业设计的方案
  • 商丘网站建设想象力网络普洱做网站的报价
  • wordpress前端是什么网站建设备案优化