510 lines
11 KiB
C
510 lines
11 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1998 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
inf.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Declares interface for INF wrapper routines. These routines simplify
|
||
|
access of INFs by wrapping the setup APIs with routines that use
|
||
|
pools or grow buffers.
|
||
|
|
||
|
The INF wrapper routines also implement append and replace capabilities,
|
||
|
so any INF used by the Win9x upgrade can be appended in the future, or
|
||
|
completely replaced.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Marc R. Whitten (marcw) 20-Oct-1997
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
jimschm 05-Jan-1999 INF parser moved to migutil
|
||
|
marcw 28-Oct-1998 Append/Replace capability
|
||
|
marcw 08-Aug-1997 Pool/Growbuf routines
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
typedef enum {
|
||
|
INF_USE_POOLHANDLE,
|
||
|
INF_USE_GROWBUFFER,
|
||
|
INF_USE_PRIVATE_GROWBUFFER,
|
||
|
INF_USE_PRIVATE_POOLHANDLE
|
||
|
} ALLOCATORTYPES;
|
||
|
|
||
|
typedef struct {
|
||
|
INFCONTEXT Context;
|
||
|
GROWBUFFER GrowBuffer;
|
||
|
POOLHANDLE PoolHandle;
|
||
|
ALLOCATORTYPES Allocator;
|
||
|
PCSTR KeyName;
|
||
|
} INFSTRUCTA, *PINFSTRUCTA;
|
||
|
|
||
|
typedef struct {
|
||
|
INFCONTEXT Context;
|
||
|
GROWBUFFER GrowBuffer;
|
||
|
POOLHANDLE PoolHandle;
|
||
|
ALLOCATORTYPES Allocator;
|
||
|
PCWSTR KeyName;
|
||
|
} INFSTRUCTW, *PINFSTRUCTW;
|
||
|
|
||
|
#define INFCONTEXT_INIT {NULL,NULL,0,0}
|
||
|
#define INITINFSTRUCT_GROWBUFFER {INFCONTEXT_INIT,GROWBUF_INIT,NULL,INF_USE_PRIVATE_GROWBUFFER,NULL}
|
||
|
#define INITINFSTRUCT_POOLHANDLE {INFCONTEXT_INIT,GROWBUF_INIT,NULL,INF_USE_PRIVATE_POOLHANDLE,NULL}
|
||
|
#define InfOpenAppendInfFile SetupOpenAppendInfFile
|
||
|
|
||
|
|
||
|
extern PBOOL g_UpginfsUpdated;
|
||
|
|
||
|
|
||
|
VOID
|
||
|
InfCleanUpInfStructA (
|
||
|
PINFSTRUCTA Context
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InfCleanUpInfStructW (
|
||
|
PINFSTRUCTW Context
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InitInfStructA (
|
||
|
OUT PINFSTRUCTA Context,
|
||
|
IN PGROWBUFFER GrowBuffer, OPTIONAL
|
||
|
IN POOLHANDLE PoolHandle OPTIONAL
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InitInfStructW (
|
||
|
OUT PINFSTRUCTW Context,
|
||
|
IN PGROWBUFFER GrowBuffer, OPTIONAL
|
||
|
IN POOLHANDLE PoolHandle OPTIONAL
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
#define InfOpenInfFileA(f) SETTRACKCOMMENT(HINF,"InfOpenInfFile",__FILE__,__LINE__)\
|
||
|
RealInfOpenInfFileA((f)/*,*/ ALLOCATION_TRACKING_CALL)\
|
||
|
CLRTRACKCOMMENT
|
||
|
|
||
|
#define InfOpenInfFileW(f) SETTRACKCOMMENT(HINF,"InfOpenInfFile",__FILE__,__LINE__)\
|
||
|
RealInfOpenInfFileW((f)/*,*/ ALLOCATION_TRACKING_CALL)\
|
||
|
CLRTRACKCOMMENT
|
||
|
|
||
|
|
||
|
|
||
|
HINF
|
||
|
RealInfOpenInfFileA (
|
||
|
IN PCSTR FileName /*,*/
|
||
|
ALLOCATION_TRACKING_DEF
|
||
|
);
|
||
|
|
||
|
HINF
|
||
|
RealInfOpenInfFileW (
|
||
|
IN PCWSTR FileName /*,*/
|
||
|
ALLOCATION_TRACKING_DEF
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InfCloseInfFile (HINF Inf);
|
||
|
|
||
|
//
|
||
|
// See the macros below before calling InfOpenInfInAllSourcesA or W.
|
||
|
//
|
||
|
HINF
|
||
|
InfOpenInfInAllSourcesA (
|
||
|
IN PCSTR InfSpecifier,
|
||
|
IN DWORD SourceCount,
|
||
|
IN PCSTR * SourceDirectories
|
||
|
);
|
||
|
|
||
|
HINF
|
||
|
InfOpenInfInAllSourcesW (
|
||
|
IN PCWSTR InfSpecifier,
|
||
|
IN DWORD SourceCount,
|
||
|
IN PCWSTR *SourceDirectories
|
||
|
);
|
||
|
|
||
|
PSTR
|
||
|
InfGetLineTextA (
|
||
|
IN OUT PINFSTRUCTA
|
||
|
);
|
||
|
|
||
|
|
||
|
PWSTR
|
||
|
InfGetLineTextW (
|
||
|
IN OUT PINFSTRUCTW
|
||
|
);
|
||
|
|
||
|
PSTR
|
||
|
InfGetStringFieldA (
|
||
|
IN OUT PINFSTRUCTA Context,
|
||
|
IN UINT FieldIndex
|
||
|
);
|
||
|
|
||
|
PWSTR
|
||
|
InfGetStringFieldW (
|
||
|
IN OUT PINFSTRUCTW Context,
|
||
|
IN UINT FieldIndex
|
||
|
);
|
||
|
|
||
|
PSTR
|
||
|
InfGetMultiSzFieldA (
|
||
|
IN OUT PINFSTRUCTA Context,
|
||
|
IN UINT FieldIndex
|
||
|
) ;
|
||
|
|
||
|
PWSTR
|
||
|
InfGetMultiSzFieldW (
|
||
|
IN OUT PINFSTRUCTW Context,
|
||
|
IN UINT FieldIndex
|
||
|
) ;
|
||
|
|
||
|
|
||
|
BOOL
|
||
|
InfGetIntFieldA (
|
||
|
IN PINFSTRUCTA Context,
|
||
|
IN UINT FieldIndex,
|
||
|
IN PINT Value
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfGetIntFieldW (
|
||
|
IN PINFSTRUCTW Context,
|
||
|
IN UINT FieldIndex,
|
||
|
IN PINT Value
|
||
|
);
|
||
|
|
||
|
PBYTE
|
||
|
InfGetBinaryFieldA (
|
||
|
IN PINFSTRUCTA Context,
|
||
|
IN UINT FieldIndex
|
||
|
);
|
||
|
|
||
|
PBYTE
|
||
|
InfGetBinaryFieldW (
|
||
|
IN PINFSTRUCTW Context,
|
||
|
IN UINT FieldIndex
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfGetLineByIndexA (
|
||
|
IN HINF InfHandle,
|
||
|
IN PCSTR Section,
|
||
|
IN DWORD Index,
|
||
|
OUT PINFSTRUCTA Context
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfGetLineByIndexW (
|
||
|
IN HINF InfHandle,
|
||
|
IN PCWSTR Section,
|
||
|
IN DWORD Index,
|
||
|
OUT PINFSTRUCTW Context
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfFindFirstLineA (
|
||
|
IN HINF InfHandle,
|
||
|
IN PCSTR Section,
|
||
|
IN PCSTR Key,
|
||
|
OUT PINFSTRUCTA Context
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfFindFirstLineW (
|
||
|
IN HINF InfHandle,
|
||
|
IN PCWSTR Section,
|
||
|
IN PCWSTR Key,
|
||
|
OUT PINFSTRUCTW Context
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfFindNextLineA (
|
||
|
IN OUT PINFSTRUCTA Context
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
InfFindNextLineW (
|
||
|
IN OUT PINFSTRUCTW Context
|
||
|
);
|
||
|
|
||
|
UINT
|
||
|
InfGetFieldCountA (
|
||
|
IN PINFSTRUCTA Context
|
||
|
);
|
||
|
|
||
|
UINT
|
||
|
InfGetFieldCountW (
|
||
|
IN PINFSTRUCTW Context
|
||
|
);
|
||
|
|
||
|
|
||
|
PCSTR
|
||
|
InfGetOemStringFieldA (
|
||
|
IN PINFSTRUCTA Context,
|
||
|
IN UINT Field
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
SetupGetOemStringFieldA (
|
||
|
IN PINFCONTEXT Context,
|
||
|
IN DWORD Index,
|
||
|
IN PTSTR ReturnBuffer,
|
||
|
IN DWORD ReturnBufferSize,
|
||
|
OUT PDWORD RequiredSize
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InfResetInfStructA (
|
||
|
IN OUT PINFSTRUCTA Context
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InfResetInfStructW (
|
||
|
IN OUT PINFSTRUCTW Context
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// INF parser
|
||
|
//
|
||
|
|
||
|
typedef struct _tagINFLINE {
|
||
|
PCWSTR Key; OPTIONAL
|
||
|
PCWSTR Data;
|
||
|
DWORD LineFlags;
|
||
|
struct _tagINFLINE *Next, *Prev;
|
||
|
struct _tagINFSECTION *Section;
|
||
|
} INFLINE, *PINFLINE;
|
||
|
|
||
|
#define LINEFLAG_KEY_QUOTED 0x0001
|
||
|
#define LINEFLAG_ALL_COMMENTS 0x0002
|
||
|
#define LINEFLAG_TRAILING_COMMENTS 0x0004
|
||
|
|
||
|
|
||
|
typedef struct _tagINFSECTION {
|
||
|
PCWSTR Name;
|
||
|
PINFLINE FirstLine;
|
||
|
PINFLINE LastLine;
|
||
|
UINT LineCount;
|
||
|
struct _tagINFSECTION *Next, *Prev;
|
||
|
} INFSECTION, *PINFSECTION;
|
||
|
|
||
|
PINFSECTION
|
||
|
AddInfSectionToTableA (
|
||
|
IN HINF Inf,
|
||
|
IN PCSTR SectionName
|
||
|
);
|
||
|
|
||
|
PINFSECTION
|
||
|
AddInfSectionToTableW (
|
||
|
IN HINF Inf,
|
||
|
IN PCWSTR SectionName
|
||
|
);
|
||
|
|
||
|
PINFSECTION
|
||
|
FindInfSectionInTableA (
|
||
|
IN HINF Inf,
|
||
|
IN PCSTR SectionName
|
||
|
);
|
||
|
|
||
|
PINFSECTION
|
||
|
GetFirstInfSectionInTable (
|
||
|
IN HINF Inf
|
||
|
);
|
||
|
|
||
|
PINFSECTION
|
||
|
GetNextInfSectionInTable (
|
||
|
IN PINFSECTION Section
|
||
|
);
|
||
|
|
||
|
|
||
|
PINFSECTION
|
||
|
FindInfSectionInTableW (
|
||
|
IN HINF Inf,
|
||
|
IN PCWSTR SectionName
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
AddInfLineToTableA (
|
||
|
IN HINF Inf,
|
||
|
IN PINFSECTION SectionPtr,
|
||
|
IN PCSTR Key, OPTIONAL
|
||
|
IN PCSTR Data,
|
||
|
IN DWORD LineFlags
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
AddInfLineToTableW (
|
||
|
IN HINF Inf,
|
||
|
IN PINFSECTION SectionPtr,
|
||
|
IN PCWSTR Key, OPTIONAL
|
||
|
IN PCWSTR Data,
|
||
|
IN DWORD LineFlags
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
FindLineInInfSectionA (
|
||
|
IN HINF Inf,
|
||
|
IN PINFSECTION Section,
|
||
|
IN PCSTR Key
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
FindLineInInfSectionW (
|
||
|
IN HINF Inf,
|
||
|
IN PINFSECTION Section,
|
||
|
IN PCWSTR Key
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
GetFirstLineInSectionStrA (
|
||
|
IN HINF Inf,
|
||
|
IN PCSTR Section
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
GetFirstLineInSectionStrW (
|
||
|
IN HINF Inf,
|
||
|
IN PCWSTR Section
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
GetFirstLineInSectionStruct (
|
||
|
IN PINFSECTION Section
|
||
|
);
|
||
|
|
||
|
PINFLINE
|
||
|
GetNextLineInSection (
|
||
|
IN PINFLINE PrevLine
|
||
|
);
|
||
|
|
||
|
UINT
|
||
|
GetInfSectionLineCount (
|
||
|
IN PINFSECTION Section
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DeleteSectionInInfFile (
|
||
|
IN HINF Inf,
|
||
|
IN PINFSECTION Section
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
DeleteLineInInfSection (
|
||
|
IN HINF Inf,
|
||
|
IN PINFLINE InfLine
|
||
|
);
|
||
|
|
||
|
HINF
|
||
|
OpenInfFileExA (
|
||
|
IN PCSTR InfFilePath,
|
||
|
IN PSTR SectionList,
|
||
|
IN BOOL KeepComments
|
||
|
);
|
||
|
|
||
|
#define OpenInfFileA(Path) OpenInfFileExA (Path, NULL, TRUE)
|
||
|
|
||
|
HINF
|
||
|
OpenInfFileExW (
|
||
|
IN PCWSTR InfFilePath,
|
||
|
IN PWSTR SectionList,
|
||
|
IN BOOL KeepComments
|
||
|
);
|
||
|
|
||
|
#define OpenInfFileW(Path) OpenInfFileExW (Path, NULL, TRUE)
|
||
|
|
||
|
VOID
|
||
|
CloseInfFile (
|
||
|
HINF InfFile
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
SaveInfFileA (
|
||
|
IN HINF Inf,
|
||
|
IN PCSTR SaveToFileSpec
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
SaveInfFileW (
|
||
|
IN HINF Inf,
|
||
|
IN PCWSTR SaveToFileSpec
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
InitInfReplaceTable (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// ANSI/UNICODE mappings.
|
||
|
//
|
||
|
#ifdef UNICODE
|
||
|
|
||
|
# define INFSTRUCT INFSTRUCTW
|
||
|
# define PINFSTRUCT PINFSTRUCTW
|
||
|
# define InfCleanUpInfStruct InfCleanUpInfStructW
|
||
|
# define InitInfStruct InitInfStructW
|
||
|
# define InfResetInfStruct InfResetInfStructW
|
||
|
# define InfFindFirstLine InfFindFirstLineW
|
||
|
# define InfFindNextLine InfFindNextLineW
|
||
|
# define InfGetLineByIndex InfGetLineByIndexW
|
||
|
# define InfGetStringField InfGetStringFieldW
|
||
|
# define InfGetMultiSzField InfGetMultiSzFieldW
|
||
|
# define InfGetLineText InfGetLineTextW
|
||
|
# define InfOpenInfFile InfOpenInfFileW
|
||
|
# define InfGetOemStringField InfGetStringFieldW
|
||
|
# define InfGetIntField InfGetIntFieldW
|
||
|
# define InfGetBinaryField InfGetBinaryFieldW
|
||
|
# define InfGetFieldCount InfGetFieldCountW
|
||
|
# define SetupGetOemStringField SetupGetStringFieldW
|
||
|
# define InfOpenInfInAllSources(x) InfOpenInfInAllSourcesW((x),1,&g_SourceDirectory);
|
||
|
# define AddInfSectionToTable AddInfSectionToTableW
|
||
|
# define FindInfSectionInTable FindInfSectionInTableW
|
||
|
# define AddInfLineToTable AddInfLineToTableW
|
||
|
# define FindLineInInfSection FindLineInInfSectionW
|
||
|
# define GetFirstLineInSectionStr GetFirstLineInSectionStrW
|
||
|
# define OpenInfFileEx OpenInfFileExW
|
||
|
# define OpenInfFile OpenInfFileW
|
||
|
# define SaveInfFile SaveInfFileW
|
||
|
|
||
|
|
||
|
#else
|
||
|
|
||
|
# define INFSTRUCT INFSTRUCTA
|
||
|
# define PINFSTRUCT PINFSTRUCTA
|
||
|
# define InfCleanUpInfStruct InfCleanUpInfStructA
|
||
|
# define InitInfStruct InitInfStructA
|
||
|
# define InfResetInfStruct InfResetInfStructA
|
||
|
# define InfFindFirstLine InfFindFirstLineA
|
||
|
# define InfFindNextLine InfFindNextLineA
|
||
|
# define InfGetLineByIndex InfGetLineByIndexA
|
||
|
# define InfGetStringField InfGetStringFieldA
|
||
|
# define InfGetMultiSzField InfGetMultiSzFieldA
|
||
|
# define InfGetLineText InfGetLineTextA
|
||
|
# define InfOpenInfFile InfOpenInfFileA
|
||
|
# define InfGetOemStringField InfGetOemStringFieldA
|
||
|
# define InfGetIntField InfGetIntFieldA
|
||
|
# define InfGetBinaryField InfGetBinaryFieldA
|
||
|
# define InfGetFieldCount InfGetFieldCountA
|
||
|
# define SetupGetOemStringField SetupGetOemStringFieldA
|
||
|
# define InfOpenInfInAllSources(x) InfOpenInfInAllSourcesA((x),g_SourceDirectoryCount,g_SourceDirectories);
|
||
|
# define AddInfSectionToTable AddInfSectionToTableA
|
||
|
# define FindInfSectionInTable FindInfSectionInTableA
|
||
|
# define AddInfLineToTable AddInfLineToTableA
|
||
|
# define FindLineInInfSection FindLineInInfSectionA
|
||
|
# define GetFirstLineInSectionStr GetFirstLineInSectionStrA
|
||
|
# define OpenInfFileEx OpenInfFileExA
|
||
|
# define OpenInfFile OpenInfFileA
|
||
|
# define SaveInfFile SaveInfFileA
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|