Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfromraw.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
1.7.6.1
|