windows support using ifdefs