I knew it was possible to get DRM interfaces because I have an application that queries for an IWMDRMReader (I forget 1, 2, or 3) over and over and over until S_OK is returned. To begin finding out why the return value is sometimes S_OK and sometimes E_NOINTERFACE, I compiled an exe that runs WMCreateReader and queries for the IWMDRMReader2 interface, and then stepped through the assembly. Turns out, the value at that memory location is checked inside of QueryInterface.
Also, Windows Server 2003 ships with an earlier version of wmvcore than my PC does, I'll bet that's why the test failed for IWMDRMReader3.