エラーチェックが甘いけど、自作するならこんな感じかなぁ。

#include <windows.h>
#include <sys/stat.h>
#include <io.h>

int mkstemp(const char *templ) {
 char *buffer;
 DWORD length;
 char filename[MAX_PATH];

 length = ::GetTempPathA(0, NULL);
 buffer = (char *)malloc(length);
 GetTempPathA(length, buffer);

 if (GetTempFileNameA(buffer, templ, 0, filename) == 0) {
  free(buffer);
  return -1;
 }

 free(buffer);
 return open(filename, _S_IEXEC);
}