在win2k16 VM上,我尝试使用QoS2 API以编程方式设置任意Dscp值。
Qwave角色(从服务器管理器安装了高质量的音频视频体验)。
相同的代码(请在下面找到)-适用于Windows 10 VM,但不适用于Windows 2016 VM。所有API都返回成功,但是当我检查Wireshark时,Dscp值设置为“零”。
我的代码大致如下:
1. Step 1: LoadLibrary(qwave.dll)
2. Step 2: GetProcAddress - QOSCreateHandle, QOSAddSocketToFlow, QOSSetFlow, QOSRemoveSocketFromFlow, QOSCloseHandle
3. Step 3: Use QWave APIs to set Dscp (code below)
int SetDscpWithQWave(SOCKET fd, // Accepted SOCKET fd
struct sockaddr *remoteAddr,
int dscpValueToSet)
{
Bool ret = FALSE;
QOS_VERSION version;
DWORD priority;
HANDLE qwaveQoSHandle = NULL;
QOS_FLOWID qwaveQoSFlowID = 0;
// Initialize the QoS version parameter
version.MajorVersion = 1;
version.MinorVersion = 0;
ret = qwaveQoSCreateHandleFn(&version, &qwaveQoSHandle);
if (!ret) {
Warning("QOSCreateHandle failed to create handle with error %d\n", GetLastError());
return ret;
}
ret = qwaveQoSAddSocketToFlowFn(qwaveQoSHandle,
fd,
remoteAddr,
QOSTrafficTypeExcellentEffort,
QOS_NON_ADAPTIVE_FLOW,
&qwaveQoSFlowID);
if (!ret) {
Warning("QOSAddSocketToFlow failed to add a flow with error %d\n", GetLastError());
return ret;
}
priority = dscpValueToSet;
ret =qwaveQoSSetFlowFn(qwaveQoSHandle,
qwaveQoSFlowID,
QOSSetOutgoingDSCPValue,
sizeof(priority),
&priority,
0,
NULL);
if (!ret) {
Warning("QOSSetFlow failed to add a flow with error %d\n",
GetLastError());
return ret;
}
return ret;
}
我在这里缺少明显的东西吗?
相同的代码可以在Windows10 VM上运行但不能在Win2k16 VM上运行的事实使我觉得我缺少一些配置-但在MSDN文档中找不到任何内容。
谢谢!