附加筛选器模块
为了启动将筛选器模块插入驱动程序堆栈的过程,NDIS 调用筛选器驱动程序的 FilterAttach 函数。 在 FilterAttach 函数中开始执行时,筛选器模块进入“附加”状态。 有关将筛选器模块附加到驱动程序堆栈的详细信息,请参阅 启动驱动程序堆栈。
筛选器驱动程序使用句柄,该句柄在引用此筛选器模块的所有未来 NdisXxx 函数调用中,NDIS 在 FilterAttach 的 NdisFilterHandle 参数处传递。 此类函数包括状态指示、发送请求、接收指示和 OID 请求。
当筛选器模块处于 “正在附加” 状态时,驱动程序会:
为筛选器模块创建上下文区域,并分配缓冲池和其他特定于筛选器模块的资源。 有关缓冲池的详细信息,请参阅 筛选器驱动程序缓冲区管理。
使用 NDIS 传递给 FilterAttach 的 NdisFilterHandle 值调用 NdisFSetAttributes 函数。 NdisFSetAttributes 的 FilterModuleContext 参数指定此筛选器模块的筛选器驱动程序的上下文区域。 NDIS 将此上下文区域传递给筛选器驱动程序的 FilterXxx 函数。
(可选)从注册表中读取此筛选器模块的配置参数。 有关详细信息,请参阅 访问筛选器驱动程序的配置信息。
如果上述操作成功完成,则筛选器模块将处于 “已暂停” 状态。
如果上述操作失败,筛选器驱动程序必须释放它在 FilterAttach 函数中分配的任何资源,并将筛选器模块返回到 “分离” 状态。
返回NDIS_STATUS_SUCCESS或相应的失败代码。 如果驱动程序返回失败代码,NDIS 将终止驱动程序堆栈。
注意 注册表可以包含一个标志,该标志指定筛选器模块是可选的。 如果可选筛选器模块未附加,则 NDIS 不会终止驱动程序堆栈的其余部分。
筛选器驱动程序无法发出发送请求、指示接收的数据、发出 OID 请求或从 “附加 ”状态发出状态指示。 “正在运行”和“暂停”状态支持发送和接收操作。 暂停、正在重启、正在运行和暂停状态支持 OID 请求和状态指示。
NDIS 调用 FilterDetach 函数来分离 NDIS 随 FilterAttach 附加的筛选器模块。 有关详细信息,请参阅 分离筛选器模块。