Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

175 lines
4.8 KiB

//----------------------------------------------------------------------------
//
// Image information.
//
// Copyright (C) Microsoft Corporation, 2001-2002.
//
//----------------------------------------------------------------------------
#ifndef __IMAGE_HPP__
#define __IMAGE_HPP__
#define UNKNOWN_IMAGE_NAME "Unknown_Module"
enum IMAGE_SYM_STATE
{
ISS_UNKNOWN,
ISS_MATCHED,
ISS_MISMATCHED_SYMBOLS,
ISS_UNKNOWN_TIMESTAMP,
ISS_UNKNOWN_CHECKSUM,
ISS_BAD_CHECKSUM
};
enum INAME
{
INAME_IMAGE_PATH,
INAME_IMAGE_PATH_TAIL,
INAME_MODULE,
};
// Special value meaning all images for some functions which
// accept image base qualifiers.
#define IMAGE_BASE_ALL ((ULONG64)-1)
struct MODULE_ALIAS_LIST
{
ULONG Length;
PCSTR* Aliases;
PCSTR BaseModule;
};
enum
{
MODALIAS_KERNEL,
MODALIAS_HAL,
MODALIAS_KDCOM,
MODALIAS_COUNT
};
extern MODULE_ALIAS_LIST g_AliasLists[];
MODULE_ALIAS_LIST* FindModuleAliasList(PCSTR ImageName,
PBOOL NameInList);
//----------------------------------------------------------------------------
//
// ImageInfo.
//
//----------------------------------------------------------------------------
#define MAX_MODULE 64
class ImageInfo
{
public:
ImageInfo(ProcessInfo* Process, PSTR ImagePath, ULONG64 Base, BOOL Link);
~ImageInfo(void);
ProcessInfo* m_Process;
ImageInfo* m_Next;
ULONG m_Linked:1;
ULONG m_Unloaded:1;
ULONG m_FileIsDemandMapped:1;
ULONG m_MapAlreadyFailed:1;
ULONG m_CorImage:1;
ULONG m_UserMode:1;
HANDLE m_File;
DWORD64 m_BaseOfImage;
DWORD m_SizeOfImage;
DWORD m_CheckSum;
DWORD m_TimeDateStamp;
IMAGE_SYM_STATE m_SymState;
CHAR m_ModuleName[MAX_MODULE];
CHAR m_OriginalModuleName[MAX_MODULE];
CHAR m_ImagePath[MAX_IMAGE_PATH];
// Executable image mapping information for images
// mapped with minidumps.
CHAR m_MappedImagePath[MAX_IMAGE_PATH];
PVOID m_MappedImageBase;
class MappedMemoryMap* m_MemMap;
ULONG m_TlsIndex;
ULONG m_MachineType;
void DeleteResources(BOOL FullDelete);
BOOL LoadExecutableImageMemory(MappedMemoryMap* MemMap, BOOL Verbose);
void UnloadExecutableImageMemory(void);
BOOL DemandLoadImageMemory(BOOL CheckIncomplete, BOOL Verbose);
HRESULT GetTlsIndex(void);
ULONG GetMachineTypeFromHeader(void);
ULONG CvRegToMachine(CV_HREG_e CvReg);
void OutputVersionInformation(void);
void ValidateSymbolLoad(PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 DefLoad);
HRESULT FindSysAssert(ULONG64 Offset,
PSTR FileName,
ULONG FileNameChars,
PULONG Line,
PSTR AssertText,
ULONG AssertTextChars);
ULONG GetMachineType(void)
{
if (m_MachineType != IMAGE_FILE_MACHINE_UNKNOWN)
{
return m_MachineType;
}
else
{
return GetMachineTypeFromHeader();
}
}
void ReloadSymbols(void);
void FillModuleParameters(PDEBUG_MODULE_PARAMETERS Params);
private:
BOOL MapImageRegion(MappedMemoryMap* MemMap,
PVOID FileMapping,
ULONG Rva, ULONG Size, ULONG RawDataOffset,
BOOL AllowOverlap);
};
PSTR UnknownImageName(ULONG64 ImageBase, PSTR Buffer, ULONG BufferChars);
PSTR ValidateImagePath(PSTR ImagePath, ULONG ImagePathChars,
ULONG64 ImageBase,
PSTR AnsiBuffer, ULONG AnsiBufferChars);
PSTR ConvertAndValidateImagePathW(PWSTR ImagePath, ULONG ImagePathChars,
ULONG64 ImageBase,
PSTR AnsiBuffer, ULONG AnsiBufferChars);
PSTR PrepareImagePath(PSTR ImagePath);
PVOID
FindImageFile(IN ProcessInfo* Process,
IN PCSTR ImagePath,
IN ULONG SizeOfImage,
IN ULONG CheckSum,
IN ULONG TimeDateStamp,
OUT HANDLE* FileHandle,
OUT PSTR MappedImagePath);
BOOL DemandLoadReferencedImageMemory(ProcessInfo* Process,
ULONG64 Addr, ULONG Size);
BOOL
GetModnameFromImage(ProcessInfo* Process,
ULONG64 BaseOfDll,
HANDLE File,
LPSTR Name,
ULONG NameSize,
BOOL SearchExportFirst);
BOOL
GetHeaderInfo(IN ProcessInfo* Process,
IN ULONG64 BaseOfDll,
OUT LPDWORD CheckSum,
OUT LPDWORD TimeDateStamp,
OUT LPDWORD SizeOfImage);
#endif // #ifndef __IMAGE_HPP__