home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 099 / SH164AS.ZIP / PATCH.LIB < prev    next >
Text File  |  1992-02-28  |  3KB  |  96 lines

  1.  MS-DOS Shell Version 1.6    Patch.Lib            March 1990
  2.  
  3.  MS-DOS SHELL - Copyright (c) 1990 Data Logic Limited and Charles Forsyth
  4.  
  5.  This code is based on (in part) the shell program written by Charles
  6.  Forsyth and is subject to the following copyright restrictions:
  7.  
  8.  1.  Redistribution and use in source and binary forms are permitted
  9.      provided that the above copyright notice is duplicated in the
  10.      source form and the copyright notice in file sh6.c is displayed
  11.      on entry to the program.
  12.  
  13.  2.  The sources (or parts thereof) or objects generated from the
  14.      sources (or parts of sources) cannot be sold under any circumstances.
  15.  
  16.     $Header: patch.lib 1.1 90/03/14 11:47:03 MS_user Exp $
  17.  
  18.     $Log:    patch.lib $
  19.     Revision 1.1  90/03/14  11:47:03  MS_user
  20.     Initial revision
  21.     
  22. ________________________________________________________________________________
  23.  
  24. This document provides a set of instructions for modifying the Microsoft C
  25. v5.1 Library function open so that the O_NOINHERIT flag is passed to MSDOS.
  26. The CodeView commands are given where appropriate.
  27.  
  28. 1.  Using CodeView (or a similar debugger), set a breakpoint on the call to
  29.     open in S_open.
  30.  
  31.     - v S_open
  32.     move cursor to open
  33.     - <F9>
  34.  
  35. 2.  Execute to the break point.  You may have to enter a command which opens
  36.     a file.
  37.  
  38.     - g
  39.  
  40. 3.  Display the Assembly listing
  41.  
  42.     - <F3>
  43.  
  44. 4.  Single step the debugger into the open function
  45.  
  46.     - <F8> (5 times on my system)
  47.  
  48. 5.  Page through the assembler listing until you find the Interrupt 21 call.
  49.     In my version, this is about 16 assembler instructions into the open
  50.     function.  The call sequence is:
  51.  
  52.     mov        byte ptr [bp - 4], 80H
  53.     push    ds
  54.     lds        dx, dword ptr [bp + 6]
  55.     and        al, 03
  56.     or        al, bh
  57.     mov        ah, 3d
  58.     int        21H
  59.  
  60. 6.  Record the machine code values for this sequence (especially the last 4
  61.     instructions).  On my system these are:
  62.  
  63.     2403    and        al, 03
  64.     0AC7    or        al, bh
  65.     B43D    mov        ah, 3d
  66.     CD21    int        21H
  67.  
  68. 7.  Exit CodeView
  69.  
  70. 8.  Extract the module open.obj from your library.
  71.  
  72.     lib llibce "*open.obj;"
  73.  
  74. 9.  Using an appropriate binary editor (or hex dump program) look for the
  75.     sequence of machine code values leading up to the interrupt (see step 6
  76.     above).  In my version of open.obj, it starts at offset 0x0f2 in the
  77.     file.  Change the AND AL, 03 instruction to AND AL, 83 by changing 24
  78.     03 to 24 83.
  79.  
  80.     You may have to write a little program to open the file in binary mode,
  81.     seek to the appropriate location and write 0x83 to the file and close
  82.     it.
  83.  
  84. 10. Re-load the module in the library (you may want to keep a copy of the
  85.     original module/library in case of problems).
  86.  
  87.     lib llibce "-+open.obj;"
  88.  
  89. 11. Re-link the shell
  90.  
  91. 12. Check that the AND AL, 03 has become an AND AL, 83 using steps 1 to 5.
  92.  
  93. Note:
  94.     Microsoft, MSDOS and CodeView are registered trademarks of Microsoft
  95.     Corporation
  96.