windows-nt/Source/XPSP1/NT/base/win32/client/updres.h
2020-09-26 16:20:57 +08:00

224 lines
4.2 KiB
C

/*++
(C) Copyright Microsoft Corporation 1988-1992
Module Name:
updres.h
Author:
Floyd A Rogers 2/7/92
Revision History:
Floyd Rogers
Created
--*/
#define DEFAULT_CODEPAGE 1252
#define MAJOR_RESOURCE_VERSION 4
#define MINOR_RESOURCE_VERSION 0
#define BUTTONCODE 0x80
#define EDITCODE 0x81
#define STATICCODE 0x82
#define LISTBOXCODE 0x83
#define SCROLLBARCODE 0x84
#define COMBOBOXCODE 0x85
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#define MAXSTR (256+1)
//
// An ID_WORD indicates the following WORD is an ordinal rather
// than a string
//
#define ID_WORD 0xffff
//typedef WCHAR *PWCHAR;
typedef struct MY_STRING {
ULONG discriminant; // long to make the rest of the struct aligned
union u {
struct {
struct MY_STRING *pnext;
ULONG ulOffsetToString;
USHORT cbD;
USHORT cb;
WCHAR *sz;
} ss;
WORD Ordinal;
} uu;
} SDATA, *PSDATA, **PPSDATA;
#define IS_STRING 1
#define IS_ID 2
// defines to make deferencing easier
#define OffsetToString uu.ss.ulOffsetToString
#define cbData uu.ss.cbD
#define cbsz uu.ss.cb
#define szStr uu.ss.sz
typedef struct _RESNAME {
struct _RESNAME *pnext; // The first three fields should be the
PSDATA Name; // same in both res structures
ULONG OffsetToData;
PSDATA Type;
ULONG SectionNumber;
ULONG DataSize;
ULONG_PTR OffsetToDataEntry;
USHORT ResourceNumber;
USHORT NumberOfLanguages;
WORD LanguageId;
} RESNAME, *PRESNAME, **PPRESNAME;
typedef struct _RESTYPE {
struct _RESTYPE *pnext; // The first three fields should be the
PSDATA Type; // same in both res structures
ULONG OffsetToData;
struct _RESNAME *NameHeadID;
struct _RESNAME *NameHeadName;
ULONG NumberOfNamesID;
ULONG NumberOfNamesName;
} RESTYPE, *PRESTYPE, **PPRESTYPE;
typedef struct _UPDATEDATA {
ULONG cbStringTable;
PSDATA StringHead;
PRESNAME ResHead;
PRESTYPE ResTypeHeadID;
PRESTYPE ResTypeHeadName;
LONG Status;
HANDLE hFileName;
} UPDATEDATA, *PUPDATEDATA;
//
// Round up a byte count to a power of 2:
//
#define ROUNDUP(cbin, align) (((cbin) + (align) - 1) & ~((align) - 1))
//
// Return the remainder, given a byte count and a power of 2:
//
#define REMAINDER(cbin,align) (((align)-((cbin)&((align)-1)))&((align)-1))
#define CBLONG (sizeof(LONG))
#define BUFSIZE (4L * 1024L)
/* functions for adding/deleting resources to update list */
LONG
AddResource(
IN PSDATA Type,
IN PSDATA Name,
IN WORD Language,
IN PUPDATEDATA pupd,
IN PVOID lpData,
IN ULONG cb
);
PSDATA
AddStringOrID(
LPCWSTR lp,
PUPDATEDATA pupd
);
BOOL
InsertResourceIntoLangList(
PUPDATEDATA pUpd,
PSDATA Type,
PSDATA Name,
PRESTYPE pType,
PRESNAME pName,
INT idLang,
INT fName,
INT cb,
PVOID lpData
);
BOOL
DeleteResourceFromList(
PUPDATEDATA pUpd,
PRESTYPE pType,
PRESNAME pName,
INT idLang,
INT fType,
INT fName
);
/* Prototypes for Enumeration done in BeginUpdateResource */
BOOL
EnumTypesFunc(
HANDLE hModule,
LPWSTR lpType,
LPARAM lParam
);
BOOL
EnumNamesFunc(
HANDLE hModule,
LPWSTR lpName,
LPWSTR lpType,
LPARAM lParam
);
BOOL
EnumLangsFunc(
HANDLE hModule,
LPWSTR lpType,
LPWSTR lpName,
WORD languages,
LPARAM lParam
);
/* Prototypes for genral worker functions in updres.c */
LONG
WriteResFile(
IN HANDLE hUpdate,
IN WCHAR *pDstname
);
VOID
FreeData(
PUPDATEDATA pUpd
);
PRESNAME
WriteResSection(
PUPDATEDATA pUpdate,
INT outfh,
ULONG align,
ULONG cbLeft,
PRESNAME pResSave
);
LONG
PatchRVAs(
int inpfh,
int outfh,
PIMAGE_SECTION_HEADER po32,
ULONG pagedelta,
PIMAGE_NT_HEADERS pNew,
ULONG OldSize);
LONG
PatchDebug(
int inpfh,
int outfh,
PIMAGE_SECTION_HEADER po32DebugOld,
PIMAGE_SECTION_HEADER po32DebugNew,
PIMAGE_SECTION_HEADER po32DebugDirOld,
PIMAGE_SECTION_HEADER po32DebugDirNew,
PIMAGE_NT_HEADERS pOld,
PIMAGE_NT_HEADERS pNew,
ULONG ibMaxDbgOffsetOld,
PULONG pPointerToRawData);