2649 lines
116 KiB
C
2649 lines
116 KiB
C
|
//**********************************************************************
|
||
|
//
|
||
|
// SETUPX.H
|
||
|
//
|
||
|
// Copyright (c) 1993 - Microsoft Corp.
|
||
|
// All rights reserved.
|
||
|
// Microsoft Confidential
|
||
|
//
|
||
|
// Public include file for Chicago Setup services.
|
||
|
//
|
||
|
// 12/1/93 DONALDM Added LPCLASS_INFO, and function protos for ;Internal
|
||
|
// exports in SETUP4.DLL ;Internal
|
||
|
// 12/4/943 DONALDM Moved SHELL.H include and Chicago specific ;Internal
|
||
|
// helper functions to SETUP4.H ;Internal
|
||
|
// 1/11/94 DONALDM Added members to DEVICE_INFO to better handle ;Internal
|
||
|
// ClassInstaller load/unload. ;Internal
|
||
|
// 1/11/94 DONALDM Added some new DIF_ messages for Net guys. ;Internal
|
||
|
// 2/25/94 DONALDM Fixed a bug with the DIREG_ flags ;Internal
|
||
|
//**********************************************************************
|
||
|
|
||
|
#ifndef SETUPX_INC
|
||
|
#define SETUPX_INC 1 // SETUPX.H signature
|
||
|
|
||
|
/***************************************************************************/
|
||
|
// setup PropertySheet support
|
||
|
// NOTE: Always include PRST.H because it is needed later for Class Installer
|
||
|
// stuff, and optionally define the SU prop sheet stuff.
|
||
|
/***************************************************************************/
|
||
|
#include <prsht.h>
|
||
|
#ifndef NOPRSHT
|
||
|
HPROPSHEETPAGE WINAPI SUCreatePropertySheetPage(LPCPROPSHEETPAGE lppsp);
|
||
|
BOOL WINAPI SUDestroyPropertySheetPage(HPROPSHEETPAGE hPage);
|
||
|
int WINAPI SUPropertySheet(LPCPROPSHEETHEADER lppsh);
|
||
|
#endif // NOPRSHT
|
||
|
|
||
|
typedef UINT RETERR; // Return Error code type.
|
||
|
|
||
|
#define OK 0 // success error code
|
||
|
|
||
|
#define IP_ERROR (100) // Inf parsing
|
||
|
#define TP_ERROR (200) // Text processing module
|
||
|
#define VCP_ERROR (300) // Virtual copy module
|
||
|
#define GEN_ERROR (400) // Generic Installer
|
||
|
#define DI_ERROR (500) // Device Installer
|
||
|
|
||
|
// err2ids mappings
|
||
|
enum ERR_MAPPINGS {
|
||
|
E2I_VCPM, // Maps VCPM to strings
|
||
|
E2I_SETUPX, // Maps setupx returns to strings
|
||
|
E2I_SETUPX_MODULE, // Maps setupx returns to appropriate module
|
||
|
E2I_DOS_SOLUTION, // Maps DOS Extended errors to solutions
|
||
|
E2I_DOS_REASON, // Maps DOS extended errors to strings.
|
||
|
E2I_DOS_MEDIA, // Maps DOS extended errors to media icon.
|
||
|
};
|
||
|
|
||
|
#ifndef NOVCP
|
||
|
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// Logical Disk ID definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
// DECLARE_HANDLE(VHSTR); /* VHSTR = VirtCopy Handle to STRing */
|
||
|
typedef UINT VHSTR; /* VirtCopy Handle to String */
|
||
|
|
||
|
VHSTR WINAPI vsmStringAdd(LPCSTR lpszName);
|
||
|
int WINAPI vsmStringDelete(VHSTR vhstr);
|
||
|
VHSTR WINAPI vsmStringFind(LPCSTR lpszName);
|
||
|
int WINAPI vsmGetStringName(VHSTR vhstr, LPSTR lpszBuffer, int cbBuffer);
|
||
|
int WINAPI vsmStringCompare(VHSTR vhstrA, VHSTR vhstrB);
|
||
|
LPCSTR WINAPI vsmGetStringRawName(VHSTR vhstr);
|
||
|
void WINAPI vsmStringCompact(void);
|
||
|
|
||
|
typedef UINT LOGDISKID; /* ldid */
|
||
|
|
||
|
// Logical Disk Descriptor: Structure which describes the physical attributes
|
||
|
// of a logical disk. Every logical disk is assigned a logical disk
|
||
|
// identifier (LDID), and is described by a logical disk descriptor (LDD).
|
||
|
//
|
||
|
// The cbSize structure member must always be set to sizeof(LOGDISKDESC_S),
|
||
|
// but all other unused structure members should be NULL or 0. No validation
|
||
|
// is performed on the size of string arrays; all string pointers, if
|
||
|
// non-NULL and they are to receive a string, must point at string arrays
|
||
|
// whose sizes are as follows:
|
||
|
// sizeof( szPath ) = MAX_PATH_LEN
|
||
|
// sizeof( szVolLabel) = MAX_FILENAME_LEN
|
||
|
// sizeof( szName ) = MAX_STRING_LEN
|
||
|
#define MAX_PATH_LEN 260 // Max. path length.
|
||
|
#define MAX_FILENAME_LEN 20 // Max. filename length. ( > sizeof( "x:\\12345678.123" )
|
||
|
|
||
|
|
||
|
typedef struct _LOGDISKDESC_S { /* ldd */
|
||
|
WORD cbSize; // Size of this structure (bytes)
|
||
|
LOGDISKID ldid; // Logical Disk ID.
|
||
|
LPSTR pszPath; // Ptr. to associated Path string.
|
||
|
LPSTR pszVolLabel; // Ptr. to Volume Label string.
|
||
|
LPSTR pszDiskName; // Ptr. to Disk Name string.
|
||
|
WORD wVolTime; // Volume label modification time.
|
||
|
WORD wVolDate; // Volume label modification date.
|
||
|
DWORD dwSerNum; // Disk serial number.
|
||
|
WORD wFlags; // Flags.
|
||
|
} LOGDISKDESC_S, FAR *LPLOGDISKDESC;
|
||
|
|
||
|
|
||
|
|
||
|
// Range for pre-defined LDIDs.
|
||
|
#define LDID_PREDEF_START 0x0001 // Start of range
|
||
|
#define LDID_PREDEF_END 0x7FFF // End of range
|
||
|
|
||
|
// Range for registry-assigned LDIDs
|
||
|
#define LDID_VAR_START 0x7000
|
||
|
#define LDID_VAR_END 0x7FFF
|
||
|
|
||
|
// Range for dynamically-assigned LDIDs.
|
||
|
#define LDID_ASSIGN_START 0x8000 // Start of range
|
||
|
#define LDID_ASSIGN_END 0xBFFF // End of range
|
||
|
|
||
|
// Pre-defined Logical Disk Identifiers (LDID).
|
||
|
//
|
||
|
#define LDID_NULL 0 // Null (undefined) LDID.
|
||
|
#define LDID_ABSOLUTE ((UINT)-1) // Absolute path
|
||
|
|
||
|
// source path of windows install, this is typically A:\ or a net drive
|
||
|
#define LDID_SRCPATH 1 // source of instilation
|
||
|
// temporary setup directory used by setup, this is only valid durring
|
||
|
// regular install and contains the INF and other binary files. May be
|
||
|
// read-only location.
|
||
|
#define LDID_SETUPTEMP 2 // temporary setup dir for install
|
||
|
// path to uninstall location, this is where we backup files that will
|
||
|
// be overwritten
|
||
|
#define LDID_UNINSTALL 3 // uninstall (backup) dir.
|
||
|
// backup path for the copy engine, this should not be used
|
||
|
#define LDID_BACKUP 4 // BUGBUG: backup dir for the copy engine, not used
|
||
|
// temporary setup directory used by setup, this is only valid durring
|
||
|
// regular install and is guarenteed to be a read/write location for
|
||
|
// scratch space.
|
||
|
#define LDID_SETUPSCRATCH 5 // temporary setup dir for scratch space.
|
||
|
|
||
|
// windows directory, this is the destinatio of the insallation
|
||
|
#define LDID_WIN 10 // destination Windows dir (just user files).
|
||
|
#define LDID_SYS 11 // destination Windows System dir.
|
||
|
#define LDID_IOS 12 // destination Windows Iosubsys dir.
|
||
|
#define LDID_CMD 13 // destination Windows Command (DOS) dir.
|
||
|
#define LDID_CPL 14 // destination Windows Control Panel dir.
|
||
|
#define LDID_PRINT 15 // destination Windows Printer dir.
|
||
|
#define LDID_MAIL 16 // destination Mail dir.
|
||
|
#define LDID_INF 17 // destination Windows *.INF dir.
|
||
|
#define LDID_HELP 18 // destination Windows Help dir.
|
||
|
#define LDID_WINADMIN 19 // admin stuff.
|
||
|
|
||
|
#define LDID_FONTS 20 // destination Windows Font dir.
|
||
|
#define LDID_VIEWERS 21 // destination Windows Viewers dir.
|
||
|
#define LDID_VMM32 22 // destination Windows VMM32 dir.
|
||
|
#define LDID_COLOR 23 // destination Windows Color dir.
|
||
|
|
||
|
#define LDID_APPS 24 // Applications folder location.
|
||
|
|
||
|
// Shared dirs for net install.
|
||
|
#define LDID_SHARED 25 // Bulk of windows files.
|
||
|
#define LDID_WINBOOT 26 // guarenteed boot device for windows.
|
||
|
#define LDID_MACHINE 27 // machine specific files.
|
||
|
#define LDID_HOST_WINBOOT 28
|
||
|
|
||
|
// boot and old win and dos dirs.
|
||
|
#define LDID_BOOT 30 // Root dir of boot drive
|
||
|
#define LDID_BOOT_HOST 31 // Root dir of boot drive host
|
||
|
#define LDID_OLD_WINBOOT 32 // Subdir off of Root (optional)
|
||
|
#define LDID_OLD_WIN 33 // old windows directory (if it exists)
|
||
|
#define LDID_OLD_DOS 34 // old dos directory (if it exists)
|
||
|
|
||
|
#define LDID_OLD_NET 35 // old network root directory, only valid during
|
||
|
// network GenUpgrade
|
||
|
|
||
|
#define LDID_MOUSE 36 // path to MOUSE env. variable if set or same as LDID_WIN
|
||
|
// only valid after mouse class installer.
|
||
|
#define LDID_PATCH 37 // path to Patch related files
|
||
|
#define LDID_WIN3XIE 38 // install path of Internet Explorer on Windows 3.1
|
||
|
// Only defined during system install
|
||
|
|
||
|
// Convert Ascii drive letter to Integer drive number ('A'=1, 'B'=2, ...).
|
||
|
#define DriveAtoI( chDrv ) ((int)(chDrv & 31))
|
||
|
|
||
|
// Convert Integer drive number to Ascii drive letter (1='A', 2='B', ...).
|
||
|
#define DriveItoA( iDrv ) ((char) (iDrv - 1 + 'A'))
|
||
|
|
||
|
|
||
|
// BUGBUG: change the names of these
|
||
|
|
||
|
RETERR WINAPI CtlSetLdd ( LPLOGDISKDESC );
|
||
|
RETERR WINAPI CtlGetLdd ( LPLOGDISKDESC );
|
||
|
RETERR WINAPI CtlFindLdd ( LPLOGDISKDESC );
|
||
|
RETERR WINAPI CtlAddLdd ( LPLOGDISKDESC );
|
||
|
RETERR WINAPI CtlDelLdd ( LOGDISKID );
|
||
|
RETERR WINAPI CtlGetLddPath ( LOGDISKID, LPSTR );
|
||
|
RETERR WINAPI CtlSetLddPath ( LOGDISKID, LPSTR );
|
||
|
|
||
|
|
||
|
// Constants that determine ranking of device compatibility
|
||
|
#define FIRST_CID_RANK_FROM_INF 1000
|
||
|
#define FIRST_CID_RANK_FROM_DEVICE 2000
|
||
|
#define BAD_DRIVER_RANK 4000
|
||
|
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// Virtual File Copy definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
|
||
|
typedef DWORD LPEXPANDVTBL; /* BUGBUG -- clean this up */
|
||
|
|
||
|
enum _ERR_VCP
|
||
|
{
|
||
|
ERR_VCP_IOFAIL = (VCP_ERROR + 1), // File I/O failure
|
||
|
ERR_VCP_STRINGTOOLONG, // String length limit exceeded
|
||
|
ERR_VCP_NOMEM, // Insufficient memory to comply
|
||
|
ERR_VCP_QUEUEFULL, // Trying to add a node to a maxed-out queue
|
||
|
ERR_VCP_NOVHSTR, // No string handles available
|
||
|
ERR_VCP_OVERFLOW, // Reference count would overflow
|
||
|
ERR_VCP_BADARG, // Invalid argument to function
|
||
|
ERR_VCP_UNINIT, // String library not initialized
|
||
|
ERR_VCP_NOTFOUND , // String not found in string table
|
||
|
ERR_VCP_BUSY, // Can't do that now
|
||
|
ERR_VCP_INTERRUPTED, // User interrupted operation
|
||
|
ERR_VCP_BADDEST, // Invalid destination directory
|
||
|
ERR_VCP_SKIPPED, // User skipped operation
|
||
|
ERR_VCP_IO, // Hardware error encountered
|
||
|
ERR_VCP_LOCKED, // List is locked
|
||
|
ERR_VCP_WRONGDISK, // The wrong disk is in the drive
|
||
|
ERR_VCP_CHANGEMODE, //
|
||
|
ERR_VCP_LDDINVALID, // Logical Disk ID Invalid.
|
||
|
ERR_VCP_LDDFIND, // Logical Disk ID not found.
|
||
|
ERR_VCP_LDDUNINIT, // Logical Disk Descriptor Uninitialized.
|
||
|
ERR_VCP_LDDPATH_INVALID,
|
||
|
ERR_VCP_NOEXPANSION, // Failed to load expansion dll
|
||
|
ERR_VCP_NOTOPEN, // Copy session not open
|
||
|
ERR_VCP_NO_DIGITAL_SIGNATURE_CATALOG, // Catalog is not digitally signed
|
||
|
ERR_VCP_NO_DIGITAL_SIGNATURE_FILE, // A file is not digitally signed
|
||
|
};
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Structures
|
||
|
*****************************************************************************/
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPPROGRESS
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct tagVCPPROGRESS { /* prg */
|
||
|
DWORD dwSoFar; /* Number of units copied so far */
|
||
|
DWORD dwTotal; /* Number of units to copy */
|
||
|
} VCPPROGRESS, FAR *LPVCPPROGRESS;
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPDISKINFO
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/* BUGBUG -- I currently don't use wVolumeTime, wVolumeDate or ;Internal
|
||
|
* dwSerialNumber. We may not want to use dwSerialNumber because ;Internal
|
||
|
* it means that any disk other than the factory originals will be;Internal
|
||
|
* suspected of being tampered with, since the serial number ;Internal
|
||
|
* won't match. Similar with the time/date stamp on the ;Internal
|
||
|
* volume label. Or maybe that's what we want to do. ;Internal
|
||
|
*/ /* ;Internal */
|
||
|
/* ;Internal */
|
||
|
|
||
|
typedef struct tagVCPDISKINFO {
|
||
|
WORD cbSize; /* Size of this structure in bytes */
|
||
|
LOGDISKID ldid; /* Logical disk ID */
|
||
|
VHSTR vhstrRoot; /* Location of root directory */
|
||
|
VHSTR vhstrVolumeLabel;/* Volume label */
|
||
|
VHSTR vhstrDiskName; // Printed name on the disk.
|
||
|
WORD wVolumeTime; /* Volume label modification time */
|
||
|
WORD wVolumeDate; /* Volume label modification date */
|
||
|
DWORD dwSerialNumber; /* Disk serial number */
|
||
|
WORD fl; /* Flags */
|
||
|
LPARAM lparamRef; /* Reference data for client */
|
||
|
|
||
|
VCPPROGRESS prgFileRead; /* Progress info */
|
||
|
VCPPROGRESS prgByteRead;
|
||
|
|
||
|
VCPPROGRESS prgFileWrite;
|
||
|
VCPPROGRESS prgByteWrite;
|
||
|
|
||
|
} VCPDISKINFO, FAR *LPVCPDISKINFO;
|
||
|
|
||
|
#define VDIFL_VALID 0x0001 /* Fields are valid from a prev. call */
|
||
|
#define VDIFL_EXISTS 0x0002 /* Disk exists; do not format */
|
||
|
|
||
|
RETERR WINAPI DiskInfoFromLdid(LOGDISKID ldid, LPVCPDISKINFO lpdi);
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPFILESPEC
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct tagVCPFILESPEC { /* vfs */
|
||
|
LOGDISKID ldid; /* Logical disk */
|
||
|
VHSTR vhstrDir; /* Directory withing logical disk */
|
||
|
VHSTR vhstrFileName; /* Filename within directory */
|
||
|
} VCPFILESPEC, FAR *LPVCPFILESPEC;
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPFATTR
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/*
|
||
|
* BUGBUG -- explain diffce between llenIn and llenOut wrt compression.
|
||
|
*/
|
||
|
typedef struct tagVCPFATTR {
|
||
|
UINT uiMDate; /* Modification date */
|
||
|
UINT uiMTime; /* Modification time */
|
||
|
UINT uiADate; /* Access date */
|
||
|
UINT uiATime; /* Access time */
|
||
|
UINT uiAttr; /* File attribute bits */
|
||
|
DWORD llenIn; /* Original file length */
|
||
|
DWORD llenOut; /* Final file length */
|
||
|
/* (after decompression) */
|
||
|
} VCPFATTR, FAR *LPVCPFATTR;
|
||
|
|
||
|
typedef struct tagVCPFILESTAT
|
||
|
{
|
||
|
UINT uDate;
|
||
|
UINT uTime;
|
||
|
DWORD dwSize;
|
||
|
} VCPFILESTAT, FAR *LPVCPFILESTAT;
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VIRTNODEEX
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
typedef struct tagVIRTNODEEX
|
||
|
{ /* vnex */
|
||
|
HFILE hFileSrc;
|
||
|
HFILE hFileDst;
|
||
|
VCPFATTR fAttr;
|
||
|
WORD dosError; // The first/last error encountered
|
||
|
VHSTR vhstrFileName; // The original destination name.
|
||
|
WPARAM vcpm; // The message that was being processed.
|
||
|
} VIRTNODEEX, FAR *LPCVIRTNODEEX, FAR *LPVIRTNODEEX ;
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VIRTNODE
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/* WARNING! ;Internal
|
||
|
* All fields through but not including ;Internal
|
||
|
* fl are memcmp'd to determine if we have a duplicate copy ;Internal
|
||
|
* request. ;Internal
|
||
|
* ;Internal
|
||
|
* Do not insert fields before fl unless you want them to be ;Internal
|
||
|
* compared; conversely, if you add a new field that needs to ;Internal
|
||
|
* be compared, make sure it goes before fl. ;Internal
|
||
|
* ;Internal
|
||
|
* And don't change any of the fields once Windows 4.0 ships. ;Internal
|
||
|
* ;Internal
|
||
|
* The vFileStat and vhstrCatalogFile fields were added at the ;Internal
|
||
|
* end of the structure after Windows 95 shipped to support driver;Internal
|
||
|
* cetification. Offsets of pre-Win95 fields remain the same. ;Internal
|
||
|
* vFileStat duplicates information in lpvnex, but lpvnex was left;Internal
|
||
|
* alone for backcompatibility's sake. ;Internal
|
||
|
* ;Internal
|
||
|
*/ /* ;Internal */
|
||
|
/* ;Internal */
|
||
|
typedef struct tagVIRTNODE { /* vn */
|
||
|
WORD cbSize;
|
||
|
VCPFILESPEC vfsSrc;
|
||
|
VCPFILESPEC vfsDst;
|
||
|
WORD fl;
|
||
|
LPARAM lParam;
|
||
|
LPEXPANDVTBL lpExpandVtbl;
|
||
|
LPVIRTNODEEX lpvnex;
|
||
|
VHSTR vhstrDstFinalName;
|
||
|
VCPFILESTAT vFileStat;
|
||
|
} VIRTNODE, FAR *LPCVIRTNODE, FAR *LPVIRTNODE ;
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPDESTINFO
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct tagVCPDESTINFO { /* destinfo */
|
||
|
WORD flDevAttr; /* Device attributes */
|
||
|
LONG cbCapacity; /* Disk capacity */
|
||
|
WORD cbCluster; /* Bytes per cluster */
|
||
|
WORD cRootDir; /* Size of root directory */
|
||
|
} VCPDESTINFO, FAR *LPVCPDESTINFO;
|
||
|
|
||
|
#define DIFL_FIXED 0x0001 /* Nonremoveable media */
|
||
|
#define DIFL_CHANGELINE 0x0002 /* Change line support */
|
||
|
|
||
|
// Now also used by the virtnode as we dont have copy nodes any more.
|
||
|
// #define CNFL_BACKUP 0x0001 /* This is a backup node */
|
||
|
#define CNFL_DELETEONFAILURE 0x0002 /* Dest should be deleted on failure */
|
||
|
#define CNFL_RENAMEONSUCCESS 0x0004 /* Dest needs to be renamed */
|
||
|
#define CNFL_CONTINUATION 0x0008 /* Dest is continued onto difft disk */
|
||
|
#define CNFL_SKIPPED 0x0010 /* User asked to skip file */
|
||
|
#define CNFL_IGNOREERRORS 0x0020 // An error has occured on this file already
|
||
|
#define CNFL_RETRYFILE 0x0040 // Retry the file (error ocurred)
|
||
|
#define CNFL_COPIED 0x0080 // Node has already been copied.
|
||
|
|
||
|
// BUGBUG: verify the use and usefullness of these flags
|
||
|
// #define VNFL_UNIQUE 0x0000 /* Default */
|
||
|
#define VNFL_MULTIPLEOK 0x0100 /* Do not search PATH for duplicates */
|
||
|
#define VNFL_DESTROYOLD 0x0200 /* Do not back up files */
|
||
|
// #define VNFL_NOW 0x0400 /* Use by vcp Flush */
|
||
|
// To deternime what kind of node it is.
|
||
|
#define VNFL_COPY 0x0000 // A simple copy node.
|
||
|
#define VNFL_DELETE 0x0800 // A delete node
|
||
|
#define VNFL_RENAME 0x1000 // A rename node
|
||
|
#define VNFL_NODE_TYPE ( VNFL_RENAME|VNFL_DELETE|VNFL_COPY )
|
||
|
/* Read-only flag bits */
|
||
|
#define VNFL_CREATED 0x2000 /* VCPM_NODECREATE has been sent */
|
||
|
#define VNFL_REJECTED 0x4000 /* Node has been rejected */
|
||
|
|
||
|
#define VNFL_DEVICEINSTALLER 0x8000 /* Node was added by the Device Installer */
|
||
|
|
||
|
#define VNFL_VALIDVQCFLAGS 0xff00 /* ;Internal */
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPSTATUS
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct tagVCPSTATUS { /* vstat */
|
||
|
WORD cbSize; /* Size of this structure */
|
||
|
|
||
|
VCPPROGRESS prgDiskRead;
|
||
|
VCPPROGRESS prgFileRead;
|
||
|
VCPPROGRESS prgByteRead;
|
||
|
|
||
|
VCPPROGRESS prgDiskWrite;
|
||
|
VCPPROGRESS prgFileWrite;
|
||
|
VCPPROGRESS prgByteWrite;
|
||
|
|
||
|
LPVCPDISKINFO lpvdiIn; /* Current input disk */
|
||
|
LPVCPDISKINFO lpvdiOut; /* Current output disk */
|
||
|
LPVIRTNODE lpvn; /* Current file */
|
||
|
|
||
|
} VCPSTATUS, FAR *LPVCPSTATUS;
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPVERCONFLICT
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct tagVCPVERCONFLICT {
|
||
|
|
||
|
LPCSTR lpszOldFileName;
|
||
|
LPCSTR lpszNewFileName;
|
||
|
DWORD dwConflictType; /* Same values as VerInstallFiles */
|
||
|
LPVOID lpvinfoOld; /* Version information resources */
|
||
|
LPVOID lpvinfoNew;
|
||
|
WORD wAttribOld; /* File attributes for original */
|
||
|
LPARAM lparamRef; /* Reference data for callback */
|
||
|
|
||
|
} VCPVERCONFLICT, FAR *LPVCPVERCONFLICT;
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Callback functions
|
||
|
*****************************************************************************/
|
||
|
|
||
|
typedef LRESULT (CALLBACK *VIFPROC)(LPVOID lpvObj, UINT uMsg, WPARAM wParam, LPARAM lParam, LPARAM lparamRef);
|
||
|
|
||
|
LRESULT CALLBACK vcpDefCallbackProc(LPVOID lpvObj, UINT uMsg, WPARAM wParam, LPARAM lParam, LPARAM lparamRef);
|
||
|
|
||
|
// callback for default UI.
|
||
|
// lparamRef --> a VCPUIINFO structure
|
||
|
LRESULT CALLBACK vcpUICallbackProc(LPVOID lpvObj, UINT uMsg, WPARAM wParam, LPARAM lParam, LPARAM lparamRef);
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VCPUIINFO
|
||
|
*
|
||
|
* This structure is passed in as the lparamRef of vcpUICallbackProc.
|
||
|
*
|
||
|
* on using vcpUICallbackProc:
|
||
|
* - to use, have vcpUICallbackProc as the callback for vcpOpen with
|
||
|
* an appropriately filled in VCPUIINFO structure as the lparamRef.
|
||
|
*
|
||
|
* - based on flags, hwndProgress is created and maintained
|
||
|
* - lpfnStatCallback is called with only status messages
|
||
|
* returning VCPM_ABORT indicates that the copy should be aborted
|
||
|
* - if hwndProgress is non-NULL, the control with idProgress will
|
||
|
* receive progress gauge messages as appropriate
|
||
|
*
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
#define VCPUI_CREATEPROGRESS 0x0001 // callback should create and manage progress gauge dialog
|
||
|
#define VCPUI_NOBROWSE 0x0002 // no browse button in InsertDisk
|
||
|
#define VCPUI_RENAMEREQUIRED 0x0004 // as a result of a file being in use at copy, reboot required
|
||
|
#define VCPUI_BACKUPVER 0x0008 // backup version conflicts instead of displaying UI
|
||
|
|
||
|
typedef struct {
|
||
|
UINT flags;
|
||
|
HWND hwndParent; // window of parent
|
||
|
HWND hwndProgress; // window to get progress updates (nonzero ids)
|
||
|
UINT idPGauge; // id for progress gauge
|
||
|
VIFPROC lpfnStatCallback; // callback for status info (or NULL)
|
||
|
LPARAM lUserData; // caller definable data
|
||
|
LOGDISKID ldidCurrent; // reserved. do not touch.
|
||
|
} VCPUIINFO, FAR *LPVCPUIINFO;
|
||
|
|
||
|
/******************************************************************************
|
||
|
* Callback notification codes
|
||
|
*****************************************************************************/
|
||
|
|
||
|
/* BUGBUG -- VCPN_ABORT should match VCPERROR_INTERRUPTED */
|
||
|
|
||
|
#define VCPN_OK 0 /* All is hunky-dory */
|
||
|
#define VCPN_PROCEED 0 /* The same as VCPN_OK */
|
||
|
|
||
|
#define VCPN_ABORT (-1) /* Cancel current operation */
|
||
|
#define VCPN_RETRY (-2) /* Retry current operation */
|
||
|
#define VCPN_IGNORE (-3) /* Ignore error and continue */
|
||
|
#define VCPN_SKIP (-4) /* Skip this file and continue */
|
||
|
#define VCPN_FORCE (-5) /* Force an action */
|
||
|
#define VCPN_DEFER (-6) /* Save the action for later */
|
||
|
#define VCPN_FAIL (-7) /* Return failure back to caller */
|
||
|
#define VCPN_RETRYFILE (-8) // An error ocurred during file copy, do it again.
|
||
|
|
||
|
/*****************************************************************************
|
||
|
* Callback message numbers
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#define VCPM_CLASSOF(uMsg) HIBYTE(uMsg)
|
||
|
#define VCPM_TYPEOF(uMsg) (0x00FF & (uMsg)) // LOBYTE(uMsg)
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* ERRORs
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define VCPM_ERRORCLASSDELTA 0x80
|
||
|
#define VCPM_ERRORDELTA 0x8000 /* Where the errors go */
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* Disk information callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define VCPM_DISKCLASS 0x01
|
||
|
#define VCPM_DISKFIRST 0x0100
|
||
|
#define VCPM_DISKLAST 0x01FF
|
||
|
|
||
|
enum tagVCPM_DISK {
|
||
|
|
||
|
VCPM_DISKCREATEINFO = VCPM_DISKFIRST,
|
||
|
VCPM_DISKGETINFO,
|
||
|
VCPM_DISKDESTROYINFO,
|
||
|
VCPM_DISKPREPINFO,
|
||
|
|
||
|
VCPM_DISKENSURE,
|
||
|
VCPM_DISKPROMPT,
|
||
|
|
||
|
VCPM_DISKFORMATBEGIN,
|
||
|
VCPM_DISKFORMATTING,
|
||
|
VCPM_DISKFORMATEND,
|
||
|
|
||
|
/* Remaining messages reserved for future use */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* File copy callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
// BUGBUG: this needs to be merged back with other internal errors
|
||
|
#define VCPERROR_IO (VCP_ERROR - ERR_VCP_IO) /* Hardware error encountered */
|
||
|
|
||
|
#define VCPM_FILEINCLASS 0x02
|
||
|
#define VCPM_FILEOUTCLASS 0x03
|
||
|
#define VCPM_FILEFIRSTIN 0x0200
|
||
|
#define VCPM_FILEFIRSTOUT 0x0300
|
||
|
#define VCPM_FILELAST 0x03FF
|
||
|
|
||
|
enum tagVCPM_FILE {
|
||
|
VCPM_FILEOPENIN = VCPM_FILEFIRSTIN,
|
||
|
VCPM_FILEGETFATTR,
|
||
|
VCPM_FILECLOSEIN,
|
||
|
VCPM_FILECOPY,
|
||
|
VCPM_FILENEEDED,
|
||
|
|
||
|
VCPM_FILEOPENOUT = VCPM_FILEFIRSTOUT,
|
||
|
VCPM_FILESETFATTR,
|
||
|
VCPM_FILECLOSEOUT,
|
||
|
VCPM_FILEFINALIZE,
|
||
|
VCPM_FILEDELETE,
|
||
|
VCPM_FILERENAME,
|
||
|
/* Remaining messages reserved for future use */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VIRTNODE callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define VCPM_NODECLASS 0x04
|
||
|
#define VCPM_NODEFIRST 0x0400
|
||
|
#define VCPM_NODELAST 0x04FF
|
||
|
|
||
|
enum tagVCPM_NODE {
|
||
|
VCPM_NODECREATE = VCPM_NODEFIRST,
|
||
|
VCPM_NODEACCEPT,
|
||
|
VCPM_NODEREJECT,
|
||
|
VCPM_NODEDESTROY,
|
||
|
VCPM_NODECHANGEDESTDIR,
|
||
|
VCPM_NODECOMPARE,
|
||
|
/* Remaining messages reserved for future use */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* TALLY callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define VCPM_TALLYCLASS 0x05
|
||
|
#define VCPM_TALLYFIRST 0x0500
|
||
|
#define VCPM_TALLYLAST 0x05FF
|
||
|
|
||
|
enum tagVCPM_TALLY {
|
||
|
VCPM_TALLYSTART = VCPM_TALLYFIRST,
|
||
|
VCPM_TALLYEND,
|
||
|
VCPM_TALLYFILE,
|
||
|
VCPM_TALLYDISK,
|
||
|
/* Remaining messages reserved for future use */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VER callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define VCPM_VERCLASS 0x06
|
||
|
#define VCPM_VERFIRST 0x0600
|
||
|
#define VCPM_VERLAST 0x06FF
|
||
|
|
||
|
enum tagVCPM_VER {
|
||
|
VCPM_VERCHECK = VCPM_VERFIRST,
|
||
|
VCPM_VERCHECKDONE,
|
||
|
VCPM_VERRESOLVECONFLICT,
|
||
|
/* Remaining messages reserved for future use */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* VSTAT callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
#define VCPM_VSTATCLASS 0x07
|
||
|
#define VCPM_VSTATFIRST 0x0700
|
||
|
#define VCPM_VSTATLAST 0x07FF
|
||
|
|
||
|
enum tagVCPM_VSTAT {
|
||
|
VCPM_VSTATSTART = VCPM_VSTATFIRST,
|
||
|
VCPM_VSTATEND,
|
||
|
VCPM_VSTATREAD,
|
||
|
VCPM_VSTATWRITE,
|
||
|
VCPM_VSTATNEWDISK,
|
||
|
|
||
|
VCPM_VSTATCLOSESTART, // Start of VCP close
|
||
|
VCPM_VSTATCLOSEEND, // upon leaving VCP close
|
||
|
VCPM_VSTATBACKUPSTART, // Backup is beginning
|
||
|
VCPM_VSTATBACKUPEND, // Backup is finished
|
||
|
VCPM_VSTATRENAMESTART, // Rename phase start/end
|
||
|
VCPM_VSTATRENAMEEND,
|
||
|
VCPM_VSTATCOPYSTART, // Acutal copy phase
|
||
|
VCPM_VSTATCOPYEND,
|
||
|
VCPM_VSTATDELETESTART, // Delete phase
|
||
|
VCPM_VSTATDELETEEND,
|
||
|
VCPM_VSTATPATHCHECKSTART, // Check for valid paths
|
||
|
VCPM_VSTATPATHCHECKEND,
|
||
|
VCPM_VSTATCERTIFYSTART, // Certify phase
|
||
|
VCPM_VSTATCERTIFYEND,
|
||
|
VCPM_VSTATUSERABORT, // User wants to quit.
|
||
|
VCPM_VSTATYIELD, // Do a yield.
|
||
|
/* Remaining messages reserved for future use */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* Destination info callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/* BUGBUG -- find a reasonable message range for this */
|
||
|
#define VCPM_PATHCLASS 0x08
|
||
|
#define VCPM_PATHFIRST 0x0800
|
||
|
#define VCPM_PATHLAST 0x08FF
|
||
|
|
||
|
enum tagVCPM_PATH{
|
||
|
VCPM_BUILDPATH = VCPM_PATHFIRST,
|
||
|
VCPM_UNIQUEPATH,
|
||
|
VCPM_CHECKPATH,
|
||
|
};
|
||
|
|
||
|
// #define VCPM_BUILDPATH 0x83
|
||
|
|
||
|
/*--------------------------------------------------------------------------*
|
||
|
* Patch processing callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/* BUGBUG -- find a reasonable message range for this */
|
||
|
#define VCPM_PATCHCLASS 0x09
|
||
|
#define VCPM_PATCHFIRST 0x0900
|
||
|
#define VCPM_PATCHLAST 0x09FF
|
||
|
|
||
|
// filepatchbefore -- try to patch before the copy action
|
||
|
// filepatchafter -- try to patch after the copy action
|
||
|
|
||
|
enum tagVCPM_PATCH{
|
||
|
|
||
|
VCPM_FILEPATCHBEFORECPY = VCPM_PATCHFIRST,
|
||
|
VCPM_FILEPATCHAFTERCPY,
|
||
|
VCPM_FILEPATCHINFOPEN,
|
||
|
VCPM_FILEPATCHINFCLOSE,
|
||
|
};
|
||
|
|
||
|
/*--------------------------------------------------------------------------*
|
||
|
* Certificate processing callbacks
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/* BUGBUG -- find a reasonable message range for this */
|
||
|
#define VCPM_CERTCLASS 0x0A
|
||
|
#define VCPM_CERTFIRST 0x0A00
|
||
|
#define VCPM_CERTLAST 0x0AFF
|
||
|
|
||
|
// filepatchbefore -- try to patch before the copy action
|
||
|
// filepatchafter -- try to patch after the copy action
|
||
|
|
||
|
enum tagVCPM_CERT{
|
||
|
|
||
|
VCPM_FILECERTIFY = VCPM_CERTFIRST,
|
||
|
VCPM_FILECERTIFYWARN,
|
||
|
};
|
||
|
|
||
|
/*****************************************************************************/
|
||
|
void WINAPI VcpAddMRUPath( LPCSTR lpszPath );
|
||
|
#define SZ_INSTALL_LOCATIONS "InstallLocationsMRU"
|
||
|
|
||
|
|
||
|
RETERR WINAPI VcpOpen(VIFPROC vifproc, LPARAM lparamMsgRef);
|
||
|
|
||
|
RETERR WINAPI VcpClose(WORD fl, LPCSTR lpszBackupDest);
|
||
|
|
||
|
RETERR WINAPI VcpFlush(WORD fl, LPCSTR lpszBackupDest);
|
||
|
|
||
|
#define VCPFL_ABANDON 0x0000 /* Abandon all pending file copies */
|
||
|
#define VCPFL_BACKUP 0x0001 /* Perform backup */
|
||
|
#define VCPFL_COPY 0x0002 /* Copy files */
|
||
|
#define VCPFL_BACKUPANDCOPY (VCPFL_BACKUP | VCPFL_COPY)
|
||
|
#define VCPFL_INSPECIFIEDORDER 0x0004 /* Do not sort before copying */
|
||
|
#define VCPFL_DELETE 0x0008
|
||
|
#define VCPFL_RENAME 0x0010
|
||
|
#define VCPFL_ALL (VCPFL_COPY | VCPFL_DELETE | VCPFL_RENAME )
|
||
|
|
||
|
typedef int (CALLBACK *VCPENUMPROC)(LPVIRTNODE lpvn, LPARAM lparamRef);
|
||
|
|
||
|
int WINAPI vcpEnumFiles(VCPENUMPROC vep, LPARAM lparamRef);
|
||
|
|
||
|
enum tag_VCPM_EXPLAIN{
|
||
|
VCPEX_SRC_DISK,
|
||
|
VCPEX_SRC_CABINET,
|
||
|
VCPEX_SRC_LOCN,
|
||
|
VCPEX_DST_LOCN,
|
||
|
VCPEX_SRC_FILE,
|
||
|
VCPEX_DST_FILE,
|
||
|
VCPEX_DST_FILE_FINAL,
|
||
|
VCPEX_DOS_ERROR,
|
||
|
VCPEX_MESSAGE,
|
||
|
VCPEX_DOS_SOLUTION,
|
||
|
VCPEX_SRC_FULL,
|
||
|
VCPEX_DST_FULL,
|
||
|
VCPEX_DST_FULL_FINAL
|
||
|
};
|
||
|
|
||
|
LPCSTR WINAPI VcpExplain( LPVIRTNODE lpVn, DWORD dwWhat );
|
||
|
|
||
|
/* Flag bits that can be set via VcpQueueCopy */
|
||
|
// Various Lparams for files
|
||
|
#define VNLP_SYSCRITICAL 0x0001 // This file should not be skipped
|
||
|
#define VNLP_SETUPCRITICAL 0x0002 // This file cannot be skipped
|
||
|
#define VNLP_NOVERCHECK 0x0004 // This file must not be VerResolved.
|
||
|
#define VNLP_FORCETEMP 0x0008 // This file must left as a temp name
|
||
|
#define VNLP_IFEXISTS 0x0010 // File skipped if already on machine
|
||
|
#define VNLP_KEEPNEWER 0x0020 // If the dest file is newer - keep it (frosting)
|
||
|
#define VNLP_PATCHIFEXIST 0x0040 // patch only the file exists, if file not there,
|
||
|
#define VNLP_NOPATCH 0x0080 // per file base turn on/off patch option (default patch on)
|
||
|
#define VNLP_CATALOGCERT 0x0100 // This file is a catalog certificate.
|
||
|
#define VNLP_NEEDCERTIFY 0x0200 // This file need to be certified.
|
||
|
#define VNLP_COPYIFEXISTS 0x0400 // if dest file exists, copy it.
|
||
|
|
||
|
// VcpEnumFiles Flags.
|
||
|
|
||
|
#define VEN_OP 0x00ff /* Operation field */
|
||
|
|
||
|
#define VEN_NOP 0x0000 /* Do nothing */
|
||
|
#define VEN_DELETE 0x0001 /* Delete current item */
|
||
|
#define VEN_SET 0x0002 /* Change value of current item */
|
||
|
#define VEN_ADVANCE 0x0003 /* Move to head of list */ /* ;Internal */
|
||
|
|
||
|
#define VEN_FL 0xff00 /* Flags field */
|
||
|
|
||
|
#define VEN_STOP 0x0100 /* Stop enumeration after this item */
|
||
|
#define VEN_ERROR 0x8000 /* Stop enumeration after this item
|
||
|
* and ignore the OP field */
|
||
|
|
||
|
// BUGBUG: add the other VCP stuff necessary to use this
|
||
|
|
||
|
// BUGBUG: remove the lpsz*Dir fields, make overload the LDID with them
|
||
|
|
||
|
RETERR WINAPI VcpQueueCopy(LPCSTR lpszSrcFileName, LPCSTR lpszDstFileName,
|
||
|
LPCSTR lpszSrcDir, LPCSTR lpszDstDir,
|
||
|
LOGDISKID ldidSrc, LOGDISKID ldidDst,
|
||
|
LPEXPANDVTBL lpExpandVtbl, WORD fl,
|
||
|
LPARAM lParam);
|
||
|
|
||
|
RETERR WINAPI VcpQueueDelete( LPCSTR lpszDstFileName,
|
||
|
LPCSTR lpszDstDir,
|
||
|
LOGDISKID ldidDst,
|
||
|
LPARAM lParamRef );
|
||
|
|
||
|
RETERR WINAPI VcpQueueRename( LPCSTR lpszSrcFileName,
|
||
|
LPCSTR lpszDstFileName,
|
||
|
LPCSTR lpszSrcDir,
|
||
|
LPCSTR lpszDstDir,
|
||
|
LOGDISKID ldidSrc,
|
||
|
LOGDISKID ldidDst,
|
||
|
LPARAM lParam );
|
||
|
|
||
|
RETERR WINAPI vcpRegisterSourcePath( LPCSTR lpszKey, LPARAM lpExtra,
|
||
|
LPCSTR lpszPath );
|
||
|
RETERR WINAPI vcpGetSourcePath( LPCSTR lpszKey, LPARAM lpExtra,
|
||
|
LPSTR lpszBuf, UINT uBufSize );
|
||
|
|
||
|
#endif // NOVCP
|
||
|
|
||
|
#ifndef NOINF
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// Inf Parser API declaration and definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
enum _ERR_IP
|
||
|
{
|
||
|
ERR_IP_INVALID_FILENAME = (IP_ERROR + 1),
|
||
|
ERR_IP_ALLOC_ERR,
|
||
|
ERR_IP_INVALID_SECT_NAME,
|
||
|
ERR_IP_OUT_OF_HANDLES,
|
||
|
ERR_IP_INF_NOT_FOUND,
|
||
|
ERR_IP_INVALID_INFFILE,
|
||
|
ERR_IP_INVALID_HINF,
|
||
|
ERR_IP_INVALID_FIELD,
|
||
|
ERR_IP_SECT_NOT_FOUND,
|
||
|
ERR_IP_END_OF_SECTION,
|
||
|
ERR_IP_PROFILE_NOT_FOUND,
|
||
|
ERR_IP_LINE_NOT_FOUND,
|
||
|
ERR_IP_FILEREAD,
|
||
|
ERR_IP_TOOMANYINFFILES,
|
||
|
ERR_IP_INVALID_SAVERESTORE,
|
||
|
ERR_IP_INVALID_INFTYPE
|
||
|
};
|
||
|
|
||
|
#define INFTYPE_TEXT 0
|
||
|
#define INFTYPE_EXECUTABLE 1
|
||
|
|
||
|
#define MAX_SECT_NAME_LEN 32
|
||
|
|
||
|
typedef struct _INF NEAR * HINF;
|
||
|
typedef struct _INFLINE FAR * HINFLINE; // tolken to inf line
|
||
|
|
||
|
RETERR WINAPI IpOpen(LPCSTR pszFileSpec, HINF FAR * lphInf);
|
||
|
RETERR WINAPI IpOpenEx(LPCSTR pszFileSpec, HINF FAR * lphInf, UINT InfType);
|
||
|
RETERR WINAPI IpOpenAppend(LPCSTR pszFileSpec, HINF hInf);
|
||
|
RETERR WINAPI IpOpenAppendEx(LPCSTR pszFileSpec, HINF hInf, UINT InfType);
|
||
|
RETERR WINAPI IpSaveRestorePosition(HINF hInf, BOOL bSave);
|
||
|
RETERR WINAPI IpClose(HINF hInf);
|
||
|
RETERR WINAPI IpGetLineCount(HINF hInf, LPCSTR lpszSection, int FAR * lpCount);
|
||
|
RETERR WINAPI IpFindFirstLine(HINF hInf, LPCSTR lpszSect, LPCSTR lpszKey, HINFLINE FAR * lphRet);
|
||
|
RETERR WINAPI IpFindNextLine(HINF hInf, HINFLINE FAR * lphRet);
|
||
|
RETERR WINAPI IpFindNextMatchLine(HINF hInf, LPCSTR lpszKey, HINFLINE FAR * lphRet);
|
||
|
RETERR WINAPI IpGetProfileString(HINF hInf, LPCSTR lpszSec, LPCSTR lpszKey, LPSTR lpszBuf, int iBufSize);
|
||
|
RETERR WINAPI IpGetFieldCount(HINF hInf, HINFLINE hInfLine, int FAR * lpCount);
|
||
|
RETERR WINAPI IpGetFileName(HINF hInf, LPSTR lpszBuf, int iBufSize);
|
||
|
RETERR WINAPI IpGetIntField(HINF hInf, HINFLINE hInfLine, int iField, int FAR * lpVal);
|
||
|
RETERR WINAPI IpGetLongField(HINF hInf, HINFLINE hInfLine, int iField, long FAR * lpVal);
|
||
|
RETERR WINAPI IpGetStringField(HINF hInf, HINFLINE hInfLine, int iField, LPSTR lpBuf, int iBufSize, int FAR * lpuCount);
|
||
|
RETERR WINAPI IpGetVersionString(LPSTR lpszInfFile, LPSTR lpszValue, LPSTR lpszBuf, int cbBuf, LPSTR lpszDefaultValue);
|
||
|
RETERR WINAPI IpOpenValidate( LPCSTR lpszInfFile, HINF FAR * lphInf,
|
||
|
DWORD dwVer, DWORD dwFlags) ;
|
||
|
RETERR WINAPI IpGetDriverDate
|
||
|
(
|
||
|
LPSTR lpszInfName,
|
||
|
UINT infType,
|
||
|
LPSTR lpszSectionName,
|
||
|
LPWORD lpwDate
|
||
|
);
|
||
|
|
||
|
RETERR WINAPI IpGetDriverVersion
|
||
|
(
|
||
|
LPSTR lpszInfName,
|
||
|
UINT infType,
|
||
|
LPSTR lpszSectionName,
|
||
|
LPSTR lpszVersion,
|
||
|
WORD cbVersion
|
||
|
);
|
||
|
|
||
|
#endif // NOINF
|
||
|
|
||
|
|
||
|
|
||
|
#ifndef NOTEXTPROC
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// Text processing API declaration and definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
/* Relative/absolute positioning */
|
||
|
#define SEC_SET 1 // Absolute positioning (relative to the start)
|
||
|
#define SEC_END 2 // Realtive to the end
|
||
|
#define SEC_CUR 3 // Relative to the current line.
|
||
|
|
||
|
#define SEC_OPENALWAYS 1 // Always open a section, no error if it does not exist
|
||
|
#define SEC_OPENEXISTING 2 // Open an existing section, an error given if it does not exist.
|
||
|
#define SEC_OPENNEWALWAYS 3 // Open a section (present or not) and discard its contents.
|
||
|
#define SEC_OPENNEWEXISTING 4 // Open an existing section (discarding its contents). Error if not existing
|
||
|
|
||
|
// Flags for TP_OpenFile().
|
||
|
//
|
||
|
// Use autoexec/config.sys key delimiters
|
||
|
//
|
||
|
#define TP_WS_KEEP 1
|
||
|
|
||
|
// If TP code running under SETUP, the foll. flag specifies whether
|
||
|
// to cache this file or not! Use this, if you want to read a whole
|
||
|
// file in when doing the TpOpenSection()!
|
||
|
//
|
||
|
#define TP_WS_DONTCACHE 2
|
||
|
|
||
|
// The following are simple errors
|
||
|
enum {
|
||
|
ERR_TP_NOT_FOUND = (TP_ERROR + 1), // line, section, file etc.
|
||
|
// not necessarily terminal
|
||
|
ERR_TP_NO_MEM, // couldn't perform request - generally terminal
|
||
|
ERR_TP_READ, // could not read the disc - terminal
|
||
|
ERR_TP_WRITE, // could not write the data - terminal.
|
||
|
ERR_TP_INVALID_REQUEST, // Multitude of sins - not necessarily terminal.
|
||
|
ERR_TP_INVALID_LINE // Invalid line from DELETE_LINE etc.
|
||
|
};
|
||
|
|
||
|
/* Data handles */
|
||
|
DECLARE_HANDLE(HTP);
|
||
|
typedef HTP FAR * LPHTP;
|
||
|
|
||
|
/* File handles */
|
||
|
DECLARE_HANDLE(HFN);
|
||
|
typedef HFN FAR * LPHFN;
|
||
|
|
||
|
typedef UINT TFLAG;
|
||
|
typedef UINT LINENUM, FAR * LPLINENUM;
|
||
|
|
||
|
#define MAX_REGPATH 256 // Max Registry Path Length
|
||
|
#define LINE_LEN 256 // BUGBUG: max line length?
|
||
|
#define SECTION_LEN 32 // BUGBUG: max length of a section name?
|
||
|
#define MAX_STRING_LEN 512 // BUGBUG: review this
|
||
|
|
||
|
/* Function prototypes */
|
||
|
RETERR WINAPI TpOpenFile(LPCSTR Filename, LPHFN phFile, TFLAG Flag);
|
||
|
RETERR WINAPI TpCloseFile(HFN hFile);
|
||
|
RETERR WINAPI TpOpenSection(HFN hfile, LPHTP phSection, LPCSTR Section, TFLAG flag);
|
||
|
RETERR WINAPI TpCloseSection(HTP Section);
|
||
|
RETERR WINAPI TpCommitSection(HFN hFile, HTP hSection, LPCSTR Section, TFLAG flag);
|
||
|
LINENUM WINAPI TpGetLine(HTP hSection, LPCSTR key, LPCSTR value, int rel, int orig, LPLINENUM lpLineNum );
|
||
|
LINENUM WINAPI TpGetNextLine(HTP hSection, LPCSTR key, LPCSTR value, LPLINENUM lpLineNum );
|
||
|
RETERR WINAPI TpInsertLine(HTP hSection, LPCSTR key, LPCSTR value, int rel, int orig, TFLAG flag);
|
||
|
RETERR WINAPI TpReplaceLine(HTP hSection, LPCSTR key, LPCSTR value, int rel, int orig, TFLAG flag);
|
||
|
RETERR WINAPI TpDeleteLine(HTP hSection, int rel, int orig,TFLAG flag);
|
||
|
RETERR WINAPI TpMoveLine(HTP hSection, int src_rel, int src_orig, int dest_rel, int dest_orig, TFLAG flag);
|
||
|
RETERR WINAPI TpGetLineContents(HTP hSection, LPSTR buffer, UINT bufsize, UINT FAR * lpActualSize,int rel, int orig, TFLAG flag);
|
||
|
|
||
|
// UINT WINAPI TpGetWindowsDirectory(LPSTR lpDest, UINT size);
|
||
|
// UINT WINAPI TpGetSystemDirectory(LPSTR lpDest, UINT size);
|
||
|
|
||
|
int WINAPI TpGetPrivateProfileString(LPCSTR lpszSect, LPCSTR lpszKey, LPCSTR lpszDefault, LPSTR lpszReturn, int nSize, LPCSTR lpszFile);
|
||
|
int WINAPI TpWritePrivateProfileString(LPCSTR lpszSect, LPCSTR lpszKey, LPCSTR lpszString, LPCSTR lpszFile);
|
||
|
int WINAPI TpGetProfileString(LPCSTR lpszSect, LPCSTR lpszKey, LPCSTR lpszDefault, LPSTR lpszReturn, int nSize);
|
||
|
BOOL WINAPI TpWriteProfileString(LPCSTR lpszSect , LPCSTR lpszKey , LPCSTR lpszString);
|
||
|
|
||
|
#endif // NOTEXTPROC
|
||
|
|
||
|
|
||
|
|
||
|
#ifndef NOGENINSTALL
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// Generic Installer prototypes and definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
enum _ERR_GENERIC
|
||
|
{
|
||
|
ERR_GEN_LOW_MEM = GEN_ERROR+1, // Insufficient memory.
|
||
|
ERR_GEN_INVALID_FILE, // Invalid INF file.
|
||
|
ERR_GEN_LOGCONFIG, // Can't process LogConfig=.
|
||
|
ERR_GEN_CFGAUTO, // Can't process CONFIG.SYS/AUTOEXEC.BAT
|
||
|
ERR_GEN_UPDINI, // Can't process UpdateInis=.
|
||
|
ERR_GEN_UPDINIFIELDS, // Can't process UpdateIniFields=.
|
||
|
ERR_GEN_ADDREG, // Can't process AddReg=.
|
||
|
ERR_GEN_DELREG, // Can't process DelReg=.
|
||
|
ERR_GEN_INI2REG, // Can't process Ini2Reg=.
|
||
|
ERR_GEN_FILE_COPY, // Can't process CopyFiles=.
|
||
|
ERR_GEN_FILE_DEL, // Can't process DelFiles=.
|
||
|
ERR_GEN_FILE_REN, // Can't process RenFiles=.
|
||
|
ERR_GEN_REG_API, // Error returned by Reg API.
|
||
|
ERR_GEN_DO_FILES, // can't do Copy, Del or RenFiles.
|
||
|
ERR_GEN_ADDIME, // Can't process AddIme=.
|
||
|
ERR_GEN_DELIME, // Can't process DelIme=.
|
||
|
ERR_GEN_PERUSER, // Can't process PerUserInstall=.
|
||
|
ERR_GEN_BITREG, // Can't process BitReg=.
|
||
|
};
|
||
|
|
||
|
// The cbSize field will always be set to sizeof(GENCALLBACKINFO_S).
|
||
|
// All unused fields (for the operation) will be not be initialized.
|
||
|
// For example, when the operation is GENO_DELFILE, the Src fields will
|
||
|
// not have any sensible values (Dst fields will be set correctly) as
|
||
|
// VcpQueueDelete only accepts Dst parameters.
|
||
|
//
|
||
|
/***************************************************************************
|
||
|
* GenCallbackINFO structure passed to GenInstall CallBack functions.
|
||
|
***************************************************************************/
|
||
|
typedef struct _GENCALLBACKINFO_S { /* gen-callback struc */
|
||
|
WORD cbSize; // Size of this structure (bytes).
|
||
|
WORD wOperation; // Operation being performed.
|
||
|
LOGDISKID ldidSrc; // Logical Disk ID for Source.
|
||
|
LPCSTR pszSrcSubDir; // Source sub-dir off of the LDID.
|
||
|
LPCSTR pszSrcFileName; // Source file name (base name).
|
||
|
LOGDISKID ldidDst; // Logical Disk ID for Dest.
|
||
|
LPCSTR pszDstSubDir; // Dest. sub-dir off of the LDID.
|
||
|
LPCSTR pszDstFileName; // Dest. file name (base name).
|
||
|
LPEXPANDVTBL lpExpandVtbl; // BUGBUG needed? NULL right now!
|
||
|
WORD wflags; // flags for VcpQueueCopy.
|
||
|
LPARAM lParam; // LPARAM to the Vcp API.
|
||
|
} GENCALLBACKINFO_S, FAR *LPGENCALLBACKINFO;
|
||
|
|
||
|
/***************************************************************************
|
||
|
* GenCallback notification codes -- callback proc returns 1 of foll. values.
|
||
|
***************************************************************************/
|
||
|
#define GENN_OK 0 /* All is hunky-dory. Do the VCP operation */
|
||
|
#define GENN_PROCEED 0 /* The same as GENN_OK */
|
||
|
|
||
|
#define GENN_ABORT (-1) /* Cancel current GenInstall altogether */
|
||
|
#define GENN_SKIP (-2) /* Skip this file and continue */
|
||
|
|
||
|
/***************************************************************************
|
||
|
* VCP Operation being performed by GenInstall() -- wOperation values in
|
||
|
* GENCALLBACKINFO structure above.
|
||
|
***************************************************************************/
|
||
|
#define GENO_COPYFILE 1 /* VCP copyfile being done */
|
||
|
#define GENO_DELFILE 2 /* VCP delfile being done */
|
||
|
#define GENO_RENFILE 3 /* VCP renfile being done */
|
||
|
#define GENO_WININITRENAME 4 /* VCP wininit rename being added */
|
||
|
|
||
|
typedef LRESULT (CALLBACK *GENCALLBACKPROC)(LPGENCALLBACKINFO lpGenInfo,
|
||
|
LPARAM lparamRef);
|
||
|
|
||
|
RETERR WINAPI GenInstall( HINF hinfFile, LPCSTR szInstallSection, WORD wFlags );
|
||
|
RETERR WINAPI GenInstallEx( HINF hInf, LPCSTR szInstallSection, WORD wFlags,
|
||
|
HKEY hRegKey, GENCALLBACKPROC CallbackProc,
|
||
|
LPARAM lparam);
|
||
|
|
||
|
RETERR WINAPI GenWinInitRename(LPCSTR szNew, LPSTR szOld, LOGDISKID ldid);
|
||
|
RETERR WINAPI GenCopyLogConfig2Reg(HINF hInf, HKEY hRegKey,
|
||
|
LPCSTR szLogConfigSection);
|
||
|
void WINAPI GenFormStrWithoutPlaceHolders( LPSTR szDst, LPCSTR szSrc,
|
||
|
HINF hInf ) ;
|
||
|
RETERR WINAPI GenInitSrcPathsInReg(HINF hInf);
|
||
|
|
||
|
// Flags for GenAddReg() from INf /GenSURegSetValueEx()
|
||
|
//
|
||
|
// (updated from setupapi.h, with unsupported features commented out)
|
||
|
//
|
||
|
#define FLG_ADDREG_BINVALUETYPE ( 0x00000001 )
|
||
|
#define FLG_ADDREG_NOCLOBBER ( 0x00000002 )
|
||
|
#define FLG_ADDREG_DELVAL ( 0x00000004 )
|
||
|
//#define FLG_ADDREG_APPEND ( 0x00000008 ) // Currently supported only
|
||
|
// // for REG_MULTI_SZ values.
|
||
|
#define FLG_ADDREG_KEYONLY ( 0x00000010 ) // Just create the key, ignore value
|
||
|
#define FLG_ADDREG_OVERWRITEONLY ( 0x00000020 ) // Set only if value already exists
|
||
|
#define FLG_ADDREG_TYPE_REPLACEIFEXISTS ( 0x00000040 )
|
||
|
|
||
|
#define FLG_ADDREG_TYPE_MASK ( 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE )
|
||
|
#define FLG_ADDREG_TYPE_SZ ( 0x00000000 )
|
||
|
//#define FLG_ADDREG_TYPE_MULTI_SZ ( 0x00010000 )
|
||
|
//#define FLG_ADDREG_TYPE_EXPAND_SZ ( 0x00020000 )
|
||
|
#define FLG_ADDREG_TYPE_BINARY ( 0x00000000 | FLG_ADDREG_BINVALUETYPE )
|
||
|
#define FLG_ADDREG_TYPE_DWORD ( 0x00010000 | FLG_ADDREG_BINVALUETYPE )
|
||
|
//#define FLG_ADDREG_TYPE_NONE ( 0x00020000 | FLG_ADDREG_BINVALUETYPE )
|
||
|
|
||
|
// Flags for GenBitReg()
|
||
|
//
|
||
|
#define FLG_BITREG_CLEAR ( 0x00000000 )
|
||
|
#define FLG_BITREG_SET ( 0x00000001 )
|
||
|
#define FLG_BITREG_TYPE_BINARY ( 0x00000000 )
|
||
|
#define FLG_BITREG_TYPE_DWORD ( 0x00000002 )
|
||
|
|
||
|
|
||
|
RETERR WINAPI GenSURegSetValueEx(HKEY hkeyRoot, LPCSTR szSubKey,
|
||
|
LPCSTR lpszValueName, DWORD dwValType,
|
||
|
LPBYTE lpszValue, DWORD dwValSize, UINT uFlags );
|
||
|
|
||
|
// A devnode is just a DWORD and this is easier than
|
||
|
// having to include configmg.h for everybody
|
||
|
RETERR WINAPI GenInfLCToDevNode(ATOM atInfFileName, LPSTR lpszSectionName,
|
||
|
BOOL bInstallSec, UINT InfType,
|
||
|
DWORD dnDevNode);
|
||
|
|
||
|
// Bit fields for GenInstall() (for wFlags parameter) -- these can be OR-ed!
|
||
|
|
||
|
#define GENINSTALL_DO_REGSRCPATH 64
|
||
|
|
||
|
// Remove temporarily because of incompatibilities with INET16.DLL #define GENINSTALL_DO_FILES (1 | GENINSTALL_DO_REGSRCPATH)
|
||
|
#define GENINSTALL_DO_FILES 1
|
||
|
#define GENINSTALL_DO_INI 2
|
||
|
#define GENINSTALL_DO_REG 4
|
||
|
#define GENINSTALL_DO_INI2REG 8
|
||
|
#define GENINSTALL_DO_CFGAUTO 16
|
||
|
#define GENINSTALL_DO_LOGCONFIG 32
|
||
|
//
|
||
|
// careful: 64 is already used above
|
||
|
//
|
||
|
#define GENINSTALL_DO_IME 128
|
||
|
#define GENINSTALL_DO_PERUSER 256
|
||
|
|
||
|
#define GENINSTALL_DO_INIREG (GENINSTALL_DO_INI | \
|
||
|
GENINSTALL_DO_REG | \
|
||
|
GENINSTALL_DO_INI2REG)
|
||
|
|
||
|
#define GENINSTALL_DO_ALL (GENINSTALL_DO_FILES | \
|
||
|
GENINSTALL_DO_INIREG | \
|
||
|
GENINSTALL_DO_CFGAUTO | \
|
||
|
GENINSTALL_DO_LOGCONFIG | \
|
||
|
GENINSTALL_DO_REGSRCPATH | \
|
||
|
GENINSTALL_DO_IME | \
|
||
|
GENINSTALL_DO_PERUSER)
|
||
|
|
||
|
#endif // NOGENINSTALL
|
||
|
|
||
|
|
||
|
|
||
|
#ifndef NODEVICENSTALL
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// Device Installer prototypes and definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @typee _ERR_DEVICE_INSTALL | Error return codes for Device Installation
|
||
|
* APIs.
|
||
|
*
|
||
|
* @emem ERR_DI_INVALID_DEVICE_ID | Incorrectly formed device ID.
|
||
|
*
|
||
|
* @emem ERR_DI_INVALID_COMPATIBLE_DEVICE_LIST | Invalid compatible device list.
|
||
|
*
|
||
|
* @emem ERR_DI_REG_API | Error returned by one of the registry API.
|
||
|
*
|
||
|
* @emem ERR_DI_LOW_MEM | Insufficient memory to complete.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_DEV_INFO | A passed in DEVICE_INFO struct is invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_INVALID_CLASS_INSTALLER | The class installer is listed incorrecrly
|
||
|
* in the registry, or points to an invalid class installer.
|
||
|
*
|
||
|
* @emem ERR_DI_DO_DEFAULT | Do the default action for the requested operation.
|
||
|
*
|
||
|
* @emem ERR_DI_USER_CANCEL | The user cancelled the operation.
|
||
|
*
|
||
|
* @emem ERR_DI_NOFILECOPY | No need to copy files (in install).
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_CLASS_INFO | A passed in CLASS_INFO struct is invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_INF | An invalid INF file was encountered.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_MOVEDEV_PARAMS | A passed in MOVEDEVICE_PARAMS struct was
|
||
|
* invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_NO_INF | No INF found on supplied OEM path.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_PROPCHANGE_PARAMS | A passed in PROPCHANGE_PARMS struct was
|
||
|
* invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_SELECTDEVICE_PARAMS | A passed in SELECTEDEVICE_PARAMS struct
|
||
|
* was invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_REMOVEDEVICE_PARAMS | A passed in REMOVEDEVICE_PARAMS struct
|
||
|
* was invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_UNREMOVEDEVICE_PARAMS | A passed in UNREMOVEDEVICE_PARAMS struct
|
||
|
* was invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_ENABLECLASS_PARAMS | A passed in ENABLECLASS_PARAMS struct
|
||
|
* was invalid.
|
||
|
*
|
||
|
* @emem ERR_DI_FAIL_QUERY | The queried action should not take place.
|
||
|
*
|
||
|
* @emem ERR_DI_API_ERROR | One of the Device installation APIs was called
|
||
|
* incorrectly or with invalid parameters.
|
||
|
*
|
||
|
* @emem ERR_DI_BAD_PATH | An OEM path was specified incorrectly.
|
||
|
*
|
||
|
* @emem ERR_DI_NOUPDATE | No Drivers Were updated
|
||
|
*
|
||
|
* @emem ERR_DI_NODATE | A driver's date/time stamp in the INF could not be found
|
||
|
*
|
||
|
* @emem ERR_DI_NOVERSION | A driver's version the INF could not be found
|
||
|
*
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
enum _ERR_DEVICE_INSTALL
|
||
|
{
|
||
|
ERR_DI_INVALID_DEVICE_ID = DI_ERROR, // Incorrectly formed device IDF
|
||
|
ERR_DI_INVALID_COMPATIBLE_DEVICE_LIST, // Invalid compatible device list
|
||
|
ERR_DI_REG_API, // Error returned by Reg API.
|
||
|
ERR_DI_LOW_MEM, // Insufficient memory to complete
|
||
|
ERR_DI_BAD_DEV_INFO, // Device Info struct invalid
|
||
|
ERR_DI_INVALID_CLASS_INSTALLER, // Registry entry / DLL invalid
|
||
|
ERR_DI_DO_DEFAULT, // Take default action
|
||
|
ERR_DI_USER_CANCEL, // the user cancelled the operation
|
||
|
ERR_DI_NOFILECOPY, // No need to copy files (in install)
|
||
|
ERR_DI_BAD_CLASS_INFO, // Class Info Struct invalid
|
||
|
ERR_DI_BAD_INF, // Bad INF file encountered
|
||
|
ERR_DI_BAD_MOVEDEV_PARAMS, // Bad Move Device Params struct
|
||
|
ERR_DI_NO_INF, // No INF found on OEM disk
|
||
|
ERR_DI_BAD_PROPCHANGE_PARAMS, // Bad property change param struct
|
||
|
ERR_DI_BAD_SELECTDEVICE_PARAMS, // Bad Select Device Parameters
|
||
|
ERR_DI_BAD_REMOVEDEVICE_PARAMS, // Bad Remove Device Parameters
|
||
|
ERR_DI_BAD_ENABLECLASS_PARAMS, // Bad Enable Class Parameters
|
||
|
ERR_DI_FAIL_QUERY, // Fail the Enable Class query
|
||
|
ERR_DI_API_ERROR, // DI API called incorrectly
|
||
|
ERR_DI_BAD_PATH, // An OEM path was specified incorrectly
|
||
|
ERR_DI_BAD_UNREMOVEDEVICE_PARAMS, // Bad Unremove Device Parameters
|
||
|
ERR_DI_NOUPDATE, // No Drivers Were updated
|
||
|
ERR_DI_NODATE, // The driver does not have a Date stamp in the INF
|
||
|
ERR_DI_NOVERSION, // There is not version string in the INF
|
||
|
ERR_DI_DONT_INSTALL, // Don't upgrade the current driver
|
||
|
ERR_DI_NO_DIGITAL_SIGNATURE_CATALOG, // Catalog is not digitally signed
|
||
|
ERR_DI_NO_DIGITAL_SIGNATURE_INF, // Inf is not digitally signed
|
||
|
ERR_DI_NO_DIGITAL_SIGNATURE_FILE, // A file is not digitally signed
|
||
|
};
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types DRIVER_INFO | This structure contains the information necessary
|
||
|
* to present the user with a select device dialog.
|
||
|
*
|
||
|
* @field WORD | cbSize | Size of this structure in bytes.
|
||
|
*
|
||
|
* @field struct _DRIVER_INFO FAR | *lpNextInfo | Pointer to the next DRIVER_INFO
|
||
|
* struct in a linked list.
|
||
|
*
|
||
|
* @field LPSTR | lpszDescription | Pointer to the description of the device being
|
||
|
* supported by this driver.
|
||
|
*
|
||
|
* @field LPSTR | lpszMfgName | Pointer to the name of the manufacture of this
|
||
|
* driver.
|
||
|
*
|
||
|
* @field LPSTR | lpszProviderName | Pointer to provider of this driver if the
|
||
|
* lpdi->Flags has the DI_MULTMFGS flag set.
|
||
|
*
|
||
|
* @field WORD | Rank | The Rank match of this driver. Ranks go from 0 to n, where 0
|
||
|
* is the most compatible.
|
||
|
*
|
||
|
* @field DWORD | dwFlags | Flags that control the use of this driver node. These
|
||
|
* are the same as the flags defined for a DRIVER_NODE.
|
||
|
* @flag DNF_DUPDESC | This driver has the same device description
|
||
|
* from by more than one provider.
|
||
|
* @flag DNF_OLDDRIVER | Driver node specifies old/current driver
|
||
|
* @flag DNF_EXCLUDEFROMLIST | If set, this driver node will not be displayed
|
||
|
* in any driver select dialogs.
|
||
|
* @flag DNF_NODRIVER | Set if we want to install no driver e.g no mouse drv
|
||
|
* @flag DNF_CLASS_DRIVER | Set if this driver is in the class driver list
|
||
|
* @flag DNF_COMPATIBLE_DRIVER | Set if this driver is in the compatible driver list
|
||
|
* @flag DNF_INET_DRIVER | Set if this driver is being installed from the Internet
|
||
|
* @flag DNF_CURRENT_DRIVER | Set if this driver is the one currently being used.
|
||
|
* @flag DNF_CLASS_DRIVER | Set if this driver is in the class driver list
|
||
|
* @flag DNF_COMPATIBLE_DRIVER | Set if this driver is in the compatible driver list
|
||
|
* @flag DNF_INET_DRIVER | Set if this driver is being installed from the Internet
|
||
|
* @flag DNF_CURRENT_DRIVER | Set if this driver is the one currently being used.
|
||
|
*
|
||
|
* @field LPARAM | lpReserved | Reserved for use by the Device Installer.
|
||
|
*
|
||
|
* @field DWORD | dwPrivateData | Reserved for use by the Device Installer.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _DRIVER_INFO
|
||
|
{
|
||
|
WORD cbSize; // Size of this structure in bytes
|
||
|
struct _DRIVER_INFO FAR* lpNextInfo;
|
||
|
LPSTR lpszDescription;
|
||
|
LPSTR lpszMfgName;
|
||
|
LPSTR lpszProviderName; // ONLY valid if DI_MULTMFGS is set in the LPDI
|
||
|
WORD Rank;
|
||
|
DWORD dwFlags;
|
||
|
LPARAM lpReserved;
|
||
|
DWORD dwPrivateData;
|
||
|
WORD wDate; // Driver Date
|
||
|
LPSTR lpszVersion;
|
||
|
} DRIVER_INFO, *PDRIVER_INFO, FAR *LPDRIVER_INFO;
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types DRIVER_NODE | This strucure represents a driver which can be
|
||
|
* installed for a specific device.
|
||
|
*
|
||
|
* @field struct _DRIVER_NODE FAR* | lpNextDN | Pointer to the next driver node
|
||
|
* in a list.
|
||
|
*
|
||
|
* @field UINT | Rank | The Rank match of this driver. Ranks go from 0 to n, where 0
|
||
|
* is the most compatible.
|
||
|
*
|
||
|
* @field UINT | InfType | Type of INF this driver cam from. This will
|
||
|
* be either INFTYPE_TEXT or INFTYPE_EXECUTABLE
|
||
|
*
|
||
|
* @field unsigned | InfDate | DOS date stamp of the INF file.
|
||
|
*
|
||
|
* @field LPSTR | lpszDescription | Pointer to a the descriptrion of the device being
|
||
|
* supported by this driver.
|
||
|
*
|
||
|
* @field LPSTR | lpszSectionName | Pointer to the name of INF install section for
|
||
|
* this driver.
|
||
|
*
|
||
|
* @field ATOM | atInfFileName | Global ATOM containing the name of the INF file.
|
||
|
*
|
||
|
* @field ATOM | atMfgName | Global ATOM containing the name of this driver's
|
||
|
* manufacture.
|
||
|
*
|
||
|
* @field ATOM | atProviderName | Global ATOM containing the name of this driver's
|
||
|
* provider.
|
||
|
*
|
||
|
* @field DWORD | Flags | Flags that control functions using this DRIVER_NODE
|
||
|
* @flag DNF_DUPDESC | This driver has the same device description
|
||
|
* from by more than one provider.
|
||
|
* @flag DNF_OLDDRIVER | Driver node specifies old/current driver
|
||
|
* @flag DNF_EXCLUDEFROMLIST | If set, this driver node will not be displayed
|
||
|
* in any driver select dialogs.
|
||
|
* @flag DNF_NODRIVER | Set if we want to install no driver e.g no mouse drv
|
||
|
* @flag DNF_CONVERTEDLPINFO | Set if this Driver Node was converted from an Info Node.
|
||
|
* Setting this flag will cause the cleanup functions to explicitly delete it.
|
||
|
*
|
||
|
* @field DWORD | dwPrivateData | Reserved
|
||
|
*
|
||
|
* @field LPSTR | lpszDrvDescription | Pointer to a driver description.
|
||
|
*
|
||
|
* @field LPSTR | lpszHardwareID | Pointer to a list of Plug-and-Play hardware IDs for
|
||
|
* this driver.
|
||
|
*
|
||
|
* @field LPSTR | lpszCompatIDs | Pointer to a list of Plug-and-Play compatible IDs for
|
||
|
* this driver.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _DRIVER_NODE {
|
||
|
struct _DRIVER_NODE FAR* lpNextDN;
|
||
|
UINT Rank;
|
||
|
UINT InfType;
|
||
|
unsigned InfDate;
|
||
|
LPSTR lpszDescription; // Compatibility: Contains the Device Desc.
|
||
|
LPSTR lpszSectionName;
|
||
|
ATOM atInfFileName;
|
||
|
ATOM atMfgName;
|
||
|
ATOM atProviderName;
|
||
|
DWORD Flags;
|
||
|
DWORD dwPrivateData;
|
||
|
LPSTR lpszDrvDescription; // New contains an driver description
|
||
|
LPSTR lpszHardwareID;
|
||
|
LPSTR lpszCompatIDs;
|
||
|
unsigned DriverDate;
|
||
|
LPSTR lpszInfPath;
|
||
|
LPARAM lpReserved;
|
||
|
} DRIVER_NODE, NEAR* PDRIVER_NODE, FAR* LPDRIVER_NODE, FAR* FAR* LPLPDRIVER_NODE;
|
||
|
|
||
|
#define DNF_DUPDESC 0x00000001 // Multiple providers have same desc
|
||
|
#define DNF_OLDDRIVER 0x00000002 // Driver node specifies old/current driver
|
||
|
#define DNF_EXCLUDEFROMLIST 0x00000004
|
||
|
#define DNF_NODRIVER 0x00000008 // if we want to install no driver e.g no mouse drv
|
||
|
|
||
|
#define DNF_CONVERTEDLPINFO 0x00000010 // Set if the Driver Node is a Converted Info Node
|
||
|
|
||
|
#define DNF_CLASS_DRIVER 0x00000020 // Driver node represents a class driver
|
||
|
#define DNF_COMPATIBLE_DRIVER 0x00000040 // Driver node represents a compatible driver
|
||
|
#define DNF_INET_DRIVER 0x00000080 // Driver comes from an Inetnet source
|
||
|
#define DNF_CURRENT_DRIVER 0x00000100 // Driver is the current one for a device
|
||
|
#define DNF_INDEXED_DRIVER 0x00000200 // Driver is specified in the Windows Driver Index file
|
||
|
|
||
|
// possible types of "INF" files
|
||
|
#define INFTYPE_WIN4 1
|
||
|
#define INFTYPE_WIN3 2
|
||
|
#define INFTYPE_COMBIDRV 3
|
||
|
#define INFTYPE_PPD 4
|
||
|
#define INFTYPE_WPD 5
|
||
|
#define INFTYPE_CLASS_SPEC1 6
|
||
|
#define INFTYPE_CLASS_SPEC2 7
|
||
|
#define INFTYPE_CLASS_SPEC3 8
|
||
|
#define INFTYPE_CLASS_SPEC4 9
|
||
|
|
||
|
|
||
|
#define MAX_CLASS_NAME_LEN 32
|
||
|
#define MAX_DRIVER_INST_LEN 10
|
||
|
#define MAX_GUID_STR 50 // Big enough to hold a GUID string
|
||
|
|
||
|
// NOTE: Keep this in sync with confimg.h in \DDK\INC
|
||
|
#define MAX_DEVNODE_ID_LEN 256
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types DEVICE_INFO | This is the basic data structure for most Device
|
||
|
* installation APIs. A DEVICE_INFO represents a device that is being installed
|
||
|
* on the system, or an installed device that is being modified in some way.
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the DEVICE_INFO struct.
|
||
|
*
|
||
|
* @field struct _DEVICE_INFO FAR | *lpNextDi | Pointer to the next DEVICE_INFO struct
|
||
|
* in a linked list.
|
||
|
*
|
||
|
* @field char | szDescription[LINE_LEN] | Buffer containing the description of the
|
||
|
* device.
|
||
|
*
|
||
|
* @field DWORD | dnDevnode | If set, this contains the address of the DevNode associated
|
||
|
* with the device.
|
||
|
*
|
||
|
* @field HKEY | hRegKey | An opened registry key that contains the device's registry
|
||
|
* subkey. This is usually HKEY_LOCAL_MACHINE.
|
||
|
*
|
||
|
* @field char | szRegSubkey[MAX_DEVNODE_ID_LEN] | Buffer containing the device's
|
||
|
* hardware registry subkey. This is key is rooted in hRegKey, and is ususally some
|
||
|
* place in the \\ENUM branch.
|
||
|
*
|
||
|
* @field char | szClassName[MAX_CLASS_NAME_LEN] | Buffer containing the device's
|
||
|
* class name. (Can be a GUID str)
|
||
|
*
|
||
|
* @field DWORD | Flags | Flags for controlling installation and U/I functions. Some
|
||
|
* flags can be set prior to calling device installer APIs, and other are set
|
||
|
* automatically during the processing of some APIs.
|
||
|
* @flag DI_SHOWOEM | Set if OEM disk support should be allowed
|
||
|
* @flag DI_SHOWCOMPAT | Will be set if only a compatible driver list
|
||
|
* is being displayed by DiSelectDevice.
|
||
|
* @flag DI_SHOWCLASS | Will be set if only a Class driver list is
|
||
|
* is being displayed by DiSelectDevice.
|
||
|
* @flag DI_SHOWALL | Will be set if both a compatible driver list
|
||
|
* and a class driver list are being shown by DiSelectDevice.
|
||
|
* @flag DI_NOVCP | Set if no VCP (Virtual Copy Procedure) is
|
||
|
* desired during DiInstallDevice.
|
||
|
* @flag DI_DIDCOMPAT | Will be set if DiBuildCompatDrvList has been
|
||
|
* done, and lpCompatDrvList points to this device's compatible driver list.
|
||
|
* @flag DI_DIDCLASS | Will be set if DiBuildClassDrvList has been
|
||
|
* done, and lpClassDrvList points to this device's class driver list.
|
||
|
* @flag DI_AUTOASSIGNRES | Unused.
|
||
|
* @flag DI_NEEDRESTART | Will be set if the device requires a restart
|
||
|
* of Windows after installation or a state change.
|
||
|
* @flag DI_NEEDREBOOT | Will be set if the device requires a reboot
|
||
|
* of the machine after installation or a state change.
|
||
|
* @flag DI_NOBROWSE | Set to diable browsing when selecting an OEM
|
||
|
* disk path.
|
||
|
* @flag DI_MULTMFGS | Will be set if a class driver list, or class
|
||
|
* info list contains multiple manufactures.
|
||
|
* @flag DI_DISABLED | Unused.
|
||
|
* @flag DI_GENERALPAGE_ADDED | Set by a property page provider if a general
|
||
|
* properties page has been added to the device's property sheet.
|
||
|
* @flag DI_RESOURCEPAGE_ADDED | Set by a property page provider if a resource
|
||
|
* properties page has been added to the device's property sheet.
|
||
|
* @flag DI_PROPERTIES_CHANGE | Set if a device's properties have been changed
|
||
|
* and require an update of the Device Manager's U/I.
|
||
|
* @flag DI_INF_IS_SORTED | Set if the INF containing drivers for this
|
||
|
* device is in sorted order.
|
||
|
* @flag DI_ENUMSINGLEINF | Set if DiBuildCompatDrvList and
|
||
|
* DiBuildlassDrvList should only search the INF file specificed by atDriverPath.
|
||
|
* @flag DI_DONOTCALLCONFIGMG | Set if the configuration manager should not
|
||
|
* be called during DiInstallDevice.
|
||
|
* @flag DI_INSTALLDISABLED | Set if the device should be installed in a
|
||
|
* disabled state by default.
|
||
|
* @flag DI_CLASSONLY | Set if this DEVICE_INFO struct contains only
|
||
|
* a class name.
|
||
|
* @flag DI_CLASSINSTALLPARAMS | Set if the lpClassIntallParams field points to
|
||
|
* a class install parameter block.
|
||
|
* @flag DI_NODI_DEFAULTACTION | Set if DiCallClassInstaller should not
|
||
|
* perform any default action if the class installer return ERR_DI_DO_DEFAULT, or
|
||
|
* there is not class installer.
|
||
|
* @flag DI_QUIETINSTALL | Set if device install API should be as
|
||
|
* silent as possible using default choices whereever possible.
|
||
|
* @flag DI_NOFILECOPY | Set if DiInstallDevice should skip file
|
||
|
* copying.
|
||
|
* @flag DI_FORCECOPY | Set if DiInstallDevice should always
|
||
|
* copy file, even if they are present on the system.
|
||
|
* @flag DI_DRIVERPAGE_ADDED | Set by a property page provider if a driver
|
||
|
* properties page has been added to the device's property sheet.
|
||
|
* @flag DI_USECI_SELECTSTRINGS | Set if class installer provided strings
|
||
|
* should be used during DiSelectDevice.
|
||
|
* @flag DI_OVERRIDE_INFFLAGS | Unused.
|
||
|
* @flag DI_PROPS_NOCHANGEUSAGE | Set if there should be no Enable/Disable
|
||
|
* capability on the device's general property page.
|
||
|
* @flag DI_NOSELECTICONS | Set if no small icons should be used during
|
||
|
* DiSelectDevice.
|
||
|
* @flag DI_NOWRITE_IDS | Set if DiInstallDevice should not write
|
||
|
* the device's hardware and compatible IDs to the registry.
|
||
|
*
|
||
|
* @field HWND | hwndParent | Window handle that will own U/I dialogs related to this
|
||
|
* device.
|
||
|
*
|
||
|
* @field LPDRIVER_NODE | lpCompatDrvList | Pointer to a linked list of DRIVER_NODES
|
||
|
* representing the compatible drivers for this device.
|
||
|
*
|
||
|
* @field LPDRIVER_NODE | lpClassDrvList | Pointer to a linked list of DRIVER_NODES
|
||
|
* representing all drivers of this device's class.
|
||
|
*
|
||
|
* @field LPDRIVER_NODE | lpSelectedDriver | Pointer to a single DRIVER_NODE that
|
||
|
* has been selected as the driver for this device.
|
||
|
*
|
||
|
* @field ATOM | atDriverPath | Global ATOM containing the path to this device's INF
|
||
|
* file. This is set only of the driver came from an OEM INF file. This will be
|
||
|
* 0 if the INF is a standard Windows INF file.
|
||
|
*
|
||
|
* @field ATOM | atTempInfFile | Global ATOM containing the name of a temporary INF
|
||
|
* file for this device's drivers. This is set if the drivers came from an old style
|
||
|
* INF file and have been converted.
|
||
|
*
|
||
|
* @field HINSTANCE | hinstClassInstaller | Class installer module instance.
|
||
|
*
|
||
|
* @field HINSTANCE | hinstClassPropProvidor | Class Property Providor module instance.
|
||
|
*
|
||
|
* @field HINSTANCE | hinstDevicePropProvidor | Device Property Providor module instance.
|
||
|
*
|
||
|
* @field HINSTANCE | hinstBasicPropProvidor | Basic Property Providor module instance.
|
||
|
*
|
||
|
* @field FARPROC | fpClassInstaller | Procedure address of class install function.
|
||
|
*
|
||
|
* @field FARPROC | fpClassEnumPropPages | Procedure address of the Class property
|
||
|
* provider page enumeration function.
|
||
|
*
|
||
|
* @field FARPROC | fpDeviceEnumPropPages | Procedure address of the Device property
|
||
|
* provider page enumeration function.
|
||
|
*
|
||
|
* @field FARPROC | fpEnumBasicProperties | Procedure address of the Basic device
|
||
|
* property provider page enumeration function.
|
||
|
*
|
||
|
* @field DWORD | dwSetupReserved | Reserved for use by Setup.
|
||
|
*
|
||
|
* @field DWORD | dwClassInstallReserved | Reserved for use by Class Installers.
|
||
|
*
|
||
|
* @field GENCALLBACKPROC | gicpGenInstallCallBack | Procedure address of a GenInstall
|
||
|
* call back function. This would be set if the class installer wanted to handle
|
||
|
* GenInstall callbacks during DiInstallDevice.
|
||
|
*
|
||
|
* @field LPARAM | gicplParam | lParam for the GenInstall Callback.
|
||
|
*
|
||
|
* @field UINT | InfType | The type of INF file being used. This will be INFTYPE_TEXT
|
||
|
* or INFTYPE_EXECUTABLE.
|
||
|
*
|
||
|
* @field HINSTANCE | hinstPrivateProblemHandler | Module handle for the device's
|
||
|
* private problem procedure.
|
||
|
*
|
||
|
* @field FARPROC | fpPrivateProblemHandler | Procedure address of the device's
|
||
|
* private problem handler.
|
||
|
*
|
||
|
* @field LPARAM | lpClassInstallParams | Pointer to a class install parameter block.
|
||
|
* Class installer parameters are specific to the class install functions.
|
||
|
*
|
||
|
* @field struct _DEVICE_INFO FAR | *lpdiChildList | Pointer to a linked list of
|
||
|
* DRIVER_INFO structs representing children of this device.
|
||
|
*
|
||
|
* @field DWORD | dwFlagsEx | Additional control flags.
|
||
|
* @flag DI_FLAGSEX_USEOLDINFSEARCH | Set if INF Search functions should not use
|
||
|
* indexed searching.
|
||
|
* @flag DI_FLAGSEX_AUTOSELECTRANK0 | Set if DiSelectDevice should automatically
|
||
|
* select rank 0 match drivers.
|
||
|
* @flag DI_FLAGSEX_CI_FAILED | Will be set internally if there was a
|
||
|
* failure to load or call a class installer.
|
||
|
* @flag DI_FLAGSEX_DIDINFOLIST | Will be set if DiBuildCompatDrvInfoList has
|
||
|
* been called, and this device's compatible driver Info list has been built.
|
||
|
* @flag DI_FLAGSEX_DIDCOMPATINFO | Will be set if DiBuildClassDrvInfoList has
|
||
|
* been called, and this device's class driver Info list has been built.
|
||
|
* @flag DI_FLAGSEX_FILTERCLASSES | If set, DiBuildClassDrvList, and
|
||
|
* DiBuildClassDrvInfoList will check for Class inclusion filters. This means
|
||
|
* devices will not be included in the list, if their class is marked as a
|
||
|
* NoInstallClass class.
|
||
|
* @flag DI_FLAGSEX_SETFAILEDINSTALL | If set, then if DiInstallDevice installs
|
||
|
* a NULL driver, it will also set the FAILEDINSTALL config flag
|
||
|
* @flag DI_FLAGSEX_DEVICECHANGE | If set, the device manager will rebuild it
|
||
|
* tree of devices after the device property sheet is closed.
|
||
|
* @flag DI_FLAGSEX_ALWAYSWRITEIDS | If set, and the flag, DI_NOWRITE_ID is clear
|
||
|
* (ie that flag takes higher precedance) then always write Hardare and Compat
|
||
|
* ids, even if they allready exist
|
||
|
* @flag DI_FLAGSEX_ALLOWEXCLUDEDDRVS | If set, DiSelectDevice will display drivers
|
||
|
* that have the Exlude From Select state
|
||
|
* @flag DI_FLAGSEX_NOUIONQUERYREMOVE | If setup, DiInstallDevice will prevent
|
||
|
* U/I warnings during a query removal. Any U/I wanings that would have been
|
||
|
* displayed will be silently failed.
|
||
|
* @field LPDRIVER_INFO | lpCompatDrvInfoList | Pointer to a linked list of
|
||
|
* DRIVER_INFO structs that are compatible with this device.
|
||
|
*
|
||
|
* @field LPDRIVER_INFO | lpClassDrvInfoList | Pointer to a linked list of
|
||
|
* DRIVER_INFO structs representing all drivers for this device's class.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _DEVICE_INFO
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
struct _DEVICE_INFO FAR *lpNextDi;
|
||
|
char szDescription[LINE_LEN];
|
||
|
DWORD dnDevnode;
|
||
|
HKEY hRegKey;
|
||
|
char szRegSubkey[MAX_DEVNODE_ID_LEN];
|
||
|
char szClassName[MAX_CLASS_NAME_LEN];
|
||
|
DWORD Flags;
|
||
|
HWND hwndParent;
|
||
|
LPDRIVER_NODE lpCompatDrvList;
|
||
|
LPDRIVER_NODE lpClassDrvList;
|
||
|
LPDRIVER_NODE lpSelectedDriver;
|
||
|
ATOM atDriverPath;
|
||
|
ATOM atTempInfFile;
|
||
|
HINSTANCE hinstClassInstaller;
|
||
|
HINSTANCE hinstClassPropProvidor;
|
||
|
HINSTANCE hinstDevicePropProvidor;
|
||
|
HINSTANCE hinstBasicPropProvidor;
|
||
|
FARPROC fpClassInstaller;
|
||
|
FARPROC fpClassEnumPropPages;
|
||
|
FARPROC fpDeviceEnumPropPages;
|
||
|
FARPROC fpEnumBasicProperties;
|
||
|
DWORD dwSetupReserved;
|
||
|
DWORD dwClassInstallReserved;
|
||
|
GENCALLBACKPROC gicpGenInstallCallBack;
|
||
|
|
||
|
LPARAM gicplParam;
|
||
|
UINT InfType;
|
||
|
|
||
|
HINSTANCE hinstPrivateProblemHandler;
|
||
|
FARPROC fpPrivateProblemHandler;
|
||
|
LPARAM lpClassInstallParams;
|
||
|
struct _DEVICE_INFO FAR *lpdiChildList;
|
||
|
DWORD dwFlagsEx;
|
||
|
LPDRIVER_INFO lpCompatDrvInfoList;
|
||
|
LPDRIVER_INFO lpClassDrvInfoList;
|
||
|
char szClassGUID[MAX_GUID_STR];
|
||
|
} DEVICE_INFO, FAR * LPDEVICE_INFO, FAR * FAR * LPLPDEVICE_INFO;
|
||
|
|
||
|
#define ASSERT_DI_STRUC(lpdi) if (lpdi->cbSize != sizeof(DEVICE_INFO)) return (ERR_DI_BAD_DEV_INFO)
|
||
|
|
||
|
typedef struct _CLASS_INFO
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
struct _CLASS_INFO FAR* lpNextCi;
|
||
|
LPDEVICE_INFO lpdi;
|
||
|
char szDescription[LINE_LEN];
|
||
|
char szClassName[MAX_CLASS_NAME_LEN];
|
||
|
} CLASS_INFO, FAR * LPCLASS_INFO, FAR * FAR * LPLPCLASS_INFO;
|
||
|
#define ASSERT_CI_STRUC(lpci) if (lpci->cbSize != sizeof(CLASS_INFO)) return (ERR_DI_BAD_CLASS_INFO)
|
||
|
|
||
|
|
||
|
// flags for device choosing (InFlags)
|
||
|
#define DI_SHOWOEM 0x00000001L // support Other... button
|
||
|
#define DI_SHOWCOMPAT 0x00000002L // show compatibility list
|
||
|
#define DI_SHOWCLASS 0x00000004L // show class list
|
||
|
#define DI_SHOWALL 0x00000007L
|
||
|
#define DI_NOVCP 0x00000008L // Don't do vcpOpen/vcpClose.
|
||
|
#define DI_DIDCOMPAT 0x00000010L // Searched for compatible devices
|
||
|
#define DI_DIDCLASS 0x00000020L // Searched for class devices
|
||
|
#define DI_AUTOASSIGNRES 0x00000040L // No UI for resources if possible
|
||
|
|
||
|
// flags returned by DiInstallDevice to indicate need to reboot/restart
|
||
|
#define DI_NEEDRESTART 0x00000080L // Restart required to take effect
|
||
|
#define DI_NEEDREBOOT 0x00000100L // Reboot required to take effect
|
||
|
|
||
|
// flags for device installation
|
||
|
#define DI_NOBROWSE 0x00000200L // no Browse... in InsertDisk
|
||
|
|
||
|
// Flags set by DiBuildClassDrvList
|
||
|
#define DI_MULTMFGS 0x00000400L // Set if multiple manufacturers in
|
||
|
// class driver list
|
||
|
// Flag indicates that device is disabled
|
||
|
#define DI_DISABLED 0x00000800L // Set if device disabled
|
||
|
|
||
|
// Flags for Device/Class Properties
|
||
|
#define DI_GENERALPAGE_ADDED 0x00001000L
|
||
|
#define DI_RESOURCEPAGE_ADDED 0x00002000L
|
||
|
|
||
|
// Flag to indicate the setting properties for this Device (or class) caused a change
|
||
|
// so the Dev Mgr UI probably needs to be updatd.
|
||
|
#define DI_PROPERTIES_CHANGE 0x00004000L
|
||
|
|
||
|
// Flag to indicate that the sorting from the INF file should be used.
|
||
|
#define DI_INF_IS_SORTED 0x00008000L
|
||
|
|
||
|
#define DI_ENUMSINGLEINF 0x00010000L
|
||
|
|
||
|
// The following flags can be used to install a device disabled
|
||
|
// and to prevent CONFIGMG being called when a device is installed
|
||
|
#define DI_DONOTCALLCONFIGMG 0x00020000L
|
||
|
#define DI_INSTALLDISABLED 0x00040000L
|
||
|
|
||
|
// This flag is set of this LPDI is really just an LPCI, ie
|
||
|
// it only contains class info, NO DRIVER/DEVICE INFO
|
||
|
#define DI_CLASSONLY 0x00080000L
|
||
|
|
||
|
// This flag is set if the Class Install params are valid
|
||
|
#define DI_CLASSINSTALLPARAMS 0x00100000L
|
||
|
|
||
|
// This flag is set if the caller of DiCallClassInstaller does NOT
|
||
|
// want the internal default action performed if the Class installer
|
||
|
// return ERR_DI_DO_DEFAULT
|
||
|
#define DI_NODI_DEFAULTACTION 0x00200000L
|
||
|
|
||
|
// BUGBUG. This is a hack for M6 Net setup. Net Setup does not work correctly
|
||
|
// if we process devnode syncronously. This WILL be removed for M7 when
|
||
|
// Net setup is fixed to work with DiInstallDevice
|
||
|
#define DI_NOSYNCPROCESSING 0x00400000L
|
||
|
|
||
|
// flags for device installation
|
||
|
#define DI_QUIETINSTALL 0x00800000L // don't confuse the user with
|
||
|
// questions or excess info
|
||
|
#define DI_NOFILECOPY 0x01000000L // No file Copy necessary
|
||
|
#define DI_FORCECOPY 0x02000000L // Force files to be copied from install path
|
||
|
#define DI_DRIVERPAGE_ADDED 0x04000000L // Prop providor added Driver page.
|
||
|
#define DI_USECI_SELECTSTRINGS 0x08000000L // Use Class Installer Provided strings in the Select Device Dlg
|
||
|
#define DI_OVERRIDE_INFFLAGS 0x10000000L // Override INF flags
|
||
|
#define DI_PROPS_NOCHANGEUSAGE 0x20000000L // No Enable/Disable in General Props
|
||
|
|
||
|
#define DI_NOSELECTICONS 0x40000000L // No small icons in select device dialogs
|
||
|
|
||
|
#define DI_NOWRITE_IDS 0x80000000L // Don't write HW & Compat IDs on install
|
||
|
|
||
|
#define DI_FLAGSEX_USEOLDINFSEARCH 0x00000001L // Inf Search functions should not use Index Search
|
||
|
#define DI_FLAGSEX_AUTOSELECTRANK0 0x00000002L // DiSelectDevice doesn't propmt user if rank 0 match
|
||
|
#define DI_FLAGSEX_CI_FAILED 0x00000004L // Failed to Load/Call class installer
|
||
|
|
||
|
#define DI_FLAGSEX_DIDINFOLIST 0x00000010L // Did the Class Info List
|
||
|
#define DI_FLAGSEX_DIDCOMPATINFO 0x00000020L // Did the Compat Info List
|
||
|
|
||
|
#define DI_FLAGSEX_FILTERCLASSES 0x00000040L
|
||
|
#define DI_FLAGSEX_SETFAILEDINSTALL 0x00000080L
|
||
|
#define DI_FLAGSEX_DEVICECHANGE 0x00000100L
|
||
|
#define DI_FLAGSEX_ALWAYSWRITEIDS 0x00000200L
|
||
|
#define DI_FLAGSEX_ALLOWEXCLUDEDDRVS 0x00000800L
|
||
|
#define DI_FLAGSEX_NOUIONQUERYREMOVE 0x00001000L
|
||
|
#define DI_FLAGSEX_RESERVED1 0x00002000L // Reserved for setupapi
|
||
|
#define DI_FLAGSEX_RESERVED2 0x00004000L // Reserved for setupapi
|
||
|
#define DI_FLAGSEX_RESERVED3 0x00008000L // Reserved for setupapi
|
||
|
#define DI_FLAGSEX_RESERVED4 0x00010000L // Reserved for setupapi
|
||
|
#define DI_FLAGSEX_INET_DRIVER 0x00020000L
|
||
|
#define DI_FLAGSEX_RESERVED5 0x00040000L // Reserved for setupapi
|
||
|
|
||
|
// Defines for class installer functions
|
||
|
#define DIF_SELECTDEVICE 0x0001
|
||
|
#define DIF_INSTALLDEVICE 0x0002
|
||
|
#define DIF_ASSIGNRESOURCES 0x0003
|
||
|
#define DIF_PROPERTIES 0x0004
|
||
|
#define DIF_REMOVE 0x0005
|
||
|
#define DIF_FIRSTTIMESETUP 0x0006
|
||
|
#define DIF_FOUNDDEVICE 0x0007
|
||
|
#define DIF_SELECTCLASSDRIVERS 0x0008
|
||
|
#define DIF_VALIDATECLASSDRIVERS 0x0009
|
||
|
#define DIF_INSTALLCLASSDRIVERS 0x000A
|
||
|
#define DIF_CALCDISKSPACE 0x000B
|
||
|
#define DIF_DESTROYPRIVATEDATA 0x000C
|
||
|
#define DIF_VALIDATEDRIVER 0x000D
|
||
|
#define DIF_MOVEDEVICE 0x000E
|
||
|
#define DIF_DETECT 0x000F
|
||
|
#define DIF_INSTALLWIZARD 0x0010
|
||
|
#define DIF_DESTROYWIZARDDATA 0x0011
|
||
|
#define DIF_PROPERTYCHANGE 0x0012
|
||
|
#define DIF_ENABLECLASS 0x0013
|
||
|
#define DIF_DETECTVERIFY 0x0014
|
||
|
#define DIF_INSTALLDEVICEFILES 0x0015
|
||
|
#define DIF_UNREMOVE 0x0016
|
||
|
#define DIF_SELECTBESTCOMPATDRV 0x0017
|
||
|
#define DIF_ALLOW_INSTALL 0x0018
|
||
|
|
||
|
typedef UINT DI_FUNCTION; // Function type for device installer
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types ENABLECLASS_PARAMS | DIF_ENABLECLASS class install parameters
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the ENABLECLASS_PARAMS struct.
|
||
|
*
|
||
|
* @field LPSTR | szClass | The class that is being enabled.
|
||
|
*
|
||
|
* @field WORD | wEnableMsg | Specifies the stage of enabling.
|
||
|
* Can be one of:
|
||
|
*
|
||
|
* @const ENABLECLASS_QUERY | The class is about to be enabled. Return
|
||
|
* ERR_DI_DO_DEFAULT to allow the class to be enabled, or ERR_DI_FAIL_QUERY
|
||
|
* to prevent the class from being enabled.
|
||
|
*
|
||
|
* @const ENABLECLASS_SUCCESS | The enabling of the class has succeeded,
|
||
|
* return ERR_DI_DO_DEFAULT.
|
||
|
*
|
||
|
* @const ENABLECLASS_FAILURE | The enabling of the class has failed,
|
||
|
* return ERR_DI_DO_DEFAULT.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
// DIF_ENABLECLASS parameter struct.
|
||
|
typedef struct _ENABLECLASS_PARAMS
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
LPSTR szClass;
|
||
|
WORD wEnableMsg;
|
||
|
} ENABLECLASS_PARAMS, FAR * LPENABLECLASS_PARAMS;
|
||
|
#define ASSERT_ENABLECLASSPARAMS_STRUC(lpecp) if (lpecp->cbSize != sizeof(ENABLECLASS_PARAMS)) return (ERR_DI_BAD_ENABLECLASS_PARAMS)
|
||
|
|
||
|
#define ENABLECLASS_QUERY 0
|
||
|
#define ENABLECLASS_SUCCESS 1
|
||
|
#define ENABLECLASS_FAILURE 2
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types MOVEDEV_PARAMS | DIF_MOVEDEVICE class install parameters
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the MOVDEV_PARAMS struct.
|
||
|
*
|
||
|
* @field LPDEVICE_INFO | lpdiOldDev | Pointer to the device that is being
|
||
|
* moved.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _MOVEDEV_PARAMS
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
LPDEVICE_INFO lpdiOldDev; // References the Device Begin Moved
|
||
|
} MOVEDEV_PARAMS, FAR * LPMOVEDEV_PARAMS;
|
||
|
#define ASSERT_MOVEDEVPARAMS_STRUC(lpmdp) if (lpmdp->cbSize != sizeof(MOVEDEV_PARAMS)) return (ERR_DI_BAD_MOVEDEV_PARAMS)
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types PROPCHANGE_PARAMS | DIF_PROPCHANGE class install parameters
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the PROPCHANGE_PARAMS struct.
|
||
|
*
|
||
|
* @field DWORD | dwStateChange | State change action. See DiChangeState for details.
|
||
|
*
|
||
|
* @field DWORD | dwFlags | Flags specific to the type of state change.
|
||
|
*
|
||
|
* @field DWORD | dwConfigID | Configuration ID for config specific changes.
|
||
|
*
|
||
|
* @xref DiChangeState.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _PROPCHANGE_PARAMS
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
DWORD dwStateChange;
|
||
|
DWORD dwFlags;
|
||
|
DWORD dwConfigID;
|
||
|
} PROPCHANGE_PARAMS, FAR * LPPROPCHANGE_PARAMS;
|
||
|
#define ASSERT_PROPCHANGEPARAMS_STRUC(lpmdp) if (lpmdp->cbSize != sizeof(PROPCHANGE_PARAMS)) return (ERR_DI_BAD_PROPCHANGE_PARAMS)
|
||
|
|
||
|
#define MAX_TITLE_LEN 60
|
||
|
#define MAX_INSTRUCTION_LEN 256
|
||
|
#define MAX_LABEL_LEN 30
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types SELECTDEVICE_PARAMS | DIF_SELECTDEVICE class install parameters
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the SELECTDEVICE_PARAMS struct.
|
||
|
*
|
||
|
* @field char | szTitle[MAX_TITLE_LEN] | Buffer containing a class installer
|
||
|
* provided title for the Select Device dialogs.
|
||
|
*
|
||
|
* @field char | szInstructions[MAX_INSTRUCTION_LEN] | Buffer containing
|
||
|
* class installer provided Select Device instructions.
|
||
|
*
|
||
|
* @field char | szListLabel[MAX_LABEL_LEN] | Buffer containing a lable
|
||
|
* of the Select Device list of drivers.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _SELECTDEVICE_PARAMS
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
char szTitle[MAX_TITLE_LEN];
|
||
|
char szInstructions[MAX_INSTRUCTION_LEN];
|
||
|
char szListLabel[MAX_LABEL_LEN];
|
||
|
} SELECTDEVICE_PARAMS, FAR * LPSELECTDEVICE_PARAMS;
|
||
|
#define ASSERT_SELECTDEVICEPARAMS_STRUC(p) if (p->cbSize != sizeof(SELECTDEVICE_PARAMS)) return (ERR_DI_BAD_SELECTDEVICE_PARAMS)
|
||
|
|
||
|
#define DI_REMOVEDEVICE_GLOBAL 0x00000001
|
||
|
#define DI_REMOVEDEVICE_CONFIGSPECIFIC 0x00000002
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types REMOVEDEVICE_PARAMS | DIF_REMOVE class install parameters
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the REMOVEDEVICE_PARAMS struct.
|
||
|
*
|
||
|
* @field DWORD | dwFlags | Flags indicating the type of removal to perform.
|
||
|
* @flag DI_REMOVEDEVICE_GLOBAL | The device will be removed globally.
|
||
|
* @flag DI_REMOVEDEVICE_CONFIGSPECIFIC | The device will be removed from only
|
||
|
* the specified configuration.
|
||
|
*
|
||
|
* @field DWORD | dwConfigID | If DI_REMOVEDEVICE_CONFIGSPECIFIC is set, then
|
||
|
* this is the configuration the device will be removed from. 0 means the current
|
||
|
* config.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _REMOVEDEVICE_PARAMS
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
DWORD dwFlags;
|
||
|
DWORD dwConfigID;
|
||
|
} REMOVEDEVICE_PARAMS, FAR * LPREMOVEDEVICE_PARAMS;
|
||
|
#define ASSERT_REMOVEDPARAMS_STRUC(p) if (p->cbSize != sizeof(REMOVEDEVICE_PARAMS)) return (ERR_DI_BAD_REMOVEDEVICE_PARAMS)
|
||
|
|
||
|
#define DI_UNREMOVEDEVICE_CONFIGSPECIFIC 0x00000002
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types UNREMOVEDEVICE_PARAMS | DIF_UNREMOVE class install parameters
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the UNREMOVEDEVICE_PARAMS struct.
|
||
|
*
|
||
|
* @field DWORD | dwFlags | Flags indicating the type of removal to perform.
|
||
|
* @flag DI_UNREMOVEDEVICE_CONFIGSPECIFIC | The device will be unremoved from only
|
||
|
* the specified configuration.
|
||
|
*
|
||
|
* @field DWORD | dwConfigID | If DI_UNREMOVEDEVICE_CONFIGSPECIFIC is set, then
|
||
|
* this is the configuration the device will be removed from. 0 means the current
|
||
|
* config.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _UNREMOVEDEVICE_PARAMS
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
DWORD dwFlags;
|
||
|
DWORD dwConfigID;
|
||
|
} UNREMOVEDEVICE_PARAMS, FAR * LPUNREMOVEDEVICE_PARAMS;
|
||
|
#define ASSERT_UNREMOVEDPARAMS_STRUC(p) if (p->cbSize != sizeof(UNREMOVEDEVICE_PARAMS)) return (ERR_DI_BAD_UNREMOVEDEVICE_PARAMS)
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @type NONE | Dynamic Hardware Install Wizard Constants | Constants that are
|
||
|
* used when adding custom pages to the hardware install wizard.
|
||
|
*
|
||
|
* @const MAX_INSTALLWIZARD_DYNAPAGES | The maximum number of dynamic hardware
|
||
|
* installation wizard pages that can be added by a class installer.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_FIRSTPAGE | Resource ID for the first page that the install
|
||
|
* wizard will go to after adding the class installer pages.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_SELECT_PREVPAGE | Resource ID for the page that the Select
|
||
|
* Device page will go back to.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_SELECT_NEXTPAGE | Resource ID for the page that the Select
|
||
|
* Device page will go forward to.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_ANALYZE_PREVPAGE | Resource ID for the page that the Analyze
|
||
|
* page will go back to. This will only be used in the event that there is a
|
||
|
* problem (i.e a conflict), and the user selects Back from the analyze page.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_ANALYZE_NEXTPAGE | Resource ID for the page that the Analyze
|
||
|
* page will go to if it continues forward. The wAnalyzeResult in the
|
||
|
* INSTALLWIZARDDATA struct will contain the anaysis results.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE | Resource ID for that page that the
|
||
|
* Install detected devices page will go back to.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE | Resource ID for the page that the
|
||
|
* Install detected devices page will go forward to.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_INSTALLDETECTED_NODEVS | Resource ID for the page that the
|
||
|
* Install detected devices page will go to in the event that no devices are
|
||
|
* detected.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_SELECTDEV_PAGE | Resource ID of the hardware install wizard's
|
||
|
* select device page. This ID can be used to go directly to the hardware install
|
||
|
* wizard's select device page.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_ANALYZEDEV_PAGE | Resource ID of the hardware install wizard's
|
||
|
* device analysis page. This ID can be use to go directly to the hardware install
|
||
|
* wizard's analysis page.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE | Resource ID of the hardware install
|
||
|
* wizard's install detected devices page. This ID can be use to go directly to
|
||
|
* the hardware install wizard's install detected devices page.
|
||
|
*
|
||
|
* @const IDD_DYNAWIZ_SELECTCLASS_PAGE | Resource ID of the hardware install wizard's
|
||
|
* select class page. This ID can be use to go directly to the hardware install
|
||
|
* wizard's select class page.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
// DIF_INSTALLWIZARD Wizard Data
|
||
|
#define MAX_INSTALLWIZARD_DYNAPAGES 20
|
||
|
|
||
|
// Use this ID for the first page that the install wizard should dynamically jump to.
|
||
|
#define IDD_DYNAWIZ_FIRSTPAGE 10000
|
||
|
|
||
|
// Use this ID for the page that the Select Device dialog should go back to
|
||
|
#define IDD_DYNAWIZ_SELECT_PREVPAGE 10001
|
||
|
|
||
|
// Use this ID for the page that the Select Device dialog should go to next
|
||
|
#define IDD_DYNAWIZ_SELECT_NEXTPAGE 10002
|
||
|
|
||
|
// Use this ID for the page that the Analyze dialog should go back to
|
||
|
// This will only be used in the event that there is a problem, and the user
|
||
|
// selects Back from the analyze proc.
|
||
|
#define IDD_DYNAWIZ_ANALYZE_PREVPAGE 10003
|
||
|
|
||
|
// Use this ID for the page that the Analyze dialog should go to if it continue from
|
||
|
// the analyze proc. the wAnalyzeResult in the INSTALLDATA struct will
|
||
|
// contain the anaysis results.
|
||
|
#define IDD_DYNAWIZ_ANALYZE_NEXTPAGE 10004
|
||
|
|
||
|
// This dialog will be selected if the user chooses back from the
|
||
|
// Install Detected Devices dialog.
|
||
|
#define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE 10006
|
||
|
|
||
|
// This dialog will be selected if the user chooses Next from the
|
||
|
// Install Detected Devices dialog.
|
||
|
#define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE 10007
|
||
|
|
||
|
// This is the ID of the dialog to select if detection does not
|
||
|
// find any new devices
|
||
|
#define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS 10008
|
||
|
|
||
|
// This is the ID of the Select Device Wizard page.
|
||
|
#define IDD_DYNAWIZ_SELECTDEV_PAGE 10009
|
||
|
|
||
|
// This is the ID of the Analyze Device Wizard page.
|
||
|
#define IDD_DYNAWIZ_ANALYZEDEV_PAGE 10010
|
||
|
|
||
|
// This is the ID of the Install Detected Devs Wizard page.
|
||
|
#define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE 10011
|
||
|
|
||
|
// This is the ID of the Select Class Wizard page.
|
||
|
#define IDD_DYNAWIZ_SELECTCLASS_PAGE 10012
|
||
|
|
||
|
// This flag is set if a Class installer has added pages to the
|
||
|
// install wizard.
|
||
|
#define DYNAWIZ_FLAG_PAGESADDED 0x00000001
|
||
|
|
||
|
// The following flags will control the button states when displaying
|
||
|
// the InstallDetectedDevs dialog.
|
||
|
#define DYNAWIZ_FLAG_INSTALLDET_NEXT 0x00000002
|
||
|
#define DYNAWIZ_FLAG_INSTALLDET_PREV 0x00000004
|
||
|
|
||
|
// Set this flag if you jump to the analyze page, and want it to
|
||
|
// handle conflicts for you. NOTE. You will not get control back
|
||
|
// in the event of a conflict if you set this flag.
|
||
|
#define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
|
||
|
|
||
|
#define ANALYZE_FACTDEF_OK 1
|
||
|
#define ANALYZE_STDCFG_OK 2
|
||
|
#define ANALYZE_CONFLICT 3
|
||
|
#define ANALYZE_NORESOURCES 4
|
||
|
#define ANALYZE_ERROR 5
|
||
|
#define ANALYZE_PNP_DEV 6
|
||
|
#define ANALYZE_PCMCIA_DEV 7
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types INSTALLWIZARDDATA | DIF_INSTALLWIZARD class install parameters. This
|
||
|
* struct is used by class installers to extend the operation of the hardware
|
||
|
* installation wizard by adding custom pages.
|
||
|
*
|
||
|
* @field UINT | cbSize | Size of the INSTALLWIZARDDATA struct.
|
||
|
*
|
||
|
* @field LPDEVICE_INFO | lpdiOriginal | Pointer to the Original DEVICE_INFO
|
||
|
* struct at the start of the manual installation.
|
||
|
*
|
||
|
* @field LPDEVICE_INFO | lpdiSelected | Pointer to the current DEVICE_INFO struct
|
||
|
* that is being manually selected.
|
||
|
*
|
||
|
* @field DWORD | dwFlags | Flags that control the operation of the hardware
|
||
|
* installation wizard. There are currently none defined.
|
||
|
*
|
||
|
* @field LPVOID | lpConfigData | Pointer to configuration data for analysis to
|
||
|
* determine if the selected device can be installed with no conflicts.
|
||
|
*
|
||
|
* @field WORD | wAnalyzeResult | Results of analysis to determine if the device
|
||
|
* can be installed with no problems. The following values are defined:
|
||
|
* @flag ANALYZE_FACTDEF_OK | The device can be installed using its factory
|
||
|
* default settings.
|
||
|
* @flag ANALYZE_STDCFG_OK | The device can be installed using a configuration
|
||
|
* specified in one if its basic logical configurations. The user will probably
|
||
|
* have to set jumpers or switches on the hardware to match the settings determined
|
||
|
* by the install wizard.
|
||
|
* @flag ANALYZE_CONFLICT | The device cannot be installed without causing a
|
||
|
* conflict with another device.
|
||
|
* @flag ANALYZE_NORESOURCES | The device does not require any resources, so it
|
||
|
* can be installed witth no conflicts.
|
||
|
* @flag ANALYZE_ERROR | There was an error during analysis.
|
||
|
* @flag ANALYZE_PNP_DEV | The device has a least one softsettable logical
|
||
|
* configurations, allowing it to be automatically configured. Additionally the
|
||
|
* device will be enumerated by one of the standard bus enumerators, so it does
|
||
|
* not require manual installation, except to pre-copy driver files.
|
||
|
*
|
||
|
* @field HPROPSHEETPAGE | hpsDynamicPages[MAX_INSTALLWIZARD_DYNAPAGES] | An
|
||
|
* array of property sheet page handles. The class installer would use this array
|
||
|
* to create custom wizard pages, and insert their handles into this array.
|
||
|
*
|
||
|
* @field WORD | wNumDynaPages | The number of pages inserted into the hpsDynamicPages
|
||
|
* array.
|
||
|
*
|
||
|
* @field DWORD | dwDynaWizFlags | Flags that control the behavior of the
|
||
|
* installation wizard whtn dynamic pages have been added.
|
||
|
* @flag DYNAWIZ_FLAG_PAGESADDED | Will be set by the install wizard if the
|
||
|
* class installer adds custom pages.
|
||
|
* @flag DYNAWIZ_FLAG_INSTALLDET_NEXT | If set, the install wizard will allow
|
||
|
* going forward from the detected devices page, otherwise finish will
|
||
|
* be the default option for the detected devices page.
|
||
|
* @flag DYNAWIZ_FLAG_INSTALLDET_PREV | If set, the install wizard will allow
|
||
|
* going back from the detected devices page.
|
||
|
* @flag DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT | If set, the class installer will
|
||
|
* handle the case where the selected device cannot be installed because of
|
||
|
* a conflict.
|
||
|
*
|
||
|
* @field DWORD | dwPrivateFlags | Flags that may be defined and used by the class
|
||
|
* installer.
|
||
|
*
|
||
|
* @field LPARAM | lpPrivateData | Pointer to private reference data defined and
|
||
|
* set by the class installer.
|
||
|
*
|
||
|
* @field LPSTR | lpExtraRunDllParams | Pointer to a string containing extra
|
||
|
* parameters passed to the hardware install rundll function.
|
||
|
*
|
||
|
* @field HWND | hwndWizardDlg | Window handle of the install wizard top level
|
||
|
* window.
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct InstallWizardData_tag
|
||
|
{
|
||
|
UINT cbSize;
|
||
|
|
||
|
LPDEVICE_INFO lpdiOriginal;
|
||
|
LPDEVICE_INFO lpdiSelected;
|
||
|
DWORD dwFlags;
|
||
|
LPVOID lpConfigData;
|
||
|
WORD wAnalyzeResult;
|
||
|
|
||
|
// The following fields are used when a Class Installer Extends the Install Wizard
|
||
|
HPROPSHEETPAGE hpsDynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
|
||
|
WORD wNumDynaPages;
|
||
|
DWORD dwDynaWizFlags;
|
||
|
DWORD dwPrivateFlags;
|
||
|
LPARAM lpPrivateData;
|
||
|
LPSTR lpExtraRunDllParams;
|
||
|
HWND hwndWizardDlg;
|
||
|
} INSTALLWIZDATA, * PINSTALLWIZDATA , FAR *LPINSTALLWIZDATA;
|
||
|
|
||
|
RETERR WINAPI DiCreateDeviceInfo(
|
||
|
LPLPDEVICE_INFO lplpdi, // Ptr to ptr to dev info
|
||
|
LPCSTR lpszDescription, // If non-null then description string
|
||
|
DWORD hDevnode, // BUGBUG -- MAKE A DEVNODE
|
||
|
HKEY hkey, // Registry hkey for dev info
|
||
|
LPCSTR lpszRegsubkey, // If non-null then reg subkey string
|
||
|
LPCSTR lpszClassName, // If non-null then class name string
|
||
|
HWND hwndParent); // If non-null then hwnd of parent
|
||
|
|
||
|
RETERR WINAPI DiGetClassDevs(
|
||
|
LPLPDEVICE_INFO lplpdi, // Ptr to ptr to dev info
|
||
|
LPCSTR lpszClassName, // Must be name of class
|
||
|
HWND hwndParent, // If non-null then hwnd of parent
|
||
|
int iFlags); // Options
|
||
|
|
||
|
RETERR WINAPI DiGetClassDevsEx(
|
||
|
LPLPDEVICE_INFO lplpdi, // Ptr to ptr to dev info
|
||
|
LPCSTR lpszClassName, // Must be name of class
|
||
|
LPCSTR lpszEnumerator, // Must be name of enumerator, or NULL
|
||
|
HWND hwndParent, // If non-null then hwnd of parent
|
||
|
int iFlags); // Options
|
||
|
|
||
|
#define DIGCF_DEFAULT 0x0001 // NOT IMPLEMENTED!
|
||
|
#define DIGCF_PRESENT 0x0002
|
||
|
#define DIGCF_ALLCLASSES 0x0004
|
||
|
#define DIGCF_PROFILE 0x0008
|
||
|
|
||
|
// API to return the Class name of an INF File
|
||
|
RETERR WINAPI DiGetINFClass(LPSTR lpszMWDPath, UINT InfType, LPSTR lpszClassName, DWORD dwcbClassName);
|
||
|
|
||
|
RETERR WINAPI PASCAL DiCreateDevRegKey(
|
||
|
LPDEVICE_INFO lpdi,
|
||
|
LPHKEY lphk,
|
||
|
HINF hinf,
|
||
|
LPCSTR lpszInfSection,
|
||
|
int iFlags);
|
||
|
|
||
|
RETERR WINAPI PASCAL DiDeleteDevRegKey(LPDEVICE_INFO lpdi, int iFlags);
|
||
|
|
||
|
|
||
|
RETERR WINAPI PASCAL DiOpenDevRegKey(
|
||
|
LPDEVICE_INFO lpdi,
|
||
|
LPHKEY lphk,
|
||
|
int iFlags);
|
||
|
|
||
|
#define DIREG_DEV 0x0001 // Open/Create/Delete device key
|
||
|
#define DIREG_DRV 0x0002 // Open/Create/Delete driver key
|
||
|
#define DIREG_BOTH 0x0004 // Delete both driver and Device key
|
||
|
|
||
|
RETERR WINAPI DiReadRegLogConf
|
||
|
(
|
||
|
LPDEVICE_INFO lpdi,
|
||
|
LPSTR lpszConfigName,
|
||
|
LPBYTE FAR *lplpbLogConf,
|
||
|
LPDWORD lpdwSize
|
||
|
);
|
||
|
|
||
|
RETERR WINAPI DiReadRegConf
|
||
|
(
|
||
|
LPDEVICE_INFO lpdi,
|
||
|
LPBYTE FAR *lplpbLogConf,
|
||
|
LPDWORD lpdwSize,
|
||
|
DWORD dwFlags
|
||
|
);
|
||
|
|
||
|
#define DIREGLC_FORCEDCONFIG 0x00000001
|
||
|
#define DIREGLC_BOOTCONFIG 0x00000002
|
||
|
|
||
|
RETERR WINAPI DiCopyRegSubKeyValue
|
||
|
(
|
||
|
HKEY hkKey,
|
||
|
LPSTR lpszFromSubKey,
|
||
|
LPSTR lpszToSubKey,
|
||
|
LPSTR lpszValueToCopy
|
||
|
);
|
||
|
|
||
|
RETERR WINAPI DiDestroyClassInfoList(LPCLASS_INFO lpci);
|
||
|
RETERR WINAPI DiBuildClassInfoList(LPLPCLASS_INFO lplpci);
|
||
|
|
||
|
#define DIBCI_NOINSTALLCLASS 0x000000001
|
||
|
#define DIBCI_NODISPLAYCLASS 0x000000002
|
||
|
|
||
|
RETERR WINAPI DiBuildClassInfoListEx(LPLPCLASS_INFO lplpci, DWORD dwFlags);
|
||
|
RETERR WINAPI DiGetDeviceClassInfo(LPLPCLASS_INFO lplpci, LPDEVICE_INFO lpdi);
|
||
|
|
||
|
RETERR WINAPI DiDestroyDeviceInfoList(LPDEVICE_INFO lpdi);
|
||
|
RETERR WINAPI DiSelectDevice( LPDEVICE_INFO lpdi );
|
||
|
RETERR WINAPI DiSelectOEMDrv(HWND hDlg, LPDEVICE_INFO lpdi);
|
||
|
|
||
|
// Callback for diInstallDevice vcpOpen. Basically calls vcpUICallback for everthing
|
||
|
// except when DI_FORCECOPY is active, in which case copies get defaulted to
|
||
|
// VCPN_FORCE
|
||
|
LRESULT CALLBACK diInstallDeviceUICallbackProc(LPVOID lpvObj, UINT uMsg, WPARAM wParam, LPARAM lParam, LPARAM lparamRef);
|
||
|
RETERR WINAPI DiInstallDevice( LPDEVICE_INFO lpdi );
|
||
|
RETERR WINAPI DiInstallDriverFiles(LPDEVICE_INFO lpdi);
|
||
|
|
||
|
RETERR WINAPI DiRemoveDevice( LPDEVICE_INFO lpdi );
|
||
|
RETERR WINAPI DiUnremoveDevice( LPDEVICE_INFO lpdi );
|
||
|
RETERR WINAPI DiAskForOEMDisk(LPDEVICE_INFO lpdi);
|
||
|
|
||
|
RETERR WINAPI DiCallClassInstaller(DI_FUNCTION diFctn, LPDEVICE_INFO lpdi);
|
||
|
|
||
|
BOOL WINAPI DiBuildDriverIndex(BOOL bUI);
|
||
|
BOOL WINAPI DiAddSingleInfToDrvIdx(LPSTR lpszInfName, WORD InfType, BOOL bCreate);
|
||
|
BOOL WINAPI DiDeleteSingleInfFromDrvIdx(LPSTR lpszInfPath);
|
||
|
|
||
|
RETERR WINAPI DiBuildCompatDrvList(LPDEVICE_INFO lpdi);
|
||
|
LPDRIVER_NODE WINAPI DiSelectBestCompatDrv(LPDEVICE_INFO lpdi, LPDRIVER_NODE lpdnCurrent);
|
||
|
|
||
|
// Given list of drivers returns the newest, may be used by class installers when
|
||
|
// called by DiSelectBestCompatDrv.
|
||
|
LPDRIVER_NODE WINAPI DiPickBestDriver(LPDRIVER_NODE lpdnList);
|
||
|
|
||
|
RETERR WINAPI DiBuildClassDrvList(LPDEVICE_INFO lpdi);
|
||
|
RETERR WINAPI DiBuildCompatDrvInfoList(LPDEVICE_INFO lpdi);
|
||
|
RETERR WINAPI DiBuildClassDrvInfoList(LPDEVICE_INFO lpdi);
|
||
|
RETERR WINAPI DiDestroyDrvInfoList(LPDRIVER_INFO lpInfo);
|
||
|
LPDRIVER_NODE WINAPI DiConvertDriverInfoToDriverNode(LPDEVICE_INFO lpdi, LPDRIVER_INFO lpInfo);
|
||
|
|
||
|
typedef RETERR (CALLBACK *OLDINFPROC)(HINF hinf, LPCSTR lpszNewInf, LPARAM lParam);
|
||
|
RETERR WINAPI DiBuildClassDrvListFromOldInf(LPDEVICE_INFO lpdi, LPCSTR lpszSection, OLDINFPROC lpfnOldInfProc, LPARAM lParam);
|
||
|
|
||
|
RETERR WINAPI DiDestroyDriverNodeList(LPDRIVER_NODE lpdn);
|
||
|
|
||
|
RETERR WINAPI DiMoveDuplicateDevNode(LPDEVICE_INFO lpdiNewDev);
|
||
|
|
||
|
// The following export will load a dll and find the specified proc name
|
||
|
typedef RETERR (FAR PASCAL *DIINSTALLERPROPERTIES)(LPDEVICE_INFO);
|
||
|
|
||
|
RETERR WINAPI GetFctn(HKEY hk, LPSTR lpszRegVal, LPSTR lpszDefProcName,
|
||
|
HINSTANCE FAR * lphinst, FARPROC FAR *lplpfn);
|
||
|
|
||
|
RETERR
|
||
|
WINAPI
|
||
|
DiCreateDriverNode(
|
||
|
LPLPDRIVER_NODE lplpdn,
|
||
|
UINT Rank,
|
||
|
UINT InfType,
|
||
|
unsigned InfDate,
|
||
|
LPCSTR lpszDevDescription,
|
||
|
LPCSTR lpszDrvDescription,
|
||
|
LPCSTR lpszProviderName,
|
||
|
LPCSTR lpszMfgName,
|
||
|
LPCSTR lpszInfFileName,
|
||
|
LPCSTR lpszSectionName,
|
||
|
DWORD dwPrivateData);
|
||
|
|
||
|
RETERR WINAPI DiLoadClassIcon(
|
||
|
LPCSTR szClassName,
|
||
|
HICON FAR *lphiLargeIcon,
|
||
|
int FAR *lpiMiniIconIndex);
|
||
|
|
||
|
|
||
|
RETERR WINAPI DiInstallDrvSection(
|
||
|
LPCSTR lpszInfFileName,
|
||
|
LPCSTR lpszSection,
|
||
|
LPCSTR lpszClassName,
|
||
|
LPCSTR lpszDescription,
|
||
|
DWORD dwFlags);
|
||
|
|
||
|
|
||
|
RETERR WINAPI DiChangeState(LPDEVICE_INFO lpdi, DWORD dwStateChange, DWORD dwFlags, LPARAM lParam);
|
||
|
|
||
|
#define DICS_ENABLE 0x00000001
|
||
|
#define DICS_DISABLE 0x00000002
|
||
|
#define DICS_PROPCHANGE 0x00000003
|
||
|
#define DICS_START 0x00000004
|
||
|
#define DICS_STOP 0x00000005
|
||
|
|
||
|
#define DICS_FLAG_GLOBAL 0x00000001
|
||
|
#define DICS_FLAG_CONFIGSPECIFIC 0x00000002
|
||
|
#define DICS_FLAG_CONFIGGENERAL 0x00000004
|
||
|
|
||
|
RETERR WINAPI DiInstallClass(LPCSTR lpszInfFileName, DWORD dwFlags);
|
||
|
|
||
|
RETERR WINAPI DiOpenClassRegKey(LPHKEY lphk, LPCSTR lpszClassName);
|
||
|
|
||
|
// support routine for dealing with class mini icons
|
||
|
#define DMI_MASK 0x0001
|
||
|
#define DMI_BKCOLOR 0x0002
|
||
|
#define DMI_USERECT 0x0004
|
||
|
int WINAPI PASCAL DiDrawMiniIcon(HDC hdc, RECT rcLine, int iMiniIcon, DWORD flags);
|
||
|
BOOL WINAPI DiGetClassBitmapIndex(LPCSTR lpszClass, int FAR *lpiMiniIconIndex);
|
||
|
|
||
|
// internal calls for display class
|
||
|
#define DISPLAY_SETMODE_SUCCESS 0x0001
|
||
|
#define DISPLAY_SETMODE_DRVCHANGE 0x0002
|
||
|
#define DISPLAY_SETMODE_FONTCHANGE 0x0004
|
||
|
|
||
|
UINT WINAPI Display_SetMode(LPDEVICE_INFO lpdi, UINT uColorRes, int iXRes, int iYRes);
|
||
|
RETERR WINAPI Display_ClassInstaller(DI_FUNCTION diFctn, LPDEVICE_INFO lpdi);
|
||
|
RETERR WINAPI Display_OpenFontSizeKey(LPHKEY lphkFontSize);
|
||
|
BOOL WINAPI Display_SetFontSize(LPCSTR lpszFontSize);
|
||
|
|
||
|
RETERR WINAPI DiIsThereNeedToCopy(HWND hwnd, DWORD dwFlags);
|
||
|
|
||
|
#define DINTC_NOCOPYDEFAULT 0x00000001
|
||
|
|
||
|
// API for the mouse class installer
|
||
|
RETERR WINAPI Mouse_ClassInstaller(DI_FUNCTION diFctn, LPDEVICE_INFO lpdi);
|
||
|
#endif // NODEVICEINSTALL
|
||
|
|
||
|
// API for determining if a Driver file is currently part of VMM32.VxD
|
||
|
BOOL WINAPI bIsFileInVMM32
|
||
|
(
|
||
|
LPSTR lpszFileName
|
||
|
);
|
||
|
|
||
|
// API for determining if a display is a primary or secondary
|
||
|
BOOL WINAPI Display_IsSecondDisplay(
|
||
|
LPDEVICE_INFO lpdi
|
||
|
);
|
||
|
|
||
|
// Japanese Keyboard Support
|
||
|
LONG _export WINAPI GetJapaneseKeyboardType();
|
||
|
#define JP_101KBD 0
|
||
|
#define JP_AXKBD 1
|
||
|
#define JP_106KBD 2
|
||
|
#define JP_003KBD 3
|
||
|
#define JP_001KBD 4
|
||
|
#define JP_TB_DESKTOP 5
|
||
|
#define JP_TB_LAPTOP 6
|
||
|
#define JP_TB_NOTEBOOK 7
|
||
|
|
||
|
|
||
|
#ifndef NOUSERINTERFACE
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// User Interface prototypes and definitions
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
BOOL WINAPI UiMakeDlgNonBold(HWND hDlg);
|
||
|
VOID WINAPI UiDeleteNonBoldFont(HWND hDlg);
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/***************************************************************************/
|
||
|
//
|
||
|
// setup reg DB calls, use just like those in kernel
|
||
|
//
|
||
|
/***************************************************************************/
|
||
|
|
||
|
DWORD WINAPI SURegOpenKey(HKEY hKey, LPCSTR lpszSubKey, HKEY FAR *lphkResult);
|
||
|
DWORD WINAPI SURegCloseKey(HKEY hKey);
|
||
|
DWORD WINAPI SURegCreateKey(HKEY hKey, LPCSTR lpszSubKey, HKEY FAR *lphkResult);
|
||
|
DWORD WINAPI SURegDeleteKey(HKEY hKey, LPCSTR lpszSubKey);
|
||
|
DWORD WINAPI SURegEnumKey(HKEY hKey, DWORD dwIdx, LPSTR lpszBuffer, DWORD dwBufSize);
|
||
|
DWORD WINAPI SURegQueryValue16(HKEY hKey, LPCSTR lpszSubKey, LPSTR lpValueBuf, DWORD FAR *ldwBufSize);
|
||
|
DWORD WINAPI SURegSetValue16(HKEY hKey, LPCSTR lpszSubKey, DWORD dwType, LPCBYTE lpszValue, DWORD dwValSize);
|
||
|
DWORD WINAPI SURegDeleteValue(HKEY hKey,LPCSTR lpszValue);
|
||
|
DWORD WINAPI SURegEnumValue(HKEY hKey,DWORD dwIdx, LPCSTR lpszValue, DWORD FAR *lpcbValue, DWORD FAR *lpdwReserved, DWORD FAR *lpdwType, LPBYTE lpbData, DWORD FAR *lpcbData);
|
||
|
DWORD WINAPI SURegQueryValueEx(HKEY hKey,LPCSTR lpszValueName, DWORD FAR *lpdwReserved,DWORD FAR *lpdwType,LPSTR lpValueBuf, DWORD FAR *ldwBufSize);
|
||
|
DWORD WINAPI SURegSetValueEx(HKEY hKey,LPCSTR lpszValueName, DWORD dwReserved, DWORD dwType, LPBYTE lpszValue, DWORD dwValSize);
|
||
|
DWORD WINAPI SURegSaveKey(HKEY hKey, LPCSTR lpszFileName, LPVOID lpsa);
|
||
|
DWORD WINAPI SURegLoadKey(HKEY hKey, LPCSTR lpszSubKey, LPCSTR lpszFileName);
|
||
|
DWORD WINAPI SURegUnLoadKey(HKEY hKey, LPCSTR lpszSubKey);
|
||
|
|
||
|
DWORD WINAPI SURegFlush(VOID);
|
||
|
DWORD WINAPI SURegInit(VOID); // should be called before any other Reg APIs
|
||
|
|
||
|
/***************************************************************************/
|
||
|
// setup FormatMessage support
|
||
|
/***************************************************************************/
|
||
|
#define MB_LOG (UINT)-1
|
||
|
#define MB_DBG (UINT)-2
|
||
|
|
||
|
UINT FAR CDECL suFormatMessage(HINSTANCE hAppInst, LPCSTR lpcFormat, LPSTR szMessage, UINT uSize,
|
||
|
...);
|
||
|
UINT WINAPI suvFormatMessage(HINSTANCE hAppInst, LPCSTR lpcFormat, LPSTR szMessage, UINT uSize,
|
||
|
LPVOID FAR * lpArgs);
|
||
|
int WINCAPI _loadds suFormatMessageBox(HINSTANCE hAppInst, HWND hwndParent, LPCSTR lpcText, LPCSTR lpcTitle,
|
||
|
UINT uStyle, ...);
|
||
|
|
||
|
WORD WINAPI suErrorToIds( WORD Value, WORD Class );
|
||
|
|
||
|
/***************************************************************************/
|
||
|
// setup Version Conflict support
|
||
|
/***************************************************************************/
|
||
|
|
||
|
LPVOID WINAPI suVerConflictInit(BOOL fYesToLangMismatch);
|
||
|
void WINAPI suVerConflictTerm(LPVOID lpvData);
|
||
|
LRESULT WINAPI suVerConflict(HWND hwnd, LPVCPVERCONFLICT lpvc, BOOL bBackup, LPVOID lpvData);
|
||
|
int WINAPI sxCompareDosAppVer( LPCSTR lpszOldFileSpec, LPCSTR lpszNewFileSpec);
|
||
|
|
||
|
|
||
|
/***************************************************************************/
|
||
|
// setup Help support
|
||
|
/***************************************************************************/
|
||
|
|
||
|
BOOL WINAPI suHelp( HWND hwndApp, HWND hwndDlg );
|
||
|
|
||
|
//***************************************************************************/
|
||
|
// setup Emergency Boot Disk (EBD) creation fn.
|
||
|
//***************************************************************************/
|
||
|
|
||
|
RETERR WINAPI suCreateEBD( HWND hWnd, VIFPROC CopyCallbackProc, LPARAM lpuii );
|
||
|
|
||
|
//***************************************************************************
|
||
|
// Misc SETUPX.DLL support functions.
|
||
|
//***************************************************************************
|
||
|
enum SU_ACTIONS // Actions msgs for Setupx() /* ;Internal */
|
||
|
{ /* ;Internal */
|
||
|
SUX_REGINIT, // Intialize registry /* ;Internal */
|
||
|
SUX_DBGLEVEL, // Set debug level /* ;Internal */
|
||
|
SUX_SETUPFLG, // Set fIsSetup flag /* ;Internal */
|
||
|
SUX_FASTSETUP, // Setupx => checking less mode /* ;Internal */
|
||
|
SUX_FORCEREGFLUSH, // Call kRegFlush /* ;Internal */
|
||
|
SUX_TPSFLUSH, // Call TPS_Flush() fns. /* ;Internal */
|
||
|
SUX_DBGHFILE, // File to write messages to /* ;Internal */
|
||
|
SUX_LOADSTORELDIDS, // Load/store setup's LDID's /* ;Internal */
|
||
|
SUX_ENABLEREGFLUSH, // Enable/Disable SURegFlush() if fIsSetup /* ;Internal */
|
||
|
SUX_SETUNCPATHFUNC, // NOW UNUSED!! /* ;Internal */
|
||
|
SUX_SETTRUEDISKFREEFUNC, // Set TRUE disk free func /* ;Internal */
|
||
|
SUX_ISFLOPPYBOOT, // Set TRUE if floppy boot disk /* ;Internal */
|
||
|
SUX_BISVER4, // returns bIsVer4(CHICAGO) flag/* ;Internal */
|
||
|
SUX_SETCTLCALLBACKFUNC, // Set ctlCopyCallBackProc Func /* ;Internal */
|
||
|
SUX_GETCTLCALLBACKFUNC, // Get ctlCopyCallBackProc Func /* ;Internal */
|
||
|
SUX_BISMULTICFG, // returns SETUPX's gfMultiCfg /* ;Internal */
|
||
|
SUX_DUMPDSINFO, // Dumps diskspace info /* ;Internal */
|
||
|
SUX_INFCACHEOFF, // Turns INF file caching on/off/* ;Internal */
|
||
|
SUX_SETFCDROMDRIVEEXISTS, // Set CDRomDriveExists func /* ;Internal */
|
||
|
SUX_ALLOCRMBUFFERS, // Allocate real mode buffers /* ;Internal */
|
||
|
SUX_FREERMBUFFERS, // Free real mode buffers /* ;Internal */
|
||
|
SUX_DODOSEBDWORK // Do DOS EBD Work /* ;Internal */
|
||
|
}; /* ;Internal */
|
||
|
|
||
|
RETERR WINAPI Setupx( UINT uMsg, WPARAM wParam, LPARAM lParam ); /* ;Internal */
|
||
|
|
||
|
RETERR WINAPI SUStoreLdidPath( LOGDISKID ldid, LPSTR lpszPath ); /* ;Internal */
|
||
|
|
||
|
BOOL WINAPI sxIsSBSServerFile( LPVIRTNODE lpVn ); /* ;Internal */
|
||
|
|
||
|
BOOL WINAPI sxMakeUNCPath( LPSTR lpszPath ); /* ;Internal */
|
||
|
|
||
|
typedef RETERR (CALLBACK* FBFPROC)(LPCSTR lpszFileName, LPVOID lpVoid); /* ;Internal */
|
||
|
RETERR WINAPI sxFindBatchFiles(HTP,int,FBFPROC,LPVOID); /* ;Internal */
|
||
|
|
||
|
RETERR WINAPI SUGetSetSetupFlags(LPDWORD lpdwFlags, BOOL bSet);
|
||
|
|
||
|
RETERR WINAPI CfgSetupMerge( int uFlags );
|
||
|
BOOL WINAPI sxIsMSDOS7Running();
|
||
|
BOOL WINAPI IsPanEuropean();
|
||
|
|
||
|
// structure for the LPARAM argument to Setupx() for SUX_REGINIT action. ;Internal
|
||
|
typedef struct _REGINIT_S { /* setupx - reg_init */ /* ;Internal */
|
||
|
LPSTR lpszSystemFile; // reg's base SYSTEM filename /* ;Internal */
|
||
|
LOGDISKID ldidSystemFile; // ldid for SYSTEM filename /* ;Internal */
|
||
|
LPSTR lpszUserFile; // reg's base USER filename /* ;Internal */
|
||
|
LOGDISKID ldidUserFile; // ldid for USER filename /* ;Internal */
|
||
|
} REGINIT_S, FAR *LPREGINIT; /* ;Internal */
|
||
|
|
||
|
#ifndef LPLPSTR
|
||
|
typedef LPSTR (FAR *LPLPSTR);
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#define CFG_PARSE_BUFLEN 1024 // Buf sized passed line obj funcs /* ;Internal */
|
||
|
|
||
|
LPLPSTR WINAPI CfgParseLine( LPCSTR szLine, LPSTR Buf ); /* ;Internal */
|
||
|
BOOL WINAPI CfgSetAutoProcess( int TrueFalse ); /* ;Internal */
|
||
|
void WINAPI CfgObjToStr( LPLPSTR apszObj, LPSTR szLine ); /* ;Internal */
|
||
|
LPLPSTR WINAPI CfgLnToObj( HTP hSection, int Offset, int Origin, LPSTR Buf ); /* ;Internal */
|
||
|
LPLPSTR WINAPI CfgObjFindKeyCmd( HTP hSec, LPCSTR szKey, LPCSTR szCmd, /* ;Internal */
|
||
|
int Offset, int Origin, LPSTR Buf ); /* ;Internal */
|
||
|
LPCSTR WINAPI WildCardStrCmpi( LPCSTR szKey, LPCSTR szLine, LPCSTR szDelims ); /* ;Internal */
|
||
|
RETERR WINAPI GenMapRootRegStr2Key( LPCSTR szRegRoot, HKEY hRegRelKey, /* ;Internal */
|
||
|
HKEY FAR *lphkeyRoot ); /* ;Internal */
|
||
|
|
||
|
|
||
|
//***************************************************************************
|
||
|
//
|
||
|
// ENUMS for accessing config.sys/autoexec.bat line objects using the
|
||
|
// array returned by ParseConfigLine()..
|
||
|
//
|
||
|
//***************************************************************************
|
||
|
|
||
|
enum CFGLINE_STRINGS // Config.sys/autoexec.bat objects
|
||
|
{
|
||
|
CFG_KEYLEAD, // Keyword leading whitespaces
|
||
|
CFG_KEYWORD, // Keyword
|
||
|
CFG_KEYTRAIL, // Keyword trailing delimiters
|
||
|
CFG_UMBINFO, // Load high info
|
||
|
CFG_DRVLETTER, // Drive letter for cmd path
|
||
|
CFG_PATH, // Command path
|
||
|
CFG_COMMAND, // Command base name
|
||
|
CFG_EXT, // Command extension including '.'
|
||
|
CFG_ARGS, // Command arguments
|
||
|
CFG_FREE, // Free area at end of buffer
|
||
|
CFG_END
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* SUB String Data
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* AUTODOC
|
||
|
* @doc EXTERNAL SETUPX DEVICE_INSTALLER
|
||
|
*
|
||
|
* @types SUBSTR_DATA | Data structure used to manage substrings.
|
||
|
* struct is used by class installers to extend the operation of the hardware
|
||
|
* installation wizard by adding custom pages.
|
||
|
*
|
||
|
* @field LPSTR | lpFirstSubstr | Pointer to the first substring in the list.
|
||
|
*
|
||
|
* @field LPSTR | lpCurSubstr | Pointer to the current substring in the list.
|
||
|
*
|
||
|
* @field LPSTR | lpLastSubstr | Pointer to the last substring in the list.
|
||
|
*
|
||
|
* @xref InitSubstrData
|
||
|
* @xref GetFirstSubstr
|
||
|
* @xref GetNextSubstr
|
||
|
*
|
||
|
*******************************************************************************/
|
||
|
typedef struct _SUBSTR_DATA {
|
||
|
LPSTR lpFirstSubstr;
|
||
|
LPSTR lpCurSubstr;
|
||
|
LPSTR lpLastSubstr;
|
||
|
} SUBSTR_DATA;
|
||
|
|
||
|
|
||
|
typedef SUBSTR_DATA* PSUBSTR_DATA;
|
||
|
typedef SUBSTR_DATA NEAR* NPSUBSTR_DATA;
|
||
|
typedef SUBSTR_DATA FAR* LPSUBSTR_DATA;
|
||
|
|
||
|
BOOL WINAPI InitSubstrData(LPSUBSTR_DATA lpSubstrData, LPSTR lpStr);
|
||
|
BOOL WINAPI GetFirstSubstr(LPSUBSTR_DATA lpSubstrData);
|
||
|
BOOL WINAPI GetNextSubstr(LPSUBSTR_DATA lpSubStrData);
|
||
|
BOOL WINAPI InitSubstrDataEx(LPSUBSTR_DATA lpssd, LPSTR lpString, char chDelim); /* ;Internal */
|
||
|
|
||
|
BOOL WINAPI FirstBootMoveToDOSSTART(LPSTR lpszCmd, BOOL fRemark);
|
||
|
BOOL WINAPI DOSOptEnableCurCfg(LPCSTR lpszOptKey);
|
||
|
|
||
|
/*---------------------------------------------------------------------------*
|
||
|
* Misc. Di functions
|
||
|
*---------------------------------------------------------------------------*/
|
||
|
BOOL WINAPI DiBuildPotentialDuplicatesList
|
||
|
(
|
||
|
LPDEVICE_INFO lpdi,
|
||
|
LPSTR lpDuplicateList,
|
||
|
DWORD cbSize,
|
||
|
LPDWORD lpcbData,
|
||
|
LPSTR lpstrDupType
|
||
|
);
|
||
|
|
||
|
BOOL _loadds WINAPI WalkSubtree(DWORD dnRoot, LPSTR szDrvLet);
|
||
|
|
||
|
// PID
|
||
|
BOOL _loadds WINAPI PidConstruct( LPSTR lpszProductType, LPSTR lpszPID, LPSTR lpszUPI, int iAction);
|
||
|
BOOL _loadds WINAPI PidValidate( LPSTR lpszProductType, LPSTR lpszPID);
|
||
|
int _loadds WINAPI WriteDMFBootData(int iDrive, LPSTR pData, int cb);
|
||
|
|
||
|
// FirstRunScreens
|
||
|
RETERR WINAPI DoFirstRunScreens();
|
||
|
|
||
|
// Migration DLLs
|
||
|
#define SU_MIGRATE_PREINFLOAD 0x00000001 // before the setup INFs are loaded
|
||
|
#define SU_MIGRATE_POSTINFLOAD 0x00000002 // after the setup INFs are loaded
|
||
|
#define SU_MIGRATE_DISKSPACE 0x00000010 // request for the amount of additional diskspace needed
|
||
|
#define SU_MIGRATE_PREQUEUE 0x00000100 // before the INFs are processed and files are queued
|
||
|
#define SU_MIGRATE_POSTQUEUE 0x00000200 // after INFs are processed
|
||
|
#define SU_MIGRATE_REBOOT 0x00000400 // just before we are going to reboot for the 1st time
|
||
|
#define SU_MIGRATE_PRERUNONCE 0x00010000 // before any runonce items are processed
|
||
|
#define SU_MIGRATE_POSTRUNONCE 0x00020000 // after all runonce items are processed
|
||
|
DWORD WINAPI sxCallMigrationDLLs( DWORD dwStage, LPARAM lParam );
|
||
|
void WINAPI _loadds sxCallMigrationDLLs_RunDll(HWND, HINSTANCE, LPSTR, int);
|
||
|
|
||
|
//Count Down Dlg
|
||
|
int WINAPI SxShowRebootDlg(UINT, HWND);
|
||
|
void WINAPI _loadds SxShowRebootDlg_RunDll(HWND, HINSTANCE, LPSTR, int);
|
||
|
|
||
|
BOOL WINAPI CopyInfFile( LPSTR, LPSTR, UINT );
|
||
|
|
||
|
BOOL WINAPI IsWindowsFile( LPSTR lpszFile );
|
||
|
|
||
|
RETERR WINAPI VerifySelectedDriver(LPDEVICE_INFO lpdi, BOOL *pbYesToAll);
|
||
|
|
||
|
//Dialog positioning function and defn's(wPosFlags)
|
||
|
#define DLG_CENTERV 0x01
|
||
|
#define DLG_CENTERH 0x02
|
||
|
#define DLG_CENTER DLG_CENTERV | DLG_CENTERH
|
||
|
#define DLG_TOP 0x04
|
||
|
#define DLG_BOTTOM 0x08
|
||
|
#define DLG_RIGHT 0x10
|
||
|
#define DLG_LEFT 0x20
|
||
|
BOOL WINAPI uiPositionDialog( HWND hwndDlg, WORD wPosFlags );
|
||
|
|
||
|
//***************************************************************************
|
||
|
#endif // SETUPX_INC
|