windows-nt/Source/XPSP1/NT/windows/winstate/cobra/utils/inc/icons.h
2020-09-26 16:20:57 +08:00

662 lines
16 KiB
C

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
icons.h
Abstract:
Implements a set of routines for handling icons in ICO, PE and NE files
Author:
Calin Negreanu (calinn) 16-Jum-2000
Revision History:
--*/
#pragma once
//
// Includes
//
// None
//
// Debug constants
//
// None
//
// Strings
//
// None
//
// Constants
//
#define ICON_ICOFILE 0x00000001
#define ICON_PEFILE 0x00000002
#define ICON_NEFILE 0x00000003
//
// Macros
//
// None
//
// Types
//
#pragma pack(push)
#pragma pack(2)
typedef struct {
BYTE Width; // Width, in pixels, of the image
BYTE Height; // Height, in pixels, of the image
BYTE ColorCount; // Number of colors in image (0 if >=8bpp)
BYTE Reserved; // Reserved ( must be 0)
WORD Planes; // Color Planes
WORD BitCount; // Bits per pixel
DWORD BytesInRes; // How many bytes in this resource?
DWORD ImageOffset; // Where in the file is this image?
} ICONDIRENTRY, *PICONDIRENTRY;
typedef struct {
WORD Reserved; // Reserved (must be 0)
WORD Type; // Resource Type (1 for icons)
WORD Count; // How many images?
ICONDIRENTRY Entries[]; // An entry for each image (idCount of 'em)
} ICONDIR, *PICONDIR;
typedef struct {
WORD Reserved; // Reserved (must be 0)
WORD Type; // Resource Type (1 for icons)
WORD Count; // How many images?
} ICONDIRBASE, *PICONDIRBASE;
typedef struct {
BYTE Width; // Width, in pixels, of the image
BYTE Height; // Height, in pixels, of the image
BYTE ColorCount; // Number of colors in image (0 if >=8bpp)
BYTE Reserved; // Reserved
WORD Planes; // Color Planes
WORD BitCount; // Bits per pixel
DWORD BytesInRes; // how many bytes in this resource?
WORD ID; // the ID
} GRPICONDIRENTRY, *PGRPICONDIRENTRY;
typedef struct {
WORD Reserved; // Reserved (must be 0)
WORD Type; // Resource type (1 for icons)
WORD Count; // How many images?
GRPICONDIRENTRY Entries[]; // The entries for each image
} GRPICONDIR, *PGRPICONDIR;
typedef struct {
WORD Reserved; // Reserved (must be 0)
WORD Type; // Resource type (1 for icons)
WORD Count; // How many images?
} GRPICONDIRBASE, *PGRPICONDIRBASE;
#pragma pack( pop )
typedef struct {
BYTE Width;
BYTE Height;
BYTE ColorCount;
WORD Planes;
WORD BitCount;
DWORD Size;
WORD Id;
PBYTE Image;
} ICON_IMAGE, *PICON_IMAGE;
typedef struct {
PMHANDLE Pool;
WORD IconsCount;
PICON_IMAGE Icons[];
} ICON_GROUP, *PICON_GROUP;
typedef struct {
DWORD DataSize;
PBYTE Data;
} ICON_SGROUP, *PICON_SGROUP;
typedef struct {
PICON_GROUP IconGroup;
PCSTR ResourceId;
WORD Index;
// private members, do not touch
DWORD FileType;
BOOL FreeHandle;
HANDLE ModuleHandle;
GROWBUFFER Buffer;
MULTISZ_ENUMA MultiSzEnum;
} ICON_ENUMA, *PICON_ENUMA;
typedef struct {
PICON_GROUP IconGroup;
PCWSTR ResourceId;
WORD Index;
// private members, do not touch
DWORD FileType;
BOOL FreeHandle;
HANDLE ModuleHandle;
GROWBUFFER Buffer;
MULTISZ_ENUMW MultiSzEnum;
} ICON_ENUMW, *PICON_ENUMW;
//
// Globals
//
// None
//
// Macro expansion list
//
// None
//
// Function prototypes
//
VOID
IcoReleaseResourceIdA (
PCSTR ResourceId
);
VOID
IcoReleaseResourceIdW (
PCWSTR ResourceId
);
VOID
IcoReleaseIconGroup (
IN PICON_GROUP IconGroup
);
VOID
IcoReleaseIconSGroup (
IN OUT PICON_SGROUP IconSGroup
);
BOOL
IcoSerializeIconGroup (
IN PICON_GROUP IconGroup,
OUT PICON_SGROUP IconSGroup
);
PICON_GROUP
IcoDeSerializeIconGroup (
IN PICON_SGROUP IconSGroup
);
PICON_GROUP
IcoExtractIconGroupFromIcoFileEx (
IN HANDLE IcoFileHandle
);
PICON_GROUP
IcoExtractIconGroupFromIcoFileA (
IN PCSTR IcoFile
);
PICON_GROUP
IcoExtractIconGroupFromIcoFileW (
IN PCWSTR IcoFile
);
BOOL
IcoWriteIconGroupToIcoFileEx (
IN HANDLE IcoFileHandle,
IN PICON_GROUP IconGroup
);
BOOL
IcoWriteIconGroupToIcoFileA (
IN PCSTR IcoFile,
IN PICON_GROUP IconGroup,
IN BOOL OverwriteExisting
);
BOOL
IcoWriteIconGroupToIcoFileW (
IN PCWSTR IcoFile,
IN PICON_GROUP IconGroup,
IN BOOL OverwriteExisting
);
INT
IcoGetIndexFromPeResourceIdExA (
IN HANDLE ModuleHandle,
IN PCSTR GroupIconId
);
INT
IcoGetIndexFromPeResourceIdExW (
IN HANDLE ModuleHandle,
IN PCWSTR GroupIconId
);
INT
IcoGetIndexFromPeResourceIdA (
IN PCSTR ModuleName,
IN PCSTR GroupIconId
);
INT
IcoGetIndexFromPeResourceIdW (
IN PCWSTR ModuleName,
IN PCWSTR GroupIconId
);
PICON_GROUP
IcoExtractIconGroupFromPeFileExA (
IN HANDLE ModuleHandle,
IN PCSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromPeFileExW (
IN HANDLE ModuleHandle,
IN PCWSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromPeFileA (
IN PCSTR ModuleName,
IN PCSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromPeFileW (
IN PCWSTR ModuleName,
IN PCWSTR GroupIconId,
OUT PINT Index OPTIONAL
);
VOID
IcoAbortPeEnumIconGroupA (
IN OUT PICON_ENUMA IconEnum
);
VOID
IcoAbortPeEnumIconGroupW (
IN OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumFirstIconGroupInPeFileExA (
IN HANDLE ModuleHandle,
OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumFirstIconGroupInPeFileExW (
IN HANDLE ModuleHandle,
OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumFirstIconGroupInPeFileA (
IN PCSTR ModuleName,
OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumFirstIconGroupInPeFileW (
IN PCWSTR ModuleName,
OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumNextIconGroupInPeFileA (
IN OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumNextIconGroupInPeFileW (
IN OUT PICON_ENUMW IconEnum
);
PICON_GROUP
IcoExtractIconGroupByIndexFromPeFileExA (
IN HANDLE ModuleHandle,
IN INT Index,
OUT PCSTR *GroupIconId OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromPeFileExW (
IN HANDLE ModuleHandle,
IN INT Index,
OUT PCWSTR *GroupIconId OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromPeFileA (
IN PCSTR ModuleName,
IN INT Index,
OUT PCSTR *GroupIconId OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromPeFileW (
IN PCWSTR ModuleName,
IN INT Index,
OUT PCWSTR *GroupIconId OPTIONAL
);
BOOL
IcoWriteIconGroupToPeFileExA (
IN HANDLE ModuleHandle,
IN HANDLE UpdateHandle,
IN PICON_GROUP IconGroup,
OUT PCSTR *ResourceId OPTIONAL
);
BOOL
IcoWriteIconGroupToPeFileExW (
IN HANDLE ModuleHandle,
IN HANDLE UpdateHandle,
IN PICON_GROUP IconGroup,
OUT PCWSTR *ResourceId OPTIONAL
);
BOOL
IcoWriteIconGroupToPeFileA (
IN PCSTR ModuleName,
IN PICON_GROUP IconGroup,
OUT PCSTR *ResourceId, OPTIONAL
OUT PINT Index OPTIONAL
);
BOOL
IcoWriteIconGroupToPeFileW (
IN PCWSTR ModuleName,
IN PICON_GROUP IconGroup,
OUT PCWSTR *ResourceId, OPTIONAL
OUT PINT Index OPTIONAL
);
INT
IcoGetIndexFromNeResourceIdExA (
IN HANDLE ModuleHandle,
IN PCSTR GroupIconId
);
INT
IcoGetIndexFromNeResourceIdExW (
IN HANDLE ModuleHandle,
IN PCWSTR GroupIconId
);
INT
IcoGetIndexFromNeResourceIdA (
IN PCSTR ModuleName,
IN PCSTR GroupIconId
);
INT
IcoGetIndexFromNeResourceIdW (
IN PCWSTR ModuleName,
IN PCWSTR GroupIconId
);
PICON_GROUP
IcoExtractIconGroupFromNeFileExA (
IN HANDLE ModuleHandle,
IN PCSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromNeFileExW (
IN HANDLE ModuleHandle,
IN PCWSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromNeFileA (
IN PCSTR ModuleName,
IN PCSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromNeFileW (
IN PCWSTR ModuleName,
IN PCWSTR GroupIconId,
OUT PINT Index OPTIONAL
);
VOID
IcoAbortNeEnumIconGroupA (
IN OUT PICON_ENUMA IconEnum
);
VOID
IcoAbortNeEnumIconGroupW (
IN OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumFirstIconGroupInNeFileExA (
IN HANDLE ModuleHandle,
OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumFirstIconGroupInNeFileExW (
IN HANDLE ModuleHandle,
OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumFirstIconGroupInNeFileA (
IN PCSTR ModuleName,
OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumFirstIconGroupInNeFileW (
IN PCWSTR ModuleName,
OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumNextIconGroupInNeFileA (
IN OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumNextIconGroupInNeFileW (
IN OUT PICON_ENUMW IconEnum
);
PICON_GROUP
IcoExtractIconGroupByIndexFromNeFileExA (
IN HANDLE ModuleHandle,
IN INT Index,
OUT PCSTR *GroupIconId OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromNeFileExW (
IN HANDLE ModuleHandle,
IN INT Index,
OUT PCWSTR *GroupIconId OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromNeFileA (
IN PCSTR ModuleName,
IN INT Index,
OUT PCSTR *GroupIconId OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromNeFileW (
IN PCWSTR ModuleName,
IN INT Index,
OUT PCWSTR *GroupIconId OPTIONAL
);
VOID
IcoAbortEnumIconGroupA (
IN OUT PICON_ENUMA IconEnum
);
VOID
IcoAbortEnumIconGroupW (
IN OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumFirstIconGroupInFileA (
IN PCSTR FileName,
OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumFirstIconGroupInFileW (
IN PCWSTR FileName,
OUT PICON_ENUMW IconEnum
);
BOOL
IcoEnumNextIconGroupInFileA (
IN OUT PICON_ENUMA IconEnum
);
BOOL
IcoEnumNextIconGroupInFileW (
IN OUT PICON_ENUMW IconEnum
);
PICON_GROUP
IcoExtractIconGroupFromFileA (
IN PCSTR ModuleName,
IN PCSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupFromFileW (
IN PCWSTR ModuleName,
IN PCWSTR GroupIconId,
OUT PINT Index OPTIONAL
);
PICON_GROUP
IcoExtractIconGroupByIndexFromFileA (
IN PCSTR ModuleName,
IN INT Index,
OUT PCSTR *GroupIconId
);
PICON_GROUP
IcoExtractIconGroupByIndexFromFileW (
IN PCWSTR ModuleName,
IN INT Index,
OUT PCWSTR *GroupIconId
);
//
// Macro expansion definition
//
// None
//
// TCHAR mappings
//
#ifndef UNICODE
#define ICON_ENUM ICON_ENUMA
#define IcoReleaseResourceId IcoReleaseResourceIdA
#define IcoExtractIconGroupFromIcoFile IcoExtractIconGroupFromIcoFileA
#define IcoWriteIconGroupToIcoFile IcoWriteIconGroupToIcoFileA
#define IcoGetIndexFromPeResourceIdEx IcoGetIndexFromPeResourceIdExA
#define IcoGetIndexFromPeResourceId IcoGetIndexFromPeResourceIdA
#define IcoExtractIconGroupFromPeFileEx IcoExtractIconGroupFromPeFileExA
#define IcoExtractIconGroupFromPeFile IcoExtractIconGroupFromPeFileA
#define IcoAbortPeEnumIconGroup IcoAbortPeEnumIconGroupA
#define IcoEnumFirstIconGroupInPeFileEx IcoEnumFirstIconGroupInPeFileExA
#define IcoEnumFirstIconGroupInPeFile IcoEnumFirstIconGroupInPeFileA
#define IcoEnumNextIconGroupInPeFile IcoEnumNextIconGroupInPeFileA
#define IcoExtractIconGroupByIndexFromPeFileEx IcoExtractIconGroupByIndexFromPeFileExA
#define IcoExtractIconGroupByIndexFromPeFile IcoExtractIconGroupByIndexFromPeFileA
#define IcoWriteIconGroupToPeFileEx IcoWriteIconGroupToPeFileExA
#define IcoWriteIconGroupToPeFile IcoWriteIconGroupToPeFileA
#define IcoGetIndexFromNeResourceIdEx IcoGetIndexFromNeResourceIdExA
#define IcoGetIndexFromNeResourceId IcoGetIndexFromNeResourceIdA
#define IcoExtractIconGroupFromNeFileEx IcoExtractIconGroupFromNeFileExA
#define IcoExtractIconGroupFromNeFile IcoExtractIconGroupFromNeFileA
#define IcoAbortNeEnumIconGroup IcoAbortNeEnumIconGroupA
#define IcoEnumFirstIconGroupInNeFileEx IcoEnumFirstIconGroupInNeFileExA
#define IcoEnumFirstIconGroupInNeFile IcoEnumFirstIconGroupInNeFileA
#define IcoEnumNextIconGroupInNeFile IcoEnumNextIconGroupInNeFileA
#define IcoExtractIconGroupByIndexFromNeFileEx IcoExtractIconGroupByIndexFromNeFileExA
#define IcoExtractIconGroupByIndexFromNeFile IcoExtractIconGroupByIndexFromNeFileA
#define IcoAbortEnumIconGroup IcoAbortEnumIconGroupA
#define IcoEnumFirstIconGroupInFile IcoEnumFirstIconGroupInFileA
#define IcoEnumNextIconGroupInFile IcoEnumNextIconGroupInFileA
#define IcoExtractIconGroupFromFile IcoExtractIconGroupFromFileA
#define IcoExtractIconGroupByIndexFromFile IcoExtractIconGroupByIndexFromFileA
#else
#define ICON_ENUM ICON_ENUMW
#define IcoReleaseResourceId IcoReleaseResourceIdW
#define IcoExtractIconGroupFromIcoFile IcoExtractIconGroupFromIcoFileW
#define IcoWriteIconGroupToIcoFile IcoWriteIconGroupToIcoFileW
#define IcoGetIndexFromPeResourceIdEx IcoGetIndexFromPeResourceIdExW
#define IcoGetIndexFromPeResourceId IcoGetIndexFromPeResourceIdW
#define IcoExtractIconGroupFromPeFileEx IcoExtractIconGroupFromPeFileExW
#define IcoExtractIconGroupFromPeFile IcoExtractIconGroupFromPeFileW
#define IcoAbortPeEnumIconGroup IcoAbortPeEnumIconGroupW
#define IcoEnumFirstIconGroupInPeFileEx IcoEnumFirstIconGroupInPeFileExW
#define IcoEnumFirstIconGroupInPeFile IcoEnumFirstIconGroupInPeFileW
#define IcoEnumNextIconGroupInPeFile IcoEnumNextIconGroupInPeFileW
#define IcoExtractIconGroupByIndexFromPeFileEx IcoExtractIconGroupByIndexFromPeFileExW
#define IcoExtractIconGroupByIndexFromPeFile IcoExtractIconGroupByIndexFromPeFileW
#define IcoWriteIconGroupToPeFileEx IcoWriteIconGroupToPeFileExW
#define IcoWriteIconGroupToPeFile IcoWriteIconGroupToPeFileW
#define IcoGetIndexFromNeResourceIdEx IcoGetIndexFromNeResourceIdExW
#define IcoGetIndexFromNeResourceId IcoGetIndexFromNeResourceIdW
#define IcoExtractIconGroupFromNeFileEx IcoExtractIconGroupFromNeFileExW
#define IcoExtractIconGroupFromNeFile IcoExtractIconGroupFromNeFileW
#define IcoAbortNeEnumIconGroup IcoAbortNeEnumIconGroupW
#define IcoEnumFirstIconGroupInNeFileEx IcoEnumFirstIconGroupInNeFileExW
#define IcoEnumFirstIconGroupInNeFile IcoEnumFirstIconGroupInNeFileW
#define IcoEnumNextIconGroupInNeFile IcoEnumNextIconGroupInNeFileW
#define IcoExtractIconGroupByIndexFromNeFileEx IcoExtractIconGroupByIndexFromNeFileExW
#define IcoExtractIconGroupByIndexFromNeFile IcoExtractIconGroupByIndexFromNeFileW
#define IcoAbortEnumIconGroup IcoAbortEnumIconGroupW
#define IcoEnumFirstIconGroupInFile IcoEnumFirstIconGroupInFileW
#define IcoEnumNextIconGroupInFile IcoEnumNextIconGroupInFileW
#define IcoExtractIconGroupFromFile IcoExtractIconGroupFromFileW
#define IcoExtractIconGroupByIndexFromFile IcoExtractIconGroupByIndexFromFileW
#endif