|
|
1.1 ! root 1: /* ! 2: * Example of DOSGETINFOSEG usage ! 3: * ! 4: * Gets the local and global data segments and displays some of their contents ! 5: * ! 6: * Copyright (C) Microsoft Corp. 1986 ! 7: */ ! 8: ! 9: #include "doscalls.h" ! 10: ! 11: struct gdtinfoarea{ ! 12: unsigned long time; ! 13: unsigned long milliseconds; ! 14: unsigned char hours; ! 15: unsigned char minutes; ! 16: unsigned char seconds; ! 17: unsigned char hundreths; ! 18: unsigned timezone; ! 19: unsigned timer_interval; ! 20: unsigned char day; ! 21: unsigned char month; ! 22: unsigned year; ! 23: unsigned char day_of_week; ! 24: unsigned char major_version; ! 25: unsigned char minor_version; ! 26: unsigned char revision_number; ! 27: unsigned char current_screen_group; ! 28: unsigned char max_num_of_screengrps; ! 29: unsigned char huge_selector_shift_count; ! 30: unsigned char protect_mode_indicator; ! 31: unsigned foreground_process_id; ! 32: unsigned char dynamic_variation_flag; ! 33: unsigned char maxwait; ! 34: unsigned minimum_timeslice; ! 35: unsigned maximum_timeslice; ! 36: unsigned boot_drive; ! 37: unsigned char reserved[32]; ! 38: }; ! 39: ! 40: ! 41: struct ldtinfoarea{ ! 42: unsigned current_process_pid; ! 43: unsigned parent_pid; ! 44: unsigned priority_of_current_thread; ! 45: unsigned thread_id_of_current_thread; ! 46: unsigned screen_group; ! 47: unsigned subscreen_group; ! 48: unsigned current_process_is_in_fg; ! 49: }; ! 50: ! 51: main() ! 52: { ! 53: struct gdtinfoarea *gdt; ! 54: struct ldtinfoarea *ldt; ! 55: unsigned gdt_handle, ldt_handle; ! 56: ! 57: /* get the infoseg handles */ ! 58: DOSGETINFOSEG(&gdt_handle, &ldt_handle); ! 59: ! 60: /* convert the handles into far pointers */ ! 61: gdt = (struct gdtinfoarea *)((long)gdt_handle << 16); ! 62: ldt = (struct ldtinfoarea *)((long)ldt_handle << 16); ! 63: ! 64: /* display the contents of the segments */ ! 65: printf("This is thread %u of process %u\n", ! 66: ldt->thread_id_of_current_thread, ! 67: ldt->current_process_pid); ! 68: printf("The current time is %u:%2u:%2u.%2u\n", ! 69: gdt->hours, gdt->minutes, gdt->seconds, gdt->hundreths); ! 70: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.