home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / image / symcvt / symcvt.c < prev    next >
C/C++ Source or Header  |  1997-10-05  |  3KB  |  122 lines

  1. /*++
  2.  
  3.  
  4. Copyright 1996 - 1997 Microsoft Corporation
  5.  
  6. Module Name:
  7.  
  8.     symcvt.c
  9.  
  10. Abstract:
  11.  
  12.     This module is the shell for the SYMCVT DLL.  The DLL's purpose is
  13.     to convert the symbols for the specified image.  The resulting
  14.     debug data must conform to the CODEVIEW spec.
  15.  
  16.     Currently this DLL converts COFF symbols and C7/C8 MAPTOSYM SYM files.
  17.  
  18. Author:
  19.  
  20.     Wesley A. Witt (wesw) 19-April-1993
  21.  
  22. Environment:
  23.  
  24.     Win32, User Mode
  25.  
  26. --*/
  27.  
  28. #include <windows.h>
  29. #include <stdlib.h>
  30. #include <stdio.h>
  31. #include <string.h>
  32. #define _SYMCVT_SOURCE_
  33. #include "symcvt.h"
  34.  
  35. PUCHAR
  36. ConvertSymbolsForImage(
  37.                        HANDLE      hFile,
  38.                        char *      fname
  39.     )
  40. /*++
  41.  
  42. Routine Description:
  43.  
  44.     Calls the appropriate conversion routine based on the file contents.
  45.  
  46.  
  47. Arguments:
  48.  
  49.     hFile         -  file handle for the image (may be NULL)
  50.     fname         -  file name for the image (may not have correct path)
  51.  
  52.  
  53. Return Value:
  54.  
  55.     NULL             - could not convert the symbols
  56.     Valid Pointer    - a pointer to malloc'ed memory that contains the
  57.                        CODEVIEW symbols
  58.  
  59. --*/
  60. {
  61.     POINTERS   p;
  62.     char       szDrive    [_MAX_DRIVE];
  63.     char       szDir      [_MAX_DIR];
  64.     char       szFname    [_MAX_FNAME];
  65.     char       szExt      [_MAX_EXT];
  66.     char       szSymName  [MAX_PATH];
  67.     PUCHAR     rVal;
  68.  
  69.  
  70.     if (!MapInputFile( &p, hFile, fname)) {
  71.  
  72.         rVal = NULL;
  73.  
  74.     } else if (CalculateNtImagePointers( &p.iptrs )) {
  75.  
  76.         //
  77.         // we were able to compute the nt image pointers so this must be
  78.         // a nt PE image.  now we must decide if there are coff symbols
  79.         // if there are then we do the cofftocv conversion.
  80.         //
  81.         // btw, this is where someone would convert some other type of
  82.         // symbols that are in a nt PE image. (party on garth..)
  83.         //
  84.  
  85. //      if (!COFF_DIR(&p.iptrs)) {
  86.         if (!p.iptrs.numberOfSymbols) {
  87.             rVal = NULL;
  88.         } else {
  89.             ConvertCoffToCv( &p );
  90.             rVal = p.pCvStart.ptr;
  91.         }
  92.         UnMapInputFile( &p );
  93.  
  94.     } else {
  95.  
  96.         UnMapInputFile ( &p );
  97.  
  98.         _splitpath( fname, szDrive, szDir, szFname, szExt );
  99.         _makepath( szSymName, szDrive, szDir, szFname, "sym" );
  100.  
  101.         if (!MapInputFile( &p, NULL, szSymName)) {
  102.  
  103.             rVal = NULL;
  104.  
  105.         } else {
  106.  
  107.             //
  108.             // must be a wow/dos app and there is a .sym file so lets to
  109.             // the symtocv conversion
  110.             //
  111.  
  112.             ConvertSymToCv( &p );
  113.             UnMapInputFile( &p );
  114.  
  115.             rVal = p.pCvStart.ptr;
  116.         }
  117.  
  118.     }
  119.  
  120.     return rVal;
  121. }
  122.