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.
 
 
 
 
 
 

137 lines
3.6 KiB

typedef std::vector<String_t> StringVector_t;
VOID ThrowLastWin32Error();
VOID Throw(PCWSTR);
class BuildFlavor_t;
class Error_t;
class FindFirstFileError_t;
class DelayloadTool_t;
class File_t;
class Image_t;
class Error_t
{
public:
};
class FindFirstFileError_t : public Error_t
{
public:
HRESULT m_hresult;
DWORD m_dwLastError;
String_t m_strParameter;
};
VOID
CollectDirectoryPathsNonRecursively(
const String_t& directory,
StringVector_t& paths
);
typedef BOOL (CALLBACK * PFN_COLLECTION_FILE_PATHS_RECURSIVELY_FILTER)(PVOID FilterContext, PCWSTR Directory, WIN32_FIND_DATAW * wfd);
VOID
CollectFilePathsRecursivelyHelper(
const String_t& directory,
StringVector_t& paths,
PFN_COLLECTION_FILE_PATHS_RECURSIVELY_FILTER Filter,
PVOID FilterContext,
WIN32_FIND_DATAW& wfd
);
VOID
CollectFilePathsRecursively(
const String_t& directory,
StringVector_t& paths,
PFN_COLLECTION_FILE_PATHS_RECURSIVELY_FILTER Filter = NULL,
PVOID FilterContext = NULL
);
class DelayloadTool_t
{
private:
typedef DelayloadTool_t This_t;
DelayloadTool_t(const DelayloadTool_t&);
VOID operator=(const DelayloadTool_t&);
public:
~DelayloadTool_t()
{
m_XmlWriter.Release();
m_XmlAttributes.Release();
}
DelayloadTool_t() { }
typedef String_t FilePath_t;
typedef std::vector<FilePath_t> FilePaths_t;
VOID ProcessBuild(const BuildFlavor_t& b);
VOID ProcessFile(const FilePath_t& root, const FilePath_t& f);
VOID Main(const StringVector_t& args);
F::CXmlWriter m_XmlWriter;
F::CXmlAttributes m_XmlAttributes;
std::vector<BYTE> m_HeadersBuffer;
ULONG m_OffsetToPe;
PIMAGE_SECTION_HEADER m_HintSection;
CFileStream m_OutFileStream;
PIMAGE_OPTIONAL_HEADER32 m_OptionalHeader32;
PIMAGE_OPTIONAL_HEADER64 m_OptionalHeader64;
PIMAGE_NT_HEADERS GetNtHeaders() { return reinterpret_cast<PIMAGE_NT_HEADERS>(&m_HeadersBuffer[m_OffsetToPe]); }
PVOID GetMappedBase() { return &m_HeadersBuffer[0]; }
SIZE_T GetSizeOfPointer() { return (m_OptionalHeader32 ? 4 : m_OptionalHeader64 ? 8 : ~0); }
String_t ReadOneDelayload(HANDLE FileHandle);
};
#define GET_OPTIONAL_HEADER_FIELD(o32, o64, f) ((o32) ? (o32)->f : (o64)->f)
VOID DelayloadToolAssertFailed(const char* Expression, const char* File, unsigned long Line);
VOID DelayloadToolInternalErrorCheckFailed(const char* Expression, const char* File, unsigned long Line);
String_t NumberToString(ULONG Number, PCWSTR Format = L"0x%lx");
String_t GetLastErrorString();
String_t RemoveOptionChar(const String_t& s);
VOID __cdecl Error(const wchar_t* s, ...);
String_t GetEnv(PCWSTR s);
String_t FindLatestReleaseOnServer(const String_t& Server);
BOOL DelayloadTool_Filter(PVOID FilterContext, PCWSTR Directory, WIN32_FIND_DATAW * wfd);
class BuildFlavor_t
{
public:
WCHAR Name[12];
WCHAR Processor[8];
WCHAR ChkOrFre[8];
WCHAR ReleaseServer[12]; // or "local"
String_t * ActualRoot;
};
class File_t
{
public:
String_t m_FullPath;
String_t m_RelativePath;
String_t m_LeafPath;
String_t m_Error;
};
class Delayload_t
{
public:
String_t m_LeafPath;
};
class Image_t : public File_t
{
public:
std::vector<Delayload_t> m_Delayloads;
};
VOID SeekTo(HANDLE FileHandle, ULONG64 Offset);
VOID SeekForward(HANDLE FileHandle, ULONG64 Offset);
VOID SeekBackward(HANDLE FileHandle, LONG64 Offset);
VOID Read(HANDLE FileHandle, VOID * Buffer, ULONG BytesToRead);