Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Windows(用户模式)中限制应用程序域级别的带宽?_C#_C++_.net_Traffic_Bandwidth Throttling - Fatal编程技术网

C# 如何在Windows(用户模式)中限制应用程序域级别的带宽?

C# 如何在Windows(用户模式)中限制应用程序域级别的带宽?,c#,c++,.net,traffic,bandwidth-throttling,C#,C++,.net,Traffic,Bandwidth Throttling,我希望做到以下几点: 我的应用程序在Windows计算机上运行(称为应用程序a) 我可以修改应用程序A的源代码以引入带宽限制 我希望能够重用带宽限制代码,并将其放入我拥有的任何其他应用程序中(换句话说,我希望尝试在应用程序域级别上限制带宽,以便不必重新考虑现有应用程序的带宽限制) 我想分别限制A的累积上传和下载速度。例如,如果分配给A的最大上载速率为5 Kbps,则A的所有上载流将被限制为5 Kbps的累积速率 我的要求: 我不能使用内核模式驱动程序 我需要在应用程序域级别添加限制 我试

我希望做到以下几点:

  • 我的应用程序在Windows计算机上运行(称为应用程序a)
  • 我可以修改应用程序A的源代码以引入带宽限制
  • 我希望能够重用带宽限制代码,并将其放入我拥有的任何其他应用程序中(换句话说,我希望尝试在应用程序域级别上限制带宽,以便不必重新考虑现有应用程序的带宽限制)
  • 我想分别限制A的累积上传和下载速度。例如,如果分配给A的最大上载速率为5 Kbps,则A的所有上载流将被限制为5 Kbps的累积速率
我的要求:

  • 我不能使用内核模式驱动程序
  • 我需要在应用程序域级别添加限制
我试图对此进行研究,特别是在堆栈溢出方面,但没有找到任何对我的案例有用的东西:

  • 我见过在流对象周围使用ThrottledStream类包装器,在使用时会引入节流,但我需要在域级别使用它;采用这种方法是有问题的,因为它需要我重构其他应用程序中的大量现有代码
  • 我已经看到谁的答案谈到了使用Windows过滤平台API。不幸的是,我的一个要求是,我绝对不能使用内核模式驱动程序来实现这一点,我的理解是WFPAPI需要一个

有人知道如何实现我的特定带宽限制要求,以便在应用程序域级别限制应用程序吗?

我想我已经找到了解决方案。使用,您需要使用获得目标接口的句柄(您可以通过调用来确定要以哪个接口为目标)。使用接口句柄,您需要调用一个指向结构的指针,该指针允许您指定一个
SendingFlowspec
(结构)和一个
ReceivingFlowspec
(结构),其中包含一个
PeakBandwidth
成员。然后,为了使您的接口利用您刚刚添加到它的这个流,您需要使用对的调用向您的接口添加一个过滤器,因为MSDN说TcAddFilter函数将一个新的过滤器与一个现有的流相关联,该流允许与过滤器匹配的数据包被定向到相关联的流。我认为,为了使其特定于应用程序,调用可能会起到一定的作用,您无论如何都需要调用它,以便从外观上获得用于TcEnumerateInterfaces和TcAddFlow的客户端句柄(但这仍有待测试)。我也发现了(还没有测试过)


取自MSDN,
PeakBandwidth
成员是给定流的基于时间的传输权限上限,以字节/秒为单位。PeakBandwidth成员通过强制执行每秒数据传输上限来限制可能已累积了大量传输信用或令牌的流,这些传输信用或令牌来自具有一次性或周期性数据突发的超负荷网络资源。一些中间系统可以利用这些信息,从而实现更高效的资源分配。

我不确定这一系统与其他系统有何不同,但您声称它们是。。。另一方面,两者看起来都像“搜索工具/库”,很可能会单独关闭。请注意,.Net Framework中没有内置这样的API,因此您实际上是在搜索库。@AlexeiLevenkov说,另一个API无法访问应用程序A的源代码,因此它无法在应用程序域级别引入限制。谢天谢地,自从我写了它之后,我的要求已经改变了@AlexeiLevenkov QoS API呢?我知道基于策略的QoS可以做到这一点()并且QoS有自己的API。该API是否可以与策略执行相同的操作?我想如果没有,我仍然可以编写一些代码来创建这样的策略。PeakBandwidth()应该是我所需要的。它是给定流基于时间的传输权限的上限,以字节/秒为单位。调用WSCInstallQOSTemplate()时,此流程规范通过QOS结构()传入。感谢您提供的提示,您找到任何示例代码了吗,或者您做了一些吗@Dariush到目前为止还没有这样做,抱歉。应用程序需求在我身上发生了变化,但如果你最终尝试一下,也许你可以发布一个更好的答案,提供一个编程解决方案,帮助一些人。