31   #pragma warning ( disable : 4273 )    33   #define pclose _pclose     34   #define fileno _fileno     45 #if !defined(AFX_LIBSYMBOLINFO_H__1A7003B4_BA53_11D1_AE46_1CFB51000000__INCLUDED_)    46 #define AFX_LIBSYMBOLINFO_H__1A7003B4_BA53_11D1_AE46_1CFB51000000__INCLUDED_    50 #endif // _MSC_VER >= 1000    64   BOOL 
DumpSymbols(LPTSTR lpszLibPathName, std::ostream& pFile);
    71   BOOL 
Dump(LPTSTR lpszLibPathName, std::ostream& pFile); 
    86   PVOID   
GetBase( 
void ){ 
return m_pMemoryMappedFileBase; }
    94   HANDLE      m_hFileMapping; 
    95   PVOID       m_pMemoryMappedFileBase;
   102 #endif // !defined(AFX_LIBSYMBOLINFO_H__1A7003B4_BA53_11D1_AE46_1CFB51000000__INCLUDED_)   106 #define MakePtr( cast, ptr, addValue ) (cast)( (DWORD)(ptr) + (DWORD)(addValue))   133   if(lpszLibPathName == NULL || pFile.bad() ) {
   134     assert(lpszLibPathName != NULL);
   135     assert(pFile.good());
   136     m_strErrorMsg.assign(
"NULL <lpszLibPathName> or Invalid file handle.");
   140   if(!
Dump(lpszLibPathName, pFile))  
return FALSE;
   169   PSTR pArchiveStartString = (PSTR)libFile.
GetBase();
   171   if ( 0 != strncmp( pArchiveStartString, IMAGE_ARCHIVE_START,
   172                        IMAGE_ARCHIVE_START_SIZE )  )  {
   179   PIMAGE_ARCHIVE_MEMBER_HEADER pMbrHdr;
   180   pMbrHdr = 
MakePtr( PIMAGE_ARCHIVE_MEMBER_HEADER, pArchiveStartString,
   181                      IMAGE_ARCHIVE_START_SIZE );
   184   PDWORD pcbSymbols = (PDWORD)(pMbrHdr + 1);  
   192   PDWORD pMemberOffsets = pcbSymbols + 1;     
   196   PSTR pszSymbolName = 
MakePtr( PSTR, pMemberOffsets, 4 * cSymbols );
   201   for ( 
unsigned i = 0; i < cSymbols; i++ )
   213       string symbol(pszSymbolName);
   215         pFile << symbol << endl;
   222     pszSymbolName += strlen(pszSymbolName) + 1;
   233   if ( 0 == strncmp( pszSymbolName, 
"__IMPORT_DESCRIPTOR_", 20 ) )
   236   if ( 0 == strncmp( pszSymbolName, 
"__NULL_IMPORT_DESCRIPTOR", 24 ) )
   239   if ( strstr( pszSymbolName, 
"_NULL_THUNK_DATA" ) )
   250   if ( symbolName.substr(0,3) == 
"_CT" ) 
return FALSE;
   251   if ( symbolName.substr(0,3) == 
"_TI" ) 
return FALSE;
   253   if ( symbolName.substr(0,2) == 
"__" ) 
   255   if ( symbolName.substr(0,3) == 
"??_" && symbolName[3] != 
'0') 
   257   if( symbolName[0] == 
'_') {
   258     symbolName.erase(0, 1);  
   261   if (symbolName.find (
"detail@boost") != string::npos )
   263   if (symbolName.find (
"details@boost") != string::npos ) 
   275   temp |= bigEndian >> 24;
   276   temp |= ((bigEndian & 0x00FF0000) >> 8);
   277   temp |= ((bigEndian & 0x0000FF00) << 8);
   278   temp |= ((bigEndian & 0x000000FF) << 24);
   295    m_hFile = INVALID_HANDLE_VALUE;
   297    m_pMemoryMappedFileBase = 0;
   301    m_hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
   302                        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE)0);
   304    if ( m_hFile == INVALID_HANDLE_VALUE )
   309     m_cbFile = ::GetFileSize( m_hFile, 0 );
   311    m_hFileMapping = CreateFileMapping(m_hFile,NULL, PAGE_READONLY, 0, 0,NULL);
   312    if ( m_hFileMapping == 0 )
   315        CloseHandle(m_hFile);
   316        m_hFile = INVALID_HANDLE_VALUE;
   320     m_pMemoryMappedFileBase = (PCHAR)MapViewOfFile( m_hFileMapping,
   321                                                    FILE_MAP_READ, 0, 0, 0);
   322     if ( m_pMemoryMappedFileBase == 0 )
   325        CloseHandle(m_hFileMapping);
   327        CloseHandle(m_hFile);
   328        m_hFile = INVALID_HANDLE_VALUE;
   338     if ( m_pMemoryMappedFileBase )
   339         UnmapViewOfFile( m_pMemoryMappedFileBase );
   341     if ( m_hFileMapping )
   342         CloseHandle( m_hFileMapping );
   344     if ( m_hFile != INVALID_HANDLE_VALUE )
   345         CloseHandle( m_hFile ); 
   352     cerr << 
"Usage: genwindef [-l <dllname>] [-o <output-file> | exports.def]  <obj or lib filenames>" << endl;
   359 int main ( 
int argc, 
char** argv )
   362   string outfile(
"exports.def");
   363   string library(
"UnknownLib");
   370   while (argv[arg][0] == 
'-') {
   371     if (strcmp(argv[arg], 
"--") == 0) {
   374     else if (strcmp(argv[arg], 
"-l") == 0) {
   379     else if (strcmp(argv[arg], 
"-o") == 0) {
   387   for (arg; arg < argc; arg++) {
   388      objfiles += argv[arg];
   389      if( arg+1 < argc) objfiles += 
" ";
   393   ofstream out(outfile.c_str());
   395     cerr << 
"windef: Error opening file " << outfile << endl;
   398   out << 
"LIBRARY " << library << endl;
   399   out << 
"EXPORTS" << endl;
   401   libsymbols.
DumpSymbols(const_cast<char*>(objfiles.c_str()), out);
 
std::string GetLastError() const
 
std::string m_strResultsString
 
~MEMORY_MAPPED_FILE(void)
 
#define MakePtr(cast, ptr, addValue)
 
BOOL Dump(LPTSTR lpszLibPathName, std::ostream &pFile)
 
int main(int argc, char **argv)
 
std::string m_strErrorMsg
 
BOOL IsFiltedSymbol(std::string &pszSymbolName)
 
MEMORY_MAPPED_FILE * PMEMORY_MAPPED_FILE
 
DWORD ConvertBigEndian(DWORD bigEndian)
 
MEMORY_MAPPED_FILE(PSTR pszFileName)
 
BOOL DumpSymbols(LPTSTR lpszLibPathName, std::ostream &pFile)
 
virtual ~CLibSymbolInfo()
 
BOOL IsRegularLibSymbol(PSTR pszSymbolName)