SYSTABLE.C
资源名称:C.rar [点击查看]
上传用户:qq5388545
上传日期:2022-07-04
资源大小:29849k
文件大小:2k
源码类别:

界面编程

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <dos.h>
  3. #include <stdlib.h>
  4. void main (void)
  5.   {
  6.      union REGS inregs, outregs;
  7.      struct SREGS segs;
  8.      int i, j;
  9.      int structure_size;
  10.      struct SystemTableEntry {
  11.       struct SystemTableEntry far *next; // Next SFT entry
  12.       unsigned file_count;    // Files in table 
  13.       unsigned handle_count;  // Handles to this file
  14.       unsigned open_mode;     // File open mode
  15.       char file_attribute;    // Attribute byte
  16.       unsigned local_remote;  // Bit 15 set means remote
  17.       unsigned far *DPD;      // Drive parameter block
  18.       unsigned starting_cluster;
  19.       unsigned time_stamp;
  20.       unsigned date_stamp;
  21.       long file_size;
  22.       long current_offset;
  23.       unsigned relative_cluster;  
  24.       long directory_sector_number;
  25.       char directory_entry_offset;
  26.       char filename_ext[11];   // No period, space padded
  27.       // Ignore SHARE fields for example 
  28.      } far *table_ptr, far *file;   
  29.      long far *system_table; 
  30.      // Get DOS version 
  31.      inregs.x.ax = 0x3001;
  32.      intdos (&inregs, &outregs);
  33.      if (outregs.h.al < 3)
  34.        {
  35.  printf ("This program requires DOS version 3 or latern");
  36.  exit (1);
  37.        }
  38.      else if (outregs.h.al == 3)
  39.        structure_size = 0x35;
  40.      else if (outregs.h.al >= 4)
  41.        structure_size = 0x3B;    
  42.      // Get the list of lists pointer
  43.      inregs.h.ah = 0x52;
  44.      intdosx (&inregs, &outregs, &segs);
  45.      // The pointer to the system file table is at offset 4
  46.      system_table = MK_FP(segs.es, outregs.x.bx + 4);  
  47.      table_ptr = (struct SystemTableEntry far *) *system_table;
  48.      do {
  49.        printf ("%d entries in tablen", table_ptr->file_count);
  50.        for (i = 0; i < table_ptr->file_count; i++)
  51. {
  52.   file = MK_FP(FP_SEG(table_ptr), FP_OFF(table_ptr) +
  53.     (i * structure_size));
  54.   if (file->handle_count)
  55.     {   
  56.        for (j = 0; j < 8; j++)
  57.  if (file->filename_ext[j] != ' ')
  58.    putchar(file->filename_ext[j]);
  59.  else 
  60.    break;  
  61.        
  62.        if (file->filename_ext[8] != ' ')
  63.  putchar('.');
  64.  
  65.        for (j = 8; j < 11; j++)
  66.  if (file->filename_ext[j] != ' ')
  67.    putchar(file->filename_ext[j]);
  68.    
  69.        printf ("  %ld bytes %x attribute %d referencesn",
  70.  file->file_size, file->file_attribute,
  71.  file->handle_count); 
  72.    }
  73. }
  74.       table_ptr = table_ptr->next;
  75.     } while (FP_OFF(table_ptr) != 0xFFFF);
  76.   }