I know a lot more Linux than Windows, so I might be wrong.
In Unix, you can change the priority of a process, from -20 (higher priority) to 19 (lower priority). Process with least priority will consume CPU time only when no other process with higher priority need it. The binary for that is nice (to launch at a specific priority) or renice (to change during runtime).
This priority does not impact memory usage and I/O (for that, in Linux there is ionice).
A bitcoin miner is a perfect candidate for this, it does not need large amount of memory and won't be in swap when idling and it does not perform intensive I/O on disk.
For Windows, in "Process Explorer" I can set a lower priority to a running process, such as "Idle" or "Idling" the equivalent of renice -n 19 $unixpid.
Instead of hacking the miner and slow it down, you can run it full speed but with lower priority.
I don't know how to do that in Windows... everything is so complex. Butif no tools in Windows userspace can let you do that, you can write a small app that will launch the bitcoin miner and run a low-level Windows standard library call that will change the miner priority.
When students will logoff their workstation 99.9% of CPU time will be spend on your miner!