好心的高手帮帮忙啊:// BandWidthControl.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//#include "stdafx.h"
#include <winsock2.h>
#include <ws2tcpip.h>
#include <qos.h>
#include <ntddndis.h>
#include <traffic.h>
#include <Qossp.h>
#include <tcerror.h> 
#include<STDIO.H>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"Traffic.lib")void MyClNotifyHandler( HANDLE ClRegCtx,HANDLE ClIfcCtx,ULONG Event,HANDLE SubCode,ULONG BufSize,PVOID Buffer ) 


int _tmain(int argc, _TCHAR* argv[])
{
DWORD destPort; 
PCHAR destAddress; 
destAddress="172.18.62.34"; //IP_ADDRESS; 
destPort = 0x50;//5000; 
int err; 
WSADATA WSAData; 
err = WSAStartup(MAKEWORD(2,2), &WSAData); 
if (err) { 
printf("WSAStartup Failed (%d) Exiting\n", err); 
exit(err); 

HANDLE ClientHandle; 
HANDLE ifcHandle; 
HANDLE flowHandle; 
HANDLE FilterHandle;
TCI_CLIENT_FUNC_LIST QoSFunctions; 
QoSFunctions.ClAddFlowCompleteHandler = NULL; 
QoSFunctions.ClDeleteFlowCompleteHandler = NULL; 
QoSFunctions.ClModifyFlowCompleteHandler = NULL; 
QoSFunctions.ClNotifyHandler = (TCI_NOTIFY_HANDLER)MyClNotifyHandler; 
long result = TcRegisterClient(CURRENT_TCI_VERSION, NULL, &QoSFunctions , &ClientHandle); 
if (result == NO_ERROR) { 
printf("no error TcRegisterClient.\n");
TC_IFC_DESCRIPTOR InterfaceBuffer[40]; 
PTC_IFC_DESCRIPTOR pInterfaceBuffer = &InterfaceBuffer[0]; 
ULONG BufferSize = 40* sizeof(TC_IFC_DESCRIPTOR); 
result = TcEnumerateInterfaces(ClientHandle, &BufferSize, pInterfaceBuffer); 
if (result == NO_ERROR) { 
printf("no error TcEnumerateInterfaces \n" ); 
if (BufferSize == 0) { 
printf("no traffic control interfaces are available\n"); 

TCHAR interfaceName[500]; 
WideCharToMultiByte(CP_ACP,0,InterfaceBuffer[0].pInterfaceName, -1,(LPSTR)interfaceName, sizeof(interfaceName), 0, 0 );
result = TcOpenInterface( interfaceName, ClientHandle, NULL, &ifcHandle ); 
if( result == NO_ERROR ) { 
printf("no error OpenInterfaces.\n");
int curSize = sizeof(TC_GEN_FLOW) + sizeof(QOS_DS_CLASS) + sizeof(QOS_TRAFFIC_CLASS) + sizeof(QOS_OBJECT_HDR);
char *bufFlow = new char[curSize]; 
PTC_GEN_FLOW newFlow = ( PTC_GEN_FLOW )bufFlow; 
LPQOS_OBJECT_HDR objHdr = NULL; 
newFlow->ReceivingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.Latency = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.ServiceType =QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
newFlow->ReceivingFlowspec.TokenRate = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.DelayVariation = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.Latency = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.MaxSduSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.MinimumPolicedSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.PeakBandwidth = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.ServiceType =SERVICETYPE_BESTEFFORT;
newFlow->SendingFlowspec.TokenBucketSize = QOS_NOT_SPECIFIED;
newFlow->SendingFlowspec.TokenRate = QOS_NOT_SPECIFIED; 
newFlow->TcObjectsLength = sizeof(QOS_DS_CLASS) + sizeof(QOS_TRAFFIC_CLASS) + sizeof(QOS_OBJECT_HDR); 
[CHAIRAT Youssef - EXT] 
LPQOS_DS_CLASS pQOSClass = (LPQOS_DS_CLASS)(&(newFlow->TcObjects[0]) );
pQOSClass->ObjectHdr.ObjectType = QOS_OBJECT_DS_CLASS;
pQOSClass->ObjectHdr.ObjectLength = sizeof(QOS_DS_CLASS);
pQOSClass->DSField = 0x24;
LPQOS_TRAFFIC_CLASS pTRClass = (LPQOS_TRAFFIC_CLASS)((char*)&(newFlow->TcObjects[0])+ sizeof(QOS_DS_CLASS));
pTRClass->ObjectHdr.ObjectType = QOS_OBJECT_TRAFFIC_CLASS;
pTRClass->ObjectHdr.ObjectLength = sizeof(QOS_TRAFFIC_CLASS);
pTRClass->TrafficClass = 0x3;
objHdr = (LPQOS_OBJECT_HDR)((char *)&(newFlow->TcObjects[0]) + sizeof(QOS_DS_CLASS) + sizeof (QOS_TRAFFIC_CLASS));
objHdr->ObjectType = QOS_OBJECT_END_OF_LIST;
objHdr->ObjectLength = sizeof(QOS_OBJECT_HDR);
int retCode = TcAddFlow( ifcHandle, /*ClientHandle*/NULL, 0, newFlow, &flowHandle ); 
if(retCode == NO_ERROR) { 
printf("no error TcAddFlow\n");

TC_GEN_FILTER GenericFilter; 
IP_PATTERN Pattern, Mask; 
memset(&Pattern,0,sizeof(IP_PATTERN)); 
memset(&Mask,0,sizeof(IP_PATTERN)); 
GenericFilter.AddressType = NDIS_PROTOCOL_ID_TCP_IP; 
GenericFilter.PatternSize = sizeof(IP_PATTERN); 
GenericFilter.Pattern = &Pattern; // pattern to match, defined below 
GenericFilter.Mask = &Mask; 
// Filter pattern. 
Pattern.Reserved1 = 0; 
Pattern.Reserved2 = 0; 
Pattern.SrcAddr = 0;//inet_addr("172.18.100.38");
Pattern.DstAddr = 0;//inet_addr(destAddress); 
Pattern.tcSrcPort = 0;//htons(0);
Pattern.tcDstPort = htons(0x50);//destPort;
Pattern.ProtocolId = 0;//IPPROTO_UDP; 
Pattern.Reserved3[0] = 0; 
Pattern.Reserved3[1] = 0;
Pattern.Reserved3[2] = 0; 
// Patterns mask 
Mask.Reserved1 = 0; 
Mask.Reserved2 = 0; 
Mask.SrcAddr = 0;//htonl(0xFFFFFFFF); 
Mask.DstAddr = 0;//htonl(0xFFFFFFFF); 
Mask.tcSrcPort = 0;//htons(0);//0xFFFF;
Mask.tcDstPort = htons(0xFFFF); 
Mask.ProtocolId = 0xFF; 
Mask.Reserved3[0] = 0;
Mask.Reserved3[1] = 0; 
retCode = TcAddFilter(flowHandle, &GenericFilter, &FilterHandle); 
if(retCode == NO_ERROR) { 
printf("no error TcAddFilter.\n"); 

// UDP MULTICAST
SOCKET hSocket = socket(AF_INET,SOCK_DGRAM,0);
if (hSocket == INVALID_SOCKET) { 
err = GetLastError(); 
printf("\"Socket\" failed with error %d\n", err); 
return 1; 

SOCKADDR add;
SOCKADDR_IN addr_dest;
addr_dest.sin_family = AF_INET;
addr_dest.sin_addr.s_addr = inet_addr(GROUP_ADDR);
addr_dest.sin_port = htons(0x50);
IN_ADDR interfaceAddr;
interfaceAddr.S_un.S_un_b.s_b1 = 204;
interfaceAddr.S_un.S_un_b.s_b2 = 1;
interfaceAddr.S_un.S_un_b.s_b3 = 1;
interfaceAddr.S_un.S_un_b.s_b4 = 148;
unsigned char ttl = 1;
setsockopt(hSocket , IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl));
setsockopt(hSocket,IPPROTO_IP,IP_MULTICAST_IF,(const char *)&interfaceAddr, sizeof(interfaceAddr));
sendto( hSocket, "TEST QOS Milticast", 20 , 0, (sockaddr*)&addr_dest,sizeof(SOCKADDR_IN));
result = TcDeleteFilter(FilterHandle); 
if (result == NO_ERROR) { 
printf("no error TcDeleteFilter\n");
}
result = TcDeleteFlow(flowHandle); 
if (result == NO_ERROR) { 
printf("no error TcCloseInterface\n");

result = TcDeregisterClient(ClientHandle); 
if (result == NO_ERROR) { 
printf("no error TcDeregisterClient\n"); 
}
shutdown(hSocket, SD_BOTH); 
closesocket(hSocket); 
WSACleanup(); 
return 0; 
}
}
}
return 0;
}