ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

fromraw.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         ReactOS kernel
00004  * FILE:            lib/rossym/frommem.c
00005  * PURPOSE:         Creating rossym info from an in-memory image
00006  *
00007  * PROGRAMMERS:     Ge van Geldorp (gvg@reactos.com)
00008  */
00009 
00010 #define NTOSAPI
00011 #include <ntddk.h>
00012 #include <reactos/rossym.h>
00013 #include "rossympriv.h"
00014 
00015 #define NDEBUG
00016 #include <debug.h>
00017 
00018 BOOLEAN
00019 RosSymCreateFromRaw(PVOID RawData, ULONG_PTR DataSize, PROSSYM_INFO *RosSymInfo)
00020 {
00021   PROSSYM_HEADER RosSymHeader;
00022 
00023   RosSymHeader = (PROSSYM_HEADER) RawData;
00024   if (RosSymHeader->SymbolsOffset < sizeof(ROSSYM_HEADER)
00025       || RosSymHeader->StringsOffset < RosSymHeader->SymbolsOffset + RosSymHeader->SymbolsLength
00026       || DataSize < RosSymHeader->StringsOffset + RosSymHeader->StringsLength
00027       || 0 != (RosSymHeader->SymbolsLength % sizeof(ROSSYM_ENTRY)))
00028     {
00029       DPRINT1("Invalid ROSSYM_HEADER\n");
00030       return FALSE;
00031     }
00032 
00033   /* Copy */
00034   *RosSymInfo = RosSymAllocMem(sizeof(ROSSYM_INFO) + RosSymHeader->SymbolsLength
00035                                + RosSymHeader->StringsLength + 1);
00036   if (NULL == *RosSymInfo)
00037     {
00038       DPRINT1("Failed to allocate memory for rossym\n");
00039       return FALSE;
00040     }
00041   (*RosSymInfo)->Symbols = (PROSSYM_ENTRY)((char *) *RosSymInfo + sizeof(ROSSYM_INFO));
00042   (*RosSymInfo)->SymbolsCount = RosSymHeader->SymbolsLength / sizeof(ROSSYM_ENTRY);
00043   (*RosSymInfo)->Strings = (PCHAR) *RosSymInfo + sizeof(ROSSYM_INFO) + RosSymHeader->SymbolsLength;
00044   (*RosSymInfo)->StringsLength = RosSymHeader->StringsLength;
00045   memcpy((*RosSymInfo)->Symbols, (char *) RosSymHeader + RosSymHeader->SymbolsOffset,
00046          RosSymHeader->SymbolsLength);
00047   memcpy((*RosSymInfo)->Strings, (char *) RosSymHeader + RosSymHeader->StringsOffset,
00048          RosSymHeader->StringsLength);
00049   /* Make sure the last string is null terminated, we allocated an extra byte for that */
00050   (*RosSymInfo)->Strings[(*RosSymInfo)->StringsLength] = '\0';
00051 
00052   return TRUE;
00053 }
00054 
00055 /* EOF */

Generated on Sat May 26 2012 04:35:19 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.