1 #include <ncurses.h>
2 #include <stdlib.h>
3 #include <sys/types.h>
4 #include <unistd.h>
5 #include <stdio.h>
6 #include <time.h>
7 
myrandom()8 unsigned int myrandom()
9 {
10 	return lrand48();
11 }
12 
random_32bit_value()13 unsigned int random_32bit_value()
14 {
15 	return myrandom() & 0xffffffff;
16 }
17 
random_error()18 char * random_error()
19 {
20 	static char *errors[] = {
21 		"ACPI_DRIVER_INTERNAL",
22 		"ASSIGN_DRIVE_LETTERS_FAILED",
23 		"ATDISK_DRIVER_INTERNAL",
24 		"BAD_EXHANDLE",
25 		"BAD_POOL_CALLER",
26 		"BAD_SYSTEM_CONFIG_INFO",
27 		"BOUND_IMAGE_UNSUPPORTED",
28 		"BUGCODE_USB_DRIVER",
29 		"CACHE_INITIALIZATION_FAILED",
30 		"CANCEL_STATE_IN_COMPLETED_IRP",
31 		"CANNOT_WRITE_CONFIGURATION",
32 		"CONFIG_INITIALIZATION_FAILED",
33 		"CONFIG_LIST_FAILED",
34 		"CRITICAL_SERVICE_FAILED",
35 		"DATA_COHERENCY_EXCEPTION",
36 		"DEREF_UNKNOWN_LOGON_SESSION",
37 		"DFS_FILE_SYSTEM",
38 		"DRIVER_CORRUPTED_MMPOOL",
39 		"DRIVER_IRQL_NOT_LESS_OR_EQUAL",
40 		"DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS",
41 		"DRIVER_POWER_STATE_FAILURE",
42 		"DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATIONS",
43 		"END_OF_NT_EVALUATION_PERIOD",
44 		"FATAL_UNHANDLED_HARD_ERROR",
45 		"FILE_INITIALIZATION_FAILED",
46 		"FLTMGR_FILE_SYSTEM",
47 		"FP_EMULATION_ERROR",
48 		"FTDISK_INTERNAL_ERROR",
49 		"HAL1_INITIALIZATION_FAILED",
50 		"HAL_INITIALIZATION_FAILED",
51 		"INSTALL_MORE_MEMORY",
52 		"INSTRUCTION_COHERENCY_EXCEPTION",
53 		"INSUFFICIENT_SYSTEM_MAP_REGS",
54 		"INTERNAL_POWER_ERROR",
55 		"INVALID_KERNEL_HANDLE",
56 		"INVALID_REGION_OR_SEGMENT",
57 		"INVALID_WORK_QUEUE_ITEM",
58 		"IO1_INITIALIZATION_FAILED",
59 		"IRQL_GT_ZERO_AT_SYSTEM_SERVICE",
60 		"KERNEL_DATA_INPAGE_ERROR",
61 		"KERNEL_MODE_EXCEPTION_NOT_HANDLED",
62 		"KERNEL_STACK_INPAGE_ERROR",
63 		"KERNEL_STACK_LOCKED_AT_EXIT",
64 		"LM_SERVER_INTERNAL_ERROR",
65 		"LPC_INITIALIZATION_FAILED",
66 		"MACHINE_CHECK_EXCEPTION",
67 		"MAILSLOT_FILE_SYSTEM",
68 		"MEMORY1_INITIALIZATION_FAILED",
69 		"MULTIPLE_IRP_COMPLETE_REQUESTS",
70 		"MUST_SUCCEED_POOL_EMPTY",
71 		"MUTEX_ALREADY_OWNED",
72 		"NDIS_INTERNAL_ERROR",
73 		"NO_BOOT_DEVICE",
74 		"NO_PAGES_AVAILABLE",
75 		"NO_SUCH_PARTITION",
76 		"OBJECT1_INITIALIZATION_FAILED",
77 		"OBJECT_INITIALIZATION_FAILED",
78 		"OFS_FILE_SYSTEM",
79 		"PAGE_FAULT_IN_NONPAGED_AREA",
80 		"PAGE_FAULT_WITH_INTERRUPTS_OFF",
81 		"PFN_LIST_CORRUPT",
82 		"PHASE0_EXCEPTION",
83 		"PINBALL_FILE_SYSTEM",
84 		"PNP_INTERNAL_ERROR",
85 		"PP0_INITIALIZATION_FAILED",
86 		"PP1_INITIALIZATION_FAILED",
87 		"PROCESS1_INITIALIZATION_FAILED",
88 		"PROCESS_HAS_LOCKED_PAGES",
89 		"PROCESS_INITIALIZATION_FAILED",
90 		"RECOM_DRIVER",
91 		"REFMON_INITIALIZATION_FAILED",
92 		"REF_UNKNOWN_LOGON_SESSION",
93 		"REGISTRY_ERROR",
94 		"SECURITY1_INITIALIZATION_FAILED",
95 		"SECURITY_INITIALIZATION_FAILED",
96 		"SESSION1_INITIALIZATION_FAILED",
97 		"SESSION2_INITIALIZATION_FAILED",
98 		"SESSION3_INITIALIZATION_FAILED",
99 		"SESSION4_INITIALIZATION_FAILED",
100 		"SESSION5_INITIALIZATION_FAILED",
101 		"SESSION_HAS_VALID_POOL_ON_EXIT",
102 		"SESSION_HAS_VALID_SPECIAL_POOL_ON_EXIT",
103 		"SESSION_HAS_VALID_VIEWS_ON_EXIT",
104 		"SET_ENV_VAR_FAILED",
105 		"SETUP_FAILURE",
106 		"SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION",
107 		"SPIN_LOCK_INIT_FAILURE",
108 		"STREAMS_INTERNAL_ERROR",
109 		"SYMBOLIC_INITIALIZATION_FAILED",
110 		"SYSTEM_LICENSE_VIOLATION",
111 		"SYSTEM_THREAD_EXCEPTION_NOT_HANDLED",
112 		"TARGET_MDL_TOO_SMALL",
113 		"TERMINAL_SERVER_DRIVER_MADE_INCORRECT_MEMORY_REFERENCE",
114 		"UDFS_FILE_SYSTEM",
115 		"UNMOUNTABLE_BOOT_VOLUME",
116 		"UNSUPPORTED_PROCESSOR",
117 		"UP_DRIVER_ON_MP_SYSTEM",
118 		"WIN32K_INIT_OR_RIT_FAILURE",
119 		"WORKER_THREAD_RETURNED_AT_BAD_IRQL",
120 		"XNS_INTERNAL_ERROR"
121 	};
122 
123 	return errors[myrandom() % (sizeof(errors) / sizeof(char *))];
124 }
125 
random_sys_file(void)126 char *random_sys_file(void)
127 {
128 	static char *sys_files[] = {
129 		"cdr4_xp.sys",
130 		"fs_rec.sys",
131 		"hsx_cnxt.sys",
132 		"hsx_dpv.sys",
133 		"ks-959.sys",
134 		"nv4_mini.sys",
135 		"sffp_sd.sys",
136 		"sym_hi.sys",
137 		"sym_u3.sys",
138 		"1394bus.sys",
139 		"ac97intc.sys",
140 		"acpi.sys",
141 		"acpiec.sys",
142 		"adihdaud.sys",
143 		"adpu160m.sys",
144 		"aeaudio.sys",
145 		"aec.sys",
146 		"aegisp.sys",
147 		"afd.sys",
148 		"aha154x.sys",
149 		"aic78u2.sys",
150 		"aic78xx.sys",
151 		"aliide.sys",
152 		"amdk6.sys",
153 		"amdk7.sys",
154 		"amsint.sys",
155 		"anc.sys",
156 		"ansi.sys",
157 		"arp1394.sys",
158 		"asc.sys",
159 		"asc3350p.sys",
160 		"asc3550.sys",
161 		"asyncmac.sys",
162 		"atapi.sys",
163 		"ati2mtag.sys",
164 		"atmarpc.sys",
165 		"atmeltpm.sys",
166 		"atmepvc.sys",
167 		"atmlane.sys",
168 		"atmuni.sys",
169 		"audstub.sys",
170 		"b57xp32.sys",
171 		"battc.sys",
172 		"bcbthub.sys",
173 		"beep.sys",
174 		"bluescreen.sys",
175 		"bridge.sys",
176 		"btaudio.sys",
177 		"btkrnl.sys",
178 		"btport.sys",
179 		"btserial.sys",
180 		"btslbcsp.sys",
181 		"btwdndis.sys",
182 		"btwusb.sys",
183 		"cbidf2k.sys",
184 		"ccdecode.sys",
185 		"cd20xrnt.sys",
186 		"cdaudio.sys",
187 		"cdfs.sys",
188 		"cdralw2k.sys",
189 		"cdrom.sys",
190 		"cinemst2.sys",
191 		"classpnp.sys",
192 		"cmbatt.sys",
193 		"cmdide.sys",
194 		"compbatt.sys",
195 		"country.sys",
196 		"cpqarray.sys",
197 		"cpqdap01.sys",
198 		"crusoe.sys",
199 		"dac2w2k.sys",
200 		"dac960nt.sys",
201 		"disk.sys",
202 		"diskdump.sys",
203 		"dmboot.sys",
204 		"dmio.sys",
205 		"dmload.sys",
206 		"dmusic.sys",
207 		"dpti2o.sys",
208 		"drmk.sys",
209 		"drmkaud.sys",
210 		"dxapi.sys",
211 		"dxg.sys",
212 		"dxgthk.sys",
213 		"e100b325.sys",
214 		"elbycdfl.sys",
215 		"elbycdio.sys",
216 		"enum1394.sys",
217 		"fastfat.sys",
218 		"fdc.sys",
219 		"fips.sys",
220 		"flpydisk.sys",
221 		"fltmgr.sys",
222 		"fsvga.sys",
223 		"ftdisk.sys",
224 		"hcmon.sys",
225 		"hdaudbus.sys",
226 		"hdaudio.sys",
227 		"hidclass.sys",
228 		"hidcom.sys",
229 		"hidparse.sys",
230 		"hidusb.sys",
231 		"himem.sys",
232 		"hpn.sys",
233 		"hsxhwazl.sys",
234 		"http.sys",
235 		"i2omgmt.sys",
236 		"i2omp.sys",
237 		"i8042prt.sys",
238 		"ikhfile.sys",
239 		"ikhlayer.sys",
240 		"imagedrv.sys",
241 		"imagesrv.sys",
242 		"imapi.sys",
243 		"ini910u.sys",
244 		"intelide.sys",
245 		"intelppm.sys",
246 		"ip6fw.sys",
247 		"ipfltdrv.sys",
248 		"ipinip.sys",
249 		"ipnat.sys",
250 		"ipsec.sys",
251 		"irda.sys",
252 		"irenum.sys",
253 		"isapnp.sys",
254 		"kbdclass.sys",
255 		"kbdhid.sys",
256 		"key01.sys",
257 		"keyboard.sys",
258 		"kmixer.sys",
259 		"ks.sys",
260 		"ksecdd.sys",
261 		"luipsec.sys",
262 		"mcd.sys",
263 		"mdmxsdk.sys",
264 		"mf.sys",
265 		"mnmdd.sys",
266 		"modem.sys",
267 		"mouclass.sys",
268 		"mouhid.sys",
269 		"mountmgr.sys",
270 		"mqac.sys",
271 		"mraid35x.sys",
272 		"mrxdav.sys",
273 		"mrxsmb.sys",
274 		"msfs.sys",
275 		"msgpc.sys",
276 		"mskssrv.sys",
277 		"mspclock.sys",
278 		"mspqm.sys",
279 		"mssmbios.sys",
280 		"mstee.sys",
281 		"mup.sys",
282 		"nabtsfec.sys",
283 		"ndis.sys",
284 		"ndisip.sys",
285 		"ndistapi.sys",
286 		"ndisuio.sys",
287 		"ndiswan.sys",
288 		"ndproxy.sys",
289 		"netbios.sys",
290 		"netbt.sys",
291 		"nic1394.sys",
292 		"nikedrv.sys",
293 		"nmnt.sys",
294 		"nmwcd.sys",
295 		"nmwcdc.sys",
296 		"nmwcdcj.sys",
297 		"nmwcdcm.sys",
298 		"npf.sys",
299 		"npfs.sys",
300 		"nsndis5.sys",
301 		"ntdos.sys",
302 		"ntdos404.sys",
303 		"ntdos411.sys",
304 		"ntdos412.sys",
305 		"ntdos804.sys",
306 		"ntfs.sys",
307 		"ntio.sys",
308 		"ntio404.sys",
309 		"ntio411.sys",
310 		"ntio412.sys",
311 		"ntio804.sys",
312 		"null.sys",
313 		"nwlnkflt.sys",
314 		"nwlnkfwd.sys",
315 		"nwlnkipx.sys",
316 		"nwlnknb.sys",
317 		"nwlnkspx.sys",
318 		"nwrdr.sys",
319 		"ohci1394.sys",
320 		"oprghdlr.sys",
321 		"p3.sys",
322 		"parport.sys",
323 		"partmgr.sys",
324 		"parvdm.sys",
325 		"pcdrndisuio.sys",
326 		"pci.sys",
327 		"pciide.sys",
328 		"pciidex.sys",
329 		"pcmcia.sys",
330 		"perc2.sys",
331 		"perc2hib.sys",
332 		"portcls.sys",
333 		"pqntdrv.sys",
334 		"processr.sys",
335 		"psadd.sys",
336 		"psched.sys",
337 		"ptilink.sys",
338 		"pxhelp20.sys",
339 		"ql1080.sys",
340 		"ql10wnt.sys",
341 		"ql12160.sys",
342 		"ql1240.sys",
343 		"ql1280.sys",
344 		"rasacd.sys",
345 		"rasirda.sys",
346 		"rasl2tp.sys",
347 		"raspppoe.sys",
348 		"raspptp.sys",
349 		"raspti.sys",
350 		"rawwan.sys",
351 		"rdbss.sys",
352 		"rdpcdd.sys",
353 		"rdpdr.sys",
354 		"rdpwd.sys",
355 		"redbook.sys",
356 		"rio8drv.sys",
357 		"riodrv.sys",
358 		"rmcast.sys",
359 		"rndismp.sys",
360 		"rootmdm.sys",
361 		"s24trans.sys",
362 		"scsiport.sys",
363 		"sdbus.sys",
364 		"secdrv.sys",
365 		"serenum.sys",
366 		"serial.sys",
367 		"sffdisk.sys",
368 		"sfloppy.sys",
369 		"sftpdrive.sys",
370 		"shockmgr.sys",
371 		"shockprf.sys",
372 		"slip.sys",
373 		"smclib.sys",
374 		"sonydcam.sys",
375 		"sparrow.sys",
376 		"splitter.sys",
377 		"sptd.sys",
378 		"sptddrv1.sys",
379 		"sr.sys",
380 		"srv.sys",
381 		"ssi.sys",
382 		"stream.sys",
383 		"streamip.sys",
384 		"swenum.sys",
385 		"swmidi.sys",
386 		"symc810.sys",
387 		"symc8xx.sys",
388 		"syntp.sys",
389 		"sysaudio.sys",
390 		"tape.sys",
391 		"tcpip.sys",
392 		"tcpip6.sys",
393 		"tcusb.sys",
394 		"tdi.sys",
395 		"tdpipe.sys",
396 		"tdtcp.sys",
397 		"termdd.sys",
398 		"tosdvd.sys",
399 		"toside.sys",
400 		"tphkdrv.sys",
401 		"tsbvcap.sys",
402 		"tunmp.sys",
403 		"udfs.sys",
404 		"ultra.sys",
405 		"update.sys",
406 		"usb8023.sys",
407 		"usbcamd.sys",
408 		"usbcamd2.sys",
409 		"usbccgp.sys",
410 		"usbd.sys",
411 		"usbehci.sys",
412 		"usbhub.sys",
413 		"usbintel.sys",
414 		"usbkey.sys",
415 		"usbport.sys",
416 		"usbprint.sys",
417 		"usbscan.sys",
418 		"usbuhci.sys",
419 		"usbvm31b.sys",
420 		"vdmindvd.sys",
421 		"vga.sys",
422 		"viaide.sys",
423 		"videoprt.sys",
424 		"vmnet.sys",
425 		"vmnetadapter.sys",
426 		"vmnetbridge.sys",
427 		"vmnetuserif.sys",
428 		"vmx86.sys",
429 		"volsnap.sys",
430 		"w29n50.sys",
431 		"w29n51.sys",
432 		"w39n50.sys",
433 		"w39n51.sys",
434 		"wanarp.sys",
435 		"watchdog.sys",
436 		"wbpcm.sys",
437 		"wbusb.sys",
438 		"wdmaud.sys",
439 		"win32k.sys",
440 		"wmilib.sys",
441 		"wpdusb.sys",
442 		"ws2ifsl.sys",
443 		"wstcodec.sys",
444 		"wudfpf.sys",
445 		"wudfrd.sys",
446 	};
447 
448 	return sys_files[myrandom() % (sizeof(sys_files) / sizeof(char *))];
449 }
450 
bsod(WINDOW * win)451 void bsod(WINDOW *win)
452 {
453 	int y, x;
454 	char *sys_file = random_sys_file();
455 
456 	werase(win);
457 
458 	scrollok(win, FALSE);
459 	wbkgdset(win, ' ' | COLOR_PAIR(1) | A_BOLD);
460 	for(y=0; y<LINES; y++)
461 	{
462 		for(x=0; x<COLS; x++)
463 			mvwprintw(win, y, x, " ");
464 	}
465 	wmove(win, 0, 0);
466 
467 	wattron(win, COLOR_PAIR(1));
468 	wattron(win, A_BOLD);
469 
470 	wprintw(win, "\n");
471 	wprintw(win, "A problem has been detected and Windows has been shut down to prevent damage\n");
472 	wprintw(win, "to your computer.\n");
473 	wprintw(win, "\n");
474 	wprintw(win, "The problem seems to be caused by the following file: %s\n", sys_file);
475 	wprintw(win, "\n");
476 	wprintw(win, "%s\n", random_error());
477 	wprintw(win, "\n");
478 	wprintw(win, "If this is the first time you've seen this Stop error screen,\n");
479 	wprintw(win, "restart your computer. If this screen appears again, follow\n");
480 	wprintw(win, "these steps:\n");
481 	wprintw(win, "\n");
482 	wprintw(win, "Check to make sure any new hardware or software is properly installed.\n");
483 	wprintw(win, "If this is a new installation, ask your hardware or software manufacturer\n");
484 	wprintw(win, "for any Windows updates you might need.\n");
485 	wprintw(win, "\n");
486 	wprintw(win, "If problems continue, disable or remove any newly installed hardware\n");
487 	wprintw(win, "or software. Disable BIOS memory options such as caching or shadowing.\n");
488 	wprintw(win, "If you need to use Safe Mode to remove or disable components, restart\n");
489 	wprintw(win, "your computer, press F8 to select Advanced Startup Options, and then\n");
490 	wprintw(win, "select Safe Mode.\n");
491 	wprintw(win, "\n");
492 	wprintw(win, "Technical information:\n");
493 	wprintw(win, "\n");
494 	wprintw(win, "*** STOP: 0x%08x (0x%08x,0x%08x,0x%08x,0x%08x)\n", random_32bit_value(), random_32bit_value(), random_32bit_value(), random_32bit_value(), random_32bit_value());
495 	wprintw(win, "\n");
496 	wprintw(win, "\n");
497 	wprintw(win, "***  %s - Address 0x%08x base at 0x%08x, DateStamp %08x\n", sys_file, random_32bit_value(), random_32bit_value(), random_32bit_value());
498 
499 	wattroff(win, A_BOLD);
500 	wattroff(win, COLOR_PAIR(1));
501 
502 	wrefresh(win);
503 	doupdate();
504 }
505 
main(int argc,char * argv[])506 int main(int argc, char *argv[])
507 {
508 	srand48((int)time(NULL) + (int)getpid());
509 
510 	initscr();
511 	start_color();
512 	init_pair(1, COLOR_WHITE, COLOR_BLUE);
513 
514 	bsod(stdscr);
515 
516 	getch();
517 	endwin();
518 
519 	fprintf(stderr, "\n\n\n\n\nbsod, (C) 2007 by folkert@vanheusden.com\n\n");
520 
521 	return 0;
522 }
523