interesting problem, not easy to find a solution from outside of your enviroment.
Maybe some ideas to solve your problem:
Take care of your os when using printui.dll (althought you wrote it works with local stored drivers):
It would be a great help to know where it exactly stucks, if it's "only" at step 3 of your code, there must be something wrong with credentials/arguments of printui.dll/filepath to your INF. A quick check if it works to get some "normal" file using a process would give a good return if it could be a problem with credentials. Then you're able to try the rest.
In addition I would going safe if Step2 was finished successfully (maybe give Step2 a little time to create port).
Hope that helps.