No, it's wrong. You should be using the Windows API (CreateProcess etc.) not the Unix popen(). Then you can build a proper MSVCRT_FILE.
Sorry, I had a few beers tonight ;) Ok, I just remembered what my concerns were about using CreateProcess initially when I looked at MSDN:
I think you need to look more closely at the LPSTARTUPINFO lpStartupInfo argument to CreateProcess. It points to a STARTUPINFO structure having HANDLE hStdInput, HANDLE hStdOutput, and HANDLE hStdError members, which are used if the dwFlags member has the STARTF_USESTDHANDLES bit set.