> The idea is to allocate once per thread.
Why not use the stack?
static data gets allocated in the executable's data section, and occupies space for the whole lifetime of the executable.

> To include the null character.
This is not necessary, MAX_PATH includes it.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx#maxpath