Well, the hook is executed by the git process writing to the repository. When you push over SSH this process is running in the SSH session. So, when a developed pushes over SSH what happens is he actually loggs in, updates the repo and executes the hook.
When someone pushes over SMB, it's his git proccess who updates the repo. The process is running on his machine, and sure enough it can't execute that binary.
Anyway, push over SMB is not a really awesome idea. I guess the best solution in your case is to make Windows developers push over SSH. It shouldn't be a problem for them.