Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a requirement to mark certain traffic originating from some Windows 2003 servers with a certain DSCP value.

Unfortunately in this situation neither marking the traffic on a router or upgrading to Windows 2008 are options that we can take.

I have spent some time with tcmon and tccom and I am so close to getting this working. On a full patched and up to date XP virtual machine, I have figured out how to script TCCOM (used process explorer for the variables and the word 2003 vba object explorer to figure out the api). The script runs on boot and sets up the flows properly without a problem on my XP VM.

But on windows 2003 server, I can not add a flow at all either via a script or using the tcmon gui. It simply says "unknown error" (when scripted it gives the error code 80004005).

I have tried the following to resolve this:

  • made sure qos packet scheduler installed
  • installed the visual basic runtime sp6
  • tried uninstalling/reinstalling tcmon/tccom several times
  • tried on several 2003 test servers and virtual machines
  • I found this which explains how to write a C program to talk to the traffic control api but that seems like overkill if I can get tccom working. The tcmonlite program on this page doesn't quite do what I need.

Has anyone managed to get tcmon/tccom working on Windows 2003 at all?

For anyone who is interested, here is my script (vbscript) with an example flow (not what I am actually doing). It makes a flow and adds a filter that applies DSCP 32 to traffic from going to tcp port 80.

option explicit

dim client 
set client = wscript.createobject("TrafficControl.Client")

dim sInterface 
sInterface = "AMD PCNET Family PCI Ethernet Adapter - Packet Scheduler Miniport"

dim ifce
set ifce = getInterface(client,sInterface)

dim flowSpec
set flowSpec = ifce.CreateFlowSpec

dim filterSpec
set filterSpec = ifce.CreateFilterSpec(2)

clearAllFlows client

flowSpec.Parameters("TX_FRIENDLY_NAME") = "From Vbscript"
flowSpec.Parameters("TX_DCLASS") = 40
flowSpec.Parameters("TX_TOKEN_RATE") = -1
flowSpec.Parameters("TX_SERVICE_TYPE") = 1

filterSpec.Parameters("PROTOCOL_ID_MASK") =0
filterSpec.Parameters("PROTOCOL_ID") = 0
filterSpec.Parameters("DEST_PORT_MASK") = 65535
filterSpec.Parameters("SOURCE_PORT_MASK") = 0
filterSpec.Parameters("DEST_PORT") = 80
filterSpec.Parameters("SOURCE_PORT") = 0
filterSpec.Parameters("DEST_ADDRESS_MASK") = ""
filterSpec.Parameters("SOURCE_ADDRESS_MASK") = ""
filterSpec.Parameters("DEST_ADDRESS") = ""
filterSpec.Parameters("SOURCE_ADDRESS") = ""

dim newFlow
set newFlow = ifce.CreateFlow(flowSpec,1,"Flow obj from vbscript")
newFlow.CreateFilter filterSpec

function getInterface(oClient,sIntName)
    dim oInterface
    for each oInterface in oClient.interfaces
        if oInterface.Name = sIntName then
            set getInterface = oInterface
        end if
end function

sub clearAllFlows(oClient)
    dim oInterface, oFlow
    for each oInterface in client.interfaces
        for each oFlow in oInterface.flows
end sub
share|improve this question

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.