NDIS小端口驱动(五)

在需要的时候,我们也许需要NDIS微型端口程序信息,下面会从多个方面来讨论如何查询NDIS微型端口驱动。

查询无连接微型端口驱动程序

若要查询无连接微型端口驱动程序维护的 OID,绑定协议调用 NdisOidRequest 并传递 一个NDIS_OID_REQUEST 结构,该结构指定对象 (OID) 正在查询,该对象指向 NDIS 最终写入所请求信息的缓冲区。

如果 NDIS 不响应微型端口驱动程序,则对 NdisOidRequest 的 调用会导致 NDIS 调用微型端口驱动程序的 MiniportOidRequest 函数,该函数将请求的信息返回到 NDIS。 MiniportOidRequest 可以通过调用 NdisMOidRequestComplete 以同步或异步方式完成。

NDIS 还可以自行调用微型端口驱动程序的 MiniportOidRequest 函数(例如,在微型端口驱动程序的 MiniportInitializeEx 函数返回NDIS_STATUS_SUCCESS)以查询微型端口驱动程序的功能、状态或统计信息之后。 下图演示了查询无连接微型端口驱动程序。

NDIS 代表微型端口驱动程序响应许多 OID 请求。 微型端口驱动程序在初始化期间和状态指示中报告其许多 OID 值。 

使用 OID_GEN_MAC_OPTIONS 调用 MiniportOidRequest 时,它必须返回一个位掩码,该位掩码指定微型端口驱动程序执行的可选操作。 标志集包括:

  • NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA。 此标志向协议驱动程序指示它可以通过任何方式访问指示的数据。 如果微型端口驱动程序指示数据来自板载共享内存,则它不得设置此标志;
  • NDIS_MAC_OPTION_NO_LOOPBACK。 如果设置了此标志,微型端口驱动程序不会环回传递给 MiniportSendNetBufferLists 的数据包 (数据包) 定向到同一计算机上的接收器,并且微型端口驱动程序预期 NDIS 执行环回。 如果 NDIS 执行数据包的环回,则数据包不会向下传递到微型端口驱动程序。 微型端口驱动程序始终设置此标志,除非 NIC 执行硬件环回;
  • NDIS_MAC_OPTION_RECEIVE_SERIALIZED。 如果设置了此标志,微型端口驱动程序不会指示任何新接收的数据包,直到之前收到的数据包已完全处理,包括传输数据。 大多数微型端口驱动程序(通过调用 NdisMIndicateReceiveNetBufferLists 指示数据包的驱动程序除外)都设置此标志;

微型端口驱动程序不得使用标志NDIS_MAC_OPTION_RESERVED,该标志保留供 NDIS 内部使用。

MiniportOidRequest 还会使用特定于媒体的 OID 进行查询,以确定 NIC 的当前地址。 例如,将使用 OID_802_3_CURRENT_ADDRESS 查询类型为 802.3 的 NIC 的微型端口驱动程序。

某些媒体类型的微型端口驱动程序将收到特定于媒体的其他 OID。 例如,使用 OID_802.3_MAXIMUM_LIST_SIZE 查询 NIC 类型为 802.3 的微型端口驱动程序。

查询面向连接的微型端口驱动程序

若要查询面向连接的微型端口驱动程序维护的信息对象,绑定协议调用 NdisCoOidRequest 并传递 NDIS_OID_REQUEST 结构,该结构指定正在查询的 OID对象,并提供 NDIS 最终将请求的信息写入其中的缓冲区。 调用 NdisCoOidRequest 会导致 NDIS 调用微型端口驱动程序的 MiniportCoOidRequest 函数,该函数将请求的信息返回给 NDIS。 MiniportCoOidRequest 可以通过调用 NdisCoOidRequestComplete 以同步或异步方式完成。

NDIS 还可以自行调用微型端口驱动程序的 MiniportCoOidRequest 函数(例如,在微型端口驱动程序的 MiniportInitializeEx 函数返回NDIS_STATUS_SUCCESS之后)来查询微型端口驱动程序的功能、状态或统计信息。 下图说明了如何查询面向连接的微型端口驱动程序。

 

面向连接的微型端口驱动程序必须能够提供有关特定 NIC 的所有虚拟连接( (VC) )以及每个 VC 的全局基础信息。 例如,如果将非 NULLNdisVcHandle 提供给 MiniportCoOidRequest 进行 OID_GEN_CO_RCV_CRC_ERROR查询,则微型端口驱动程序将返回指定 VC 上所有接收中遇到的 CRC 错误数。 对于具有 NULLNdisVcHandle 的同一请求,微型端口驱动程序返回通过 NIC 接收的所有传入接收时遇到的 CRC 错误总数。

以下列表包含面向连接的微型端口驱动程序的一组必需的常规操作 OID:

  • OID_GEN_CO_SUPPORTED_LIST
  • OID_GEN_CO_HARDWARE_STATUS
  • OID_GEN_CO_MEDIA_SUPPORTED
  • OID_GEN_CO_MEDIA_IN_USE
  • OID_GEN_CO_LINK_SPEED
  • OID_GEN_CO_VENDOR_ID
  • OID_GEN_CO_VENDOR_DESCRIPTION
  • OID_GEN_CO_VENDOR_DRIVER_VERSION
  • OID_GEN_CO_DRIVER_VERSION
  • OID_GEN_CO_MAC_OPTIONS
  • OID_GEN_CO_MEDIA_CONNECT_STATUS
  • OID_GEN_CO_MINIMUM_LINK_SPEED

微型端口驱动程序的 MiniportCoOidRequest 函数必须准备好对查询或设置做出相应的响应,以响应上述任何 OID。

使用 OID_GEN_CO_MAC_OPTIONS 调用 MiniportCoOidRequest 时,它必须返回指定微型端口驱动程序执行的可选操作的位掩码。 标志集包括:

  • NDIS_MAC_OPTION_NO_LOOPBACK。 如果设置了此标志,微型端口驱动程序不会环回传递给 MiniportCoSendNetBufferLists 的 数据包,该数据包定向到同一计算机上的接收器,并且微型端口驱动程序希望 NDIS 执行环回。 如果 NDIS 执行数据包的环回,则数据包不会向下传递到微型端口驱动程序。 微型端口驱动程序始终设置此标志,除非 NIC 执行硬件环回;
  • NDIS_MAC_ETOX_INDICATION。 如果设置了此标志,微型端口驱动程序会指示仅在 NIC 传输数据包后完成发送;

微型端口驱动程序不得使用保留供 NDIS 内部使用的 NDIS_MAC_OPTION_RESERVED 标志。

MiniportCoOidRequest 还将使用特定于媒体的 OID 进行查询,以确定 NIC 的当前地址。

直接从用户模式查询微型端口驱动程序

应用程序可以使用 IOCTL_NDIS_QUERY_GLOBAL_STATS 直接从微型端口驱动程序的 NIC 查询信息。 在此操作中,应用程序可以使用微型端口驱动程序支持的任何查询 OID。

查询 64 位统计信息 OID


对于某些统计信息 OID,每秒 1 GB (Gbps) 且速度较快的所有微型端口驱动程序都必须支持 64 位计数器。 所有每秒 100 兆字节 (Mbps) 和更快的微型端口驱动程序应支持此类 OID 的 64 位计数器。 

查询统计信息 OID 的请求者NDIS_OID_REQUEST InformationBufferLength 设置为 4 字节,)表示 32 位统计信息请求,或设置为 8 字节以指示 64 位统计信息请求。 在其响应中,微型端口驱动程序将 NDIS_OID_REQUEST BytesNeeded 设置为微型端口驱动程序支持的统计信息值的大小, 4对于 32 位或 8对于 64 位。 微型端口驱动程序将 NDIS_OID_REQUEST BytesWritten 设置为 InformationBufferLength 值的较小值和微型端口驱动程序支持的统计信息大小。

以下部分介绍了支持 64 位统计信息 OID 的微型端口驱动程序如何响应此类 OID 查询。

1. 64 位值的 64 位查询: NDIS_OID_REQUEST InformationBufferLength 大于或等于 8。

微型端口驱动程序:

  • 返回信息缓冲区中的 64 位值;
  • 将 NDIS_OID_REQUEST BytesWritten 设置为 8;
  • 从其 MiniportOidRequest 或 MiniportCoOidRequest 函数返回NDIS_STATUS_SUCCESS;

2. 64 位值的 32 位查询: NDIS_OID_REQUEST InformationBufferLength 大于或等于 4 且小于 8。

微型端口驱动程序:

  • 在信息缓冲区中,返回 64 位值的较低 32 位;
  • 将 NDIS_OID_REQUEST BytesWritten 设置为 4;
  • 将 NDIS_OID_REQUEST BytesNeeded 设置为 8;
  • 从其 MiniportOidRequest 或 MiniportCoOidRequest 函数返回NDIS_STATUS_SUCCESS;

3. 64 位值的长度无效查询: NDIS_OID_REQUEST InformationBufferLength 小于 4。

微型端口驱动程序:

  • 不返回信息缓冲区中的任何值;
  • 将 NDIS_OID_REQUEST BytesWritten 设置为 0;
  • 将 NDIS_OID_REQUEST BytesNeeded 设置为 8;
  • 从其 MiniportOidRequest 或 MiniportCoOidRequest 函数返回NDIS_STATUS_INVALID_LENGTH;
设置无连接微型端口驱动程序的信息

若要设置无连接微型端口驱动程序维护的 OID,绑定协议调用 NdisOidRequest 并传递一个 NDIS_OID_REQUEST 结构,该结构指定正在查询 的 OID ,该对象指向包含应设置对象的值的缓冲区。 调用 NdisOidRequest 会导致 NDIS 调用微型端口驱动程序的 MiniportOidRequest 函数,该函数使用提供的值设置对象。

对 MiniportOidRequest 的 调用可以同步或异步完成。 若要异步完成调用,微型端口驱动程序调用 NdisMOidRequestComplete。 下图演示了无连接微型端口驱动程序 (每个绑定) 的设置信息。

设置面向连接的微型端口驱动程序的信息

若要设置面向连接的微型端口驱动程序维护的 OID,绑定协议调用 NdisCoOidRequest 并传递一个 NDIS_OID_REQUEST 结构,该结构指定正在查询的 OID) (对象,该对象指向包含应设置对象的值的缓冲区。 调用 NdisCoOidRequest 会导致 NDIS 调用微型端口驱动程序的 MiniportCoOidRequest 函数,该函数使用提供的值设置 对象。

对 NdisCoOidRequest 的 调用可以同步或异步完成。 若要异步完成调用,微型端口驱动程序调用 NdisCoOidRequestComplete。 下图演示了面向连接的微型端口驱动程序中的设置信息。

设置微型端口驱动程序信息的场合

在初始化期间,将调用无连接微型端口驱动程序中的 MiniportOidRequest 函数和面向连接的微型端口驱动程序中的 MiniportCoOidRequest 函数。 还可以以下情况下调用函数:

  • 在硬件重置期间;
  • 如果协议调用 NdisCloseAdapterEx;

在硬件重置操作期间调用 MiniportOidRequest 或 MiniportCoOidRequest。 在这种情况下,将调用 MiniportOidRequest 或 MiniportCoOidRequest ,以将微型端口驱动程序重置为其地址的初始状态。

当微型端口驱动程序的 NIC 被协议的 NdisCloseAdapterEx 调用关闭时,NDIS 调用 MiniportOidRequest 或 MiniportCoOidRequest。 将请求此类微型端口驱动程序更新其寻址信息。

报告硬件状态

无连接微型端口驱动程序通过调用 NdisMIndicateStatusEx 指示硬件状态到上层的更改。 面向连接的微型端口驱动程序通过调用 NdisMCoIndicateStatusEx 来指示更改。

NdisM (Co) IndicateStatusEx 采用常规状态代码和缓冲区,其中包含媒体特定信息,进一步定义状态更改原因。 NDIS 将此状态更改报告给绑定协议驱动程序。 NDIS 不会解释或以其他方式截获状态代码。

微型端口驱动程序可以发出一个或多个此类调用。 但是,与早期版本的 NDIS 不同,微型端口驱动程序并不指示它已完成发送状态。 协议驱动程序或配置管理器可以记录状态或根据需要采取纠正措施。

NdisMCoIndicateStatusEx 采用任何有效的 NDIS_STATUS_Xxx 值。

微型端口驱动程序负责指示对协议或更高级别驱动程序有意义的状态代码。 协议驱动程序会忽略其不感兴趣或在其操作上下文中没有意义的任何状态值。

微型端口驱动程序不能在其 MiniportInitializeEx、 MiniportInterrupt、 MiniportHaltEx 或 MiniportShutdownEx 函数的上下文中指示状态。

上层驱动程序或 NDIS 还可以询问微型端口驱动程序的硬件状态。 当无 连接微型端口驱动程序的 MiniportOidRequest 函数或面向连接的微型端口驱动程序的 MiniportCoOidRequest 函数收到OID_GEN_HARDWARE_STATUS时,它将使用 NDIS_HARDWARE_STATUS 中定义的任何适用状态值进行响应。 这些状态值包括:

  • NdisHardwareStatusReady
  • NdisHardwareStatusInitializing
  • NdisHardwareStatusReset
  • NdisHardwareStatusClosing
  • NdisHardwareStatusNotReady

可以查询微型端口驱动程序,以便 NDIS 可以在 NDIS 驱动程序层之间同步操作,例如,通过确定 NIC 是否已准备好接受数据包。

指示连接状态

微型端口驱动程序调用 NdisMIndicateStatusEx 或 NdisMCoIndicateStatusEx 以指示媒体连接状态的更改。 微型端口驱动程序将以下状态指示之一传递给 NdisM (Co) IndicateStatus:

  • NDIS_STATUS_MEDIA_CONNECT:指示媒体连接状态从“已断开连接”更改为“已连接”。 当断开连接的适配器建立网络连接时,将发生媒体连接状态更改。 例如,适配器在无线适配器) (范围内或用户连接网络电缆时连接;
  • NDIS_STATUS_MEDIA_DISCONNECT:指示媒体连接状态从“已连接”更改为“已断开连接”。 当连接的适配器失去网络连接时,将发生媒体断开连接状态更改。 例如,适配器因无线适配器) (范围或用户拔下网线而失去连接;

除非另行指定,否则微型端口驱动程序应在检测到状态更改后两秒内指示媒体连接状态更改。

微型端口驱动程序可以在执行某些操作时检查媒体连接状态, 查看以下列表。 如果操作完成后的状态与操作开始前的状态相同,微型端口驱动程序不必报告操作期间可能发生的任何状态更改。

以下列表介绍了指示微型端口驱动程序的媒体连接状态更改的其他要求:

重 置: NDIS 调用 MiniportResetEx 来重置微型端口驱动程序。 微型端口驱动程序可以同步或异步完成重置。如果重置后的媒体连接状态不同,驱动程序应在完成重置后的两秒内指示状态。微型端口驱动程序在确定媒体连接状态之前不应完成重置操作;

停止: 当 NDIS 调用 MiniportHaltEx 时,微型端口驱动程序不得指示任何媒体连接状态更改;

正在初始化:NDIS 调用微型端口驱动程序的 MiniportInitializeEx 函数来初始化适配器。 在适配器初始化期间,微型端口驱动程序必须遵循以下准则:

  • 如果微型端口驱动程序在从 MiniportInitializeEx 返回后未指示媒体连接状态,则 NDIS 使用 NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 结构的 MediaConnectState 成员的值来确定媒体连接状态。 当驱动程序从其 MiniportInitializeEx 函数调用 NdisMSetMiniportAttributes 时,微型端口驱动程序为 NDIS 提供此结构。注意 如果 MediaConnectState 成员设置为 MediaConnectStateUnknown,则 NDIS 将继续,就像适配器断开连接一样;
  • 如果在 NDIS 调用 MiniportInitializeEx 后连接了适配器,微型端口驱动程序可以在从 MiniportInitializeEx 返回后 5 秒内指示NDIS_STATUS_MEDIA_CONNECT;
  • 如果在 NDIS 调用 MiniportInitializeEx 后适配器断开连接,微型端口驱动程序应在从 MiniportInitializeEx 返回后 2 秒内指示NDIS_STATUS_MEDIA_DISCONNECT;
  • 初始化时,微型端口驱动程序应异步处理 OID_GEN_MEDIA_CONNECT_STATUS 或 OID_GEN_CO_MEDIA_CONNECT_STATUS 请求。 微型端口驱动程序在确定连接状态之前不应完成此类请求;
  • 媒体连接状态的确定不应延迟初始化。 如有必要,微型端口驱动程序应启动该过程以确定 MiniportInitializeEx 中的连接状态,并在以后完成该过程。 例如,微型端口驱动程序可以设置一个计时器来轮询适配器的连接状态;
  • 反序列化的微型端口驱动程序可以指示在初始化期间媒体断开连接,但序列化的微型端口驱动程序不应;

睡眠:微型端口驱动程序在收到将设备电源状态设置为 D1、D2 或 D3 的OID_PNP_SET_POWER 请求时进入网络睡眠状态。微型端口驱动程序不得在进入睡眠状态或处于睡眠状态时指示任何媒体连接状态发生更改;

醒来:微型端口驱动程序在收到将设备电源状态设置为 D0 的OID_PNP_SET_POWER请求时从睡眠状态唤醒。如果适配器在唤醒后的媒体连接状态与睡眠前的状态相同,微型端口驱动程序不应指示媒体连接状态更改。 如果连接状态发生更改,微型端口驱动程序应在唤醒后的两秒内指示新的连接状态。唤醒时,微型端口驱动程序应异步处理OID_GEN_MEDIA_CONNECT_STATUS或OID_GEN_CO_MEDIA_CONNECT_STATUS请求。 微型端口驱动程序在确定连接状态之前不应完成此类请求;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/635237.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SQL每日一练】查询“OCCUPATIONS”中的“Occupation”列并按Doctor、Professor、Singer、Actor列输出

文章目录 题目一、分析二、题解1.SqlServer2.MySQL3.Oracle 总结 题目 查询“OCCUPATIONS”中的“Occupation”列,使每个姓名按字母顺序排序,并显示在其相应的“职业》下方。输出列标题应分别为Doctor、Professor、Singer和Actor。 注意:当不…

【ChatGPT】 Microsoft Edge 浏览器扩展使用 GPT

【ChatGPT】添加 Microsoft Edge 浏览器插件免费使用 GPT 文章目录 准备工作添加扩展注意事项 使用 ChatGPT 可以更高效的搜索到想要的内容,有效节约在搜索引擎中排查正确信息的时间。 准备工作 准备一台可上网的电脑电脑上安装有 Windows 自带的 Microsoft Edge …

【Makefile】Makefile 编译 Keil 工程(Linux 环境)

本文使用的开发板为 stm32f103C8T6,使用的驱动库为stm32标准库。 目录 一、软件下载 1、stm32 标准库 2、arm-none-eabi 工具链 3、烧录器 二、Keil 工程改造 1、Keil 工程 2、基本 Makefile 工程 3、添加启动文件 4、添加链接脚本 5、去掉 core_cm3.c 三…

App Inventor 2 如何接入ChatGPT:国内访问OpenAI的最佳方式

如何接入OpenAI 由于国内无法访问OpenAI,KX上网可选大陆及香港(被屏蔽)以外才行。因此对于大多数人来说,想体验或使用ChatGPT就不太便利,不过App Inventor 2 为我们提供了相对便利的一种方式,即“试验性质…

基于STM32F407的项目迁移到STM32F427

提示:此文档迁移教程使用的是IAR,有关代码的修改使用的是Vscode,基于STM32F407的项目迁移到STM32F427 基于STM32F407的项目迁移到STM32F427 前言一、硬件区别1.1.区别:1.2.需要注意以下硬件区别: 二、引脚配置三、STM32F4273.1.晶…

安卓高级控件(下拉框、列表类视图、翻页类视图、碎片Fragment)

下拉框 此小节介绍下拉框的用法以及适配器的基本概念,结合对下拉框Spinner的使用说明分别阐述数组适配器ArrayAdapter、简单适配器SimpleAdapter的具体用法与展示效果。 下拉框控件Spinner Spinner是下拉框控件,它用于从一串列表中选择某项&#xff0…

41-4 DDOS攻击防护实战

一、UDP FLOOD攻击 # hping3 -q -n -a <攻击IP> -S -s <源端口> --keep -p <目的端口> --flood <被攻击IP> hping3 --udp -s 6666 -p 53 -a 192.168.1.6 --flood 192.168.1.13 这个命令是使用hping3工具进行UDP Flood攻击的命令。下面是各个选项的作…

Linux--进程概念

目录 基本概念 描述进程-PCB task_struct-PCB的一种 task_struct内容分类 查看进程 通过系统目录查看 通过ps命令查看 通过系统调用获取进程的PID和PPID 通过系统调用创建进程- fork初始 Linux进程状态 运行状态&#xff08;Running&#xff09;- R 浅度睡眠状态…

工业级3D开发引擎HOOPS:创新与效率的融合!

在当今这个技术日新月异的时代&#xff0c;3D技术已成为推动各行各业发展的重要力量。从工程设计到游戏开发&#xff0c;从虚拟现实到增强现实&#xff0c;3D技术的应用无处不在&#xff0c;它极大地丰富了我们的生活和工作。而在这样的背景下&#xff0c;HOOPS作为一个强大的3…

java学习和项目总结

java&#xff1a; JDK/JRE/JVM三者的关系 JVM&#xff1a;JVM是java进行编译的虚拟机&#xff0c;是Java 能够跨平台运行的核心 。 所有的java程序会首先被编译为.class的类文件&#xff0c;这种类文件可以在虚拟机上执行。也就是说class文件并不直接与机器的操作系统交互&a…

认识NXP新型微处理器:MCX工业和物联网微控制器

目录 概述 1 MCX工业和物联网微控制器介绍 2 MCX 系列微控制器类型 2.1 MCX N系列微控制器 2.1.1 主要特征 2.1.2 MCX N系列产品 2.1.3 MCX N9xx和N5xx MCU选型表 2.2 MCX A系列微控制器 2.2.1 主要特征 2.2.2 MCX A系列产品 2.2.3 MCX A MCU的架构 2.3 MCX W系…

144.栈和队列:有效的括号(力扣)

题目描述 代码解决 class Solution { public:bool isValid(string s) {// 如果字符串长度为奇数&#xff0c;不可能是有效的括号字符串if(s.size() % 2 ! 0) return false;// 使用栈来存放括号stack<char> st;// 遍历字符串中的每一个字符for(int i 0; i < s.size();…

C# run Node.js

C# run nodejs Inter-Process Communication&#xff0c;IPC Process类 启动Node.js进程&#xff0c;通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后&#xff0c;在控制台输出并回复消息console.l…

2024最新 Jenkins + Docker 实战教程(三) - 在Jenkins服务器上运行java项目

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Kafka SASL_SSL集群认证

背景 公司需要对kafka环境进行安全验证,目前考虑到的方案有Kerberos和SSL和SASL_SSL,最终考虑到安全和功能的丰富度,我们最终选择了SASL_SSL方案。处于知识积累的角度,记录一下kafka SASL_SSL安装部署的步骤。 机器规划 目前测试环境公搭建了三台kafka主机服务,现在将详…

【js刷题:数据结构链表之环形链表】

环形链表 一、题目二、实现思路1.判断是否有环2.如何找到环状链表的入口节点 三、解题代码 一、题目 二、实现思路 主要有两点&#xff0c;首先我们要判断这个链表是否有环&#xff0c;其次我们要找到这个环的入口节点。 1.判断是否有环 定义一个快指针fast和慢指针slow 快指…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

【机器学习】在电子商务(淘*拼*京*—>抖)的应用分析

机器学习与大模型&#xff1a;电子商务的新引擎 一、电子商务的变革与挑战二、机器学习与大模型的崛起三、机器学习与大模型在电子商务中的应用实践个性化推荐精准营销智能客服库存管理与商品定价 四、总结与展望 随着互联网的飞速发展&#xff0c;电子商务已经成为我们生活中不…

c++ 实现 梯度下降线性回归模型

理论与python实现部分 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation c代码 没能力实现反向传播求梯度&#xff0c;只能自己手动算导数了 #include <bits/stdc.h> #include <time.h> using namespace std;//y_hat X * W b // linreg 函数&#xff1a…

Unity射击游戏开发教程:(24)创造不同的敌人

在这篇文章中,我们将讨论添加一个可以承受多次攻击的新敌人和一些动画来使事情变得栩栩如生。敌人没有任何移动或射击行为。这将有助于增强未来敌人的力量。 我们将声明一个 int 来存储敌人可以承受的攻击数量,并将其设置为 3。