From: locke AT mcs DOT net (Peter Johnson) Newsgroups: comp.os.msdos.djgpp Subject: DPMI bug test for Win2000 Message-ID: X-Newsreader: MicroPlanet Gravity v2.12 X-Proxy-Client: pljohnsn AT uiuc DOT edu from 207-229-150-156.d.enteract.com Lines: 104 Date: Fri, 14 Jan 2000 15:59:08 -0600 NNTP-Posting-Host: 128.174.5.27 X-Complaints-To: abuse AT uiuc DOT edu X-Trace: vixen.cso.uiuc.edu 947887114 128.174.5.27 (Fri, 14 Jan 2000 15:58:34 CST) NNTP-Posting-Date: Fri, 14 Jan 2000 15:58:34 CST Organization: University of Illinois at Urbana-Champaign To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com Would people out there with Win2000 beta please compile and run the following program to see if it crashes? It tests to see if the DPMI Real- Mode callback bug I discovered in NT 4.0 is present in 2000. The code uses sbrk() to put the registers structure in question well over the 64K mark and installs a mouse callback. In my testing it crashes in NT 4 and doesn't crash in Win98. I want to find out if the bug still exists in Win2000, so please try it and post here whether it crashes or not. Thanks! Compile with "gcc -o testrmcb.exe testrmcb.c". -- Cut Here - testrmcb.c -- /* RMCB test program for >64K regs structure compliance Based (somewhat) on Allegro's mouse routines */ #include #include #include #include #include #include volatile int test = 0; static _go32_dpmi_seginfo dpmi_seginfo; int install_mouse(); void remove_mouse(); int main() { if(install_mouse()) { printf("Can't find mouse driver!"); return 1; } while(!kbhit()) { if(test) { printf("got one.\n"); test = 0; } } getch(); remove_mouse(); return 0; } void mouseint(_go32_dpmi_registers *r) { test = 1; } int install_mouse() { __dpmi_regs r; _go32_dpmi_registers *dpmi_regs; sbrk(1000000); dpmi_regs = sbrk(sizeof(_go32_dpmi_registers)); r.x.ax = 0; __dpmi_int(0x33, &r); /* initialise mouse driver */ if (r.x.ax == 0) { return -1; } /* create real mode callback for the int33 driver */ dpmi_seginfo.pm_offset = (int)mouseint; dpmi_seginfo.pm_selector = _my_cs(); _go32_dpmi_allocate_real_mode_callback_retf(&dpmi_seginfo, dpmi_regs); r.x.ax = 0x0C; r.x.cx = 0x7F; r.x.dx = dpmi_seginfo.rm_offset; r.x.es = dpmi_seginfo.rm_segment; __dpmi_int(0x33, &r); /* install callback */ return 0; } void remove_mouse() { __dpmi_regs r; r.x.ax = 0x0C; r.x.cx = 0; r.x.dx = 0; r.x.es = 0; __dpmi_int(0x33, &r); /* install NULL callback */ _go32_dpmi_free_real_mode_callback(&dpmi_seginfo); } -- Peter Johnson locke AT mcs DOT net :Windows: Where do you want to go today? :Linux: Where do you want to go tomorrow? :FreeBSD: Are you guys coming or what?