diff --git a/src/sbbs3/dosxtrn/dosxtrn.c b/src/sbbs3/dosxtrn/dosxtrn.c index ecf73c9bd79bc62aa7fbb06a740693dd3aefaf53..df162b0ae138f462ea3d710f0819cb5d5f55cdbb 100644 --- a/src/sbbs3/dosxtrn/dosxtrn.c +++ b/src/sbbs3/dosxtrn/dosxtrn.c @@ -509,6 +509,7 @@ int main(int argc, char **argv) int i,c,d,envnum=0; FILE* fp; BOOL NT=FALSE; + BOOL x64=FALSE; BOOL success=FALSE; WORD buf_seg; WORD w; @@ -519,7 +520,7 @@ int main(int argc, char **argv) ,"%s - Copyright %s Rob Swindell\n" ,id_string, __DATE__+7); fprintf(stderr - ,"usage: dosxtrn <path/dosxtrn.env> [NT|95] [node_num] [mode]\n"); + ,"usage: dosxtrn <path/dosxtrn.env> [NT|95|x64] [node_num] [mode]\n"); return(1); } @@ -529,8 +530,12 @@ int main(int argc, char **argv) sprintf(dll,"%s%s",exec_dir,VDD_FILENAME); DllName=dll; - if(argc>2 && !strcmp(argv[2],"NT")) - NT=TRUE; + if(argc>2) { + if(strcmp(argv[2],"NT") == 0) + NT=TRUE; + else if(strcmp(argv[2],"x64") == 0) + NT=TRUE, x64=TRUE; + } if(argc>3) node_num=atoi(argv[3]); if(argc>4) @@ -588,12 +593,13 @@ int main(int argc, char **argv) mov si, DllName ; ds:si = dll name mov di, InitFunc ; es:di = init routine mov bx, DispFunc ; ds:bx = dispatch routine -#if 1 /* Vista work-around, apparently doesn't support an InitFunc (RegisterModule fails with AX=1) */ - xor di,di - mov es,di -#endif - }; + if(!x64) { // NTVDMx64 (based on an older Windows NTVDM) requires an init routine + _asm { /* Vista work-around, apparently doesn't support an InitFunc (RegisterModule fails with AX=1) */ + xor di,di + mov es,di + }; + } RegisterModule(); _asm { mov vdd, ax diff --git a/src/sbbs3/sbbsexec.c b/src/sbbs3/sbbsexec.c index 7579d2f935de7c5b4062edb69f7f2e84ccda87e4..e16046587e25c89549d4989687d41377eddd9621 100644 --- a/src/sbbs3/sbbsexec.c +++ b/src/sbbs3/sbbsexec.c @@ -674,10 +674,11 @@ __declspec(dllexport) void __cdecl VDDDispatch(void) status->outbuf_full=0; status->outbuf_size=DEFAULT_MAX_MSG_SIZE; } else - lprintf(LOG_DEBUG,"VDD_STATUS: MailSlot maxmsgsize=%u, nextmsgsize=%u, msgs=%u" + lprintf(LOG_DEBUG,"VDD_STATUS: MailSlot output: maxmsgsize=%u, nextmsgsize=%d, msgs=%u, input: %u" ,status->outbuf_size ,status->outbuf_full - ,msgs); + ,msgs + ,status->inbuf_full); if(status->outbuf_full==MAILSLOT_NO_MESSAGE) status->outbuf_full=0; status->outbuf_full*=msgs; @@ -803,3 +804,9 @@ __declspec(dllexport) void __cdecl VDDDispatch(void) } setAX((WORD)retval); } + +__declspec(dllexport) BOOL __cdecl VDDInitialize(IN PVOID hVDD, IN ULONG Reason, +IN PCONTEXT Context OPTIONAL) +{ + return TRUE; +} diff --git a/src/sbbs3/xtrn.cpp b/src/sbbs3/xtrn.cpp index ae7deb7e61a65125eb6478c71430c06cd375afab..00e196ff84ee822015b0586daf8fead771e0218a 100644 --- a/src/sbbs3/xtrn.cpp +++ b/src/sbbs3/xtrn.cpp @@ -487,8 +487,10 @@ int sbbs_t::external(const char* cmdline, long mode, const char* startup_dir) if(mode&EX_STDOUT) i|=SBBSEXEC_MODE_DOS_OUT; } - sprintf(str," NT %u %u" - ,cfg.node_num,i); + BOOL x64 = FALSE; + IsWow64Process(GetCurrentProcess(), &x64); + sprintf(str," %s %u %u" + ,x64 ? "x64" : "NT", cfg.node_num,i); strcat(fullcmdline,str); sprintf(str,"sbbsexec_hungup%d",cfg.node_num);