setupx16.h 14.2 KB
Newer Older
1
/*
2
 * Copyright 2000 Andreas Mohr for CodeWeavers
3 4 5 6 7 8 9 10 11 12 13 14 15
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
16
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 18
 */

Andreas Mohr's avatar
Andreas Mohr committed
19 20
#ifndef __SETUPX16_H
#define __SETUPX16_H
21 22 23

#include "wine/windef16.h"

24
typedef UINT16 DI_FUNCTION16;
25 26
typedef UINT16 HINF16;
typedef UINT16 LOGDISKID16;
27
typedef UINT16 VHSTR;
28

29 30
#define LINE_LEN	256

31 32 33 34 35
/* error codes stuff */

typedef UINT16 RETERR16;
#define OK		0
#define IP_ERROR	(UINT16)100
36 37 38 39
#define TP_ERROR	(UINT16)200
#define VCP_ERROR	(UINT16)300
#define GEN_ERROR	(UINT16)400
#define DI_ERROR	(UINT16)500
40

41
enum {
42 43 44 45 46 47 48 49
	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,
50
	ERR_IP_SECT_NOT_FOUND,
51 52 53 54 55 56 57 58 59
	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
};

60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
/****** virtual copy operations ******/

typedef DWORD LPEXPANDVTBL;

typedef struct {
	DWORD		dwSoFar;
	DWORD		dwTotal;
} VCPPROGRESS, *LPVCPPROGRESS;

typedef struct {
	WORD		cbSize;
	LOGDISKID16	ldid;
	VHSTR		vhstrRoot;
	VHSTR		vhstrVolumeLabel;
	VHSTR		vhstrDiskName;
	WORD		wVolumeTime;
	WORD		wVolumeDate;
	DWORD		dwSerialNumber;
	WORD		fl;
	LPARAM		lparamRef;

	VCPPROGRESS	prgFileRead;
	VCPPROGRESS	prgByteRead;

	VCPPROGRESS	prgFileWrite;
	VCPPROGRESS	prgByteWrite;
86
} VCPDISKINFO, *LPVCPDISKINFO;
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

typedef struct {
	LOGDISKID16	ldid;
	VHSTR		vhstrDir;
	VHSTR		vhstrFileName;
} VCPFILESPEC, *LPVCPFILESPEC;

typedef struct {
	UINT16		uiMDate;
	UINT16		uiMTime;
	UINT16		uiADate;
	UINT16		uiATime;
	UINT16		uiAttr;
	DWORD		llenIn;
	DWORD		llenOut;
} VCPFATTR, *LPVCPFATTR;

typedef struct {
	UINT16		uDate;
	UINT16		uTime;
	DWORD		dwSize;
} VCPFILESTAT, *LPVCPFILESTAT;

typedef struct
{
	HFILE16		hFileSrc;
	HFILE16		hFileDst;
	VCPFATTR	fAttr;
	WORD		dosError;
	VHSTR		vhstrFileName;
	WPARAM		vcpm;
} VIRTNODEEX, *LPVIRTNODEEX;

typedef struct {
	WORD		cbSize;
	VCPFILESPEC	vfsSrc;
	VCPFILESPEC	vfsDst;
	WORD		fl;
	LPARAM		lParam;
	LPEXPANDVTBL	lpExpandVtbl;
	LPVIRTNODEEX	lpvnex;
	VHSTR		vhstrDstFinalName;
	VCPFILESTAT	vFileStat;
} VIRTNODE, *LPVIRTNODE;

typedef struct {
	WORD		cbSize;
	VCPPROGRESS	prgDiskRead;
	VCPPROGRESS	prgFileRead;
	VCPPROGRESS	prgByteRead;

	VCPPROGRESS	prgDiskWrite;
	VCPPROGRESS	prgFileWrite;
	VCPPROGRESS	prgByteWrite;

	LPVCPDISKINFO	lpvdiIn;
	LPVCPDISKINFO	lpvdiOut;
	LPVIRTNODE	lpvn;
} VCPSTATUS, *LPVCPSTATUS;

#define CNFL_BACKUP		0x0001
#define CNFL_DELETEONFAILURE	0x0002
#define CNFL_RENAMEONSUCCESS	0x0004
#define CNFL_CONTINUATION	0x0008
#define CNFL_SKIPPED		0x0010
#define CNFL_IGNOREERRORS	0x0020
#define CNFL_RETRYFILE		0x0040
#define CNFL_COPIED		0x0080
#define VNFL_UNIQUE		0x0000
#define VNFL_MULTIPLEOK		0x0100
#define VNFL_DESTROYOLD		0x0200
#define VNFL_COPY		0x0000
#define VNFL_DELETE		0x0800
#define VNFL_RENAME		0x1000
#define VNFL_NODE_TYPE		(VNFL_RENAME|VNFL_DELETE|VNFL_COPY)
#define VNFL_CREATED		0x2000
#define VNFL_REJECTED		0x4000
#define VNFL_DEVICEINSTALLER	0x8000

enum {
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193
	ERR_VCP_IOFAIL = VCP_ERROR+1,
	ERR_VCP_STRINGTOOLONG,
	ERR_VCP_NOMEM,
	ERR_VCP_QUEUEFULL,
	ERR_VCP_NOVHSTR,
	ERR_VCP_OVERFLOW,
	ERR_VCP_BADARG,
	ERR_VCP_UNINIT,
	ERR_VCP_NOTFOUND,
	ERR_VCP_BUSY,
	ERR_VCP_INTERRUPTED,
	ERR_VCP_BADDEST,
	ERR_VCP_SKIPPED,
	ERR_VCP_IO,
	ERR_VCP_LOCKED,
	ERR_VCP_WRONGDISK,
	ERR_VCP_CHANGEMODE,
	ERR_VCP_LDDINVALID,
	ERR_VCP_LDDFIND,
	ERR_VCP_LDDUNINIT,
	ERR_VCP_LDDPATH_INVALID,
	ERR_VCP_NOEXPANSION,
	ERR_VCP_NOTOPEN,
	ERR_VCP_NO_DIGITAL_SIGNATURE_CATALOG,
	ERR_VCP_NO_DIGITAL_SIGNATURE_FILE
};

194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358
#define VCPN_OK		0
#define VCPN_PROCEED	0
#define VCPN_ABORT	-1
#define VCPN_RETRY	-2
#define VCPN_IGNORE	-3
#define VCPN_SKIP	-4
#define VCPN_FORCE	-5
#define VCPN_DEFER	-6
#define VCPN_FAIL	-7
#define VCPN_RETRYFILE	-8

#define VCPFL_ABANDON		0x00
#define VCPFL_BACKUP		0x01
#define VCPFL_COPY		0x02
#define VCPFL_BACKUPANDCOPY	(VCPFL_BACKUP|VCPFL_COPY)
#define VCPFL_INSPECIFIEDORDER	0x04
#define VCPFL_DELETE		0x08
#define VCPFL_RENAME		0x10
#define VCPFL_ALL		(VCPFL_COPY|VCPFL_DELETE|VCPFL_RENAME)

#define CFNL_BACKUP		0x0001
#define CFNL_DELETEONFAILURE	0x0002
#define CFNL_RENAMEONSUCCESS	0x0004
#define CFNL_CONTINUATION	0x0008
#define CFNL_SKIPPED		0x0010
#define CFNL_IGNOREERRORS	0x0020
#define CFNL_RETRYFILE		0x0040
#define CFNL_COPIED		0x0080
#define VFNL_MULTIPLEOK		0x0100
#define VFNL_DESTROYOLD		0x0200
#define VFNL_NOW		0x0400
#define VFNL_COPY		0x0000
#define VFNL_DELETE		0x0800
#define VFNL_RENAME		0x1000
#define VFNL_CREATED		0x2000
#define VFNL_REJECTED		0x4000
#define VCPM_DISKCLASS		0x01
#define VCPM_DISKFIRST		0x0100
#define VCPM_DISKLAST		0x01ff

enum {
	VCPM_DISKCREATEINFO = VCPM_DISKFIRST,
	VCPM_DISKGETINFO,
	VCPM_DISKDESTROYINFO,
	VCPM_DISKPREPINFO,
	VCPM_DISKENSURE,
	VCPM_DISKPROMPT,
	VCPM_DISKFORMATBEGIN,
	VCPM_DISKFORMATTING,
	VCPM_DISKFORMATEND
};

#define VCPM_FILEINCLASS	0x02
#define VCPM_FILEOUTCLASS	0x03
#define VCPM_FILEFIRSTIN	0x0200
#define VCPM_FILEFIRSTOUT	0x0300
#define VCPM_FILELAST		0x03ff

enum {
	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
};

#define VCPM_NODECLASS		0x04
#define VCPM_NODEFIRST		0x0400
#define VCPM_NODELAST		0x04ff

enum {
	VCPM_NODECREATE = VCPM_NODEFIRST,
	VCPM_NODEACCEPT,
	VCPM_NODEREJECT,
	VCPM_NODEDESTROY,
	VCPM_NODECHANGEDESTDIR,
	VCPM_NODECOMPARE
};

#define VCPM_TALLYCLASS		0x05
#define VCPM_TALLYFIRST		0x0500
#define VCPM_TALLYLAST		0x05ff

enum {
	VCPM_TALLYSTART = VCPM_TALLYFIRST,
	VCPM_TALLYEND,
	VCPM_TALLYFILE,
	VCPM_TALLYDISK
};

#define VCPM_VERCLASS		0x06
#define VCPM_VERFIRST		0x0600
#define VCPM_VERLAST		0x06ff

enum {
	VCPM_VERCHECK = VCPM_VERFIRST,
	VCPM_VERCHECKDONE,
	VCPM_VERRESOLVECONFLICT
};

#define VCPM_VSTATCLASS		0x07
#define VCPM_VSTATFIRST		0x0700
#define VCPM_VSTATLAST		0x07ff

enum {
	VCPM_VSTATSTART = VCPM_VSTATFIRST,
	VCPM_VSTATEND,
	VCPM_VSTATREAD,
	VCPM_VSTATWRITE,
	VCPM_VSTATNEWDISK,
	VCPM_VSTATCLOSESTART,
	VCPM_VSTATCLOSEEND,
	VCPM_VSTATBACKUPSTART,
	VCPM_VSTATBACKUPEND,
	VCPM_VSTATRENAMESTART,
	VCPM_VSTATRENAMEEND,
	VCPM_VSTATCOPYSTART,
	VCPM_VSTATCOPYEND,
	VCPM_VSTATDELETESTART,
	VCPM_VSTATDELETEEND,
	VCPM_VSTATPATHCHECKSTART,
	VCPM_VSTATPATHCHECKEND,
	VCPM_VSTATCERTIFYSTART,
	VCPM_VSTATCERTIFYEND,
	VCPM_VSTATUSERABORT,
	VCPM_VSTATYIELD
};

#define VCPM_PATHCLASS		0x08
#define VCPM_PATHFIRST		0x0800
#define VCPM_PATHLAST		0x08ff

enum {
	VCPM_BUILDPATH = VCPM_PATHFIRST,
	VCPM_UNIQUEPATH,
	VCPM_CHECKPATH
};

#define VCPM_PATCHCLASS		0x09
#define VCPM_PATCHFIRST		0x0900
#define VCPM_PATCHLAST		0x09ff

enum {
	VCPM_FILEPATCHBEFORECPY = VCPM_PATCHFIRST,
	VCPM_FILEPATCHAFTERCPY,
	VCPM_FILEPATCHINFOPEN,
	VCPM_FILEPATCHINFCLOSE
};

#define VCPM_CERTCLASS		0x0a
#define VCPM_CERTFIRST		0x0a00
#define VCPM_CERTLAST		0x0aff

enum {
	VCPM_FILECERTIFY = VCPM_CERTFIRST,
	VCPM_FILECERTIFYWARN
};

359
typedef LRESULT (CALLBACK *VIFPROC)(LPVOID lpvObj, UINT16 uMsg, WPARAM wParam, LPARAM lParam, LPARAM lparamRef);
360

361
typedef int (CALLBACK *VCPENUMPROC)(LPVIRTNODE lpvn, LPARAM lparamRef);
362 363

RETERR16 WINAPI VcpOpen16(VIFPROC vifproc, LPARAM lparamMsgRef);
364 365 366 367 368 369 370 371 372 373 374 375 376 377

/* VcpQueueCopy flags */
#define VNLP_SYSCRITICAL	0x0001
#define VNLP_SETUPCRITICAL	0x0002
#define VNLP_NOVERCHECK		0x0004
#define VNLP_FORCETEMP		0x0008
#define VNLP_IFEXISTS		0x0010
#define VNLP_KEEPNEWER		0x0020
#define VNLP_PATCHIFEXIST	0x0040
#define VNLP_NOPATCH		0x0080
#define VNLP_CATALOGCERT	0x0100
#define VNLP_NEEDCERTIFY	0x0200
#define VNLP_COPYIFEXISTS	0x0400

378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405
RETERR16 WINAPI VcpQueueCopy16(
	LPCSTR lpszSrcFileName, LPCSTR lpszDstFileName,
	LPCSTR lpszSrcDir, LPCSTR lpszDstDir,
	LOGDISKID16 ldidSrc, LOGDISKID16 ldidDst,
	LPEXPANDVTBL lpExpandVtbl,
	WORD fl, LPARAM lParam
);
RETERR16 WINAPI VcpClose16(WORD fl, LPCSTR lpszBackupDest);

/* VcpExplain flags */
enum {
	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 VcpExplain16(LPVIRTNODE lpVn, DWORD dwWhat);

406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
/****** logical disk management ******/

typedef struct _LOGDISKDESC_S { /* ldd */
	WORD        cbSize;       /* struct size */
	LOGDISKID16 ldid;         /* logical disk ID */
	LPSTR       pszPath;      /* path this descriptor points to */
	LPSTR       pszVolLabel;  /* volume label of the disk related to it */
	LPSTR       pszDiskName;  /* name of this disk */
	WORD        wVolTime;     /* modification time of volume label */
	WORD   	    wVolDate;     /* modification date */
	DWORD       dwSerNum;     /* serial number of disk */
	WORD        wFlags;
} LOGDISKDESC_S, *LPLOGDISKDESC;

/** logical disk identifiers (LDID) **/

/* predefined LDIDs */
#define LDID_PREDEF_START	0x0001
#define LDID_PREDEF_END		0x7fff

/* registry-assigned LDIDs */
#define LDID_VAR_START		0x7000
#define LDID_VAR_END		0x7fff

/* dynamically assigned LDIDs */
#define LDID_ASSIGN_START	0x8000
#define LDID_ASSIGN_END		0xbfff

Andreas Mohr's avatar
Andreas Mohr committed
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464
#define LDID_NULL		0
#define LDID_ABSOLUTE		((UINT)-1)
#define LDID_SRCPATH		1		/* setup source path */
#define LDID_SETUPTEMP		2		/* setup temp dir */
#define LDID_UNINSTALL		3		/* uninstall dir */
#define LDID_BACKUP		4		/* backup dir */
#define LDID_SETUPSCRATCH	5		/* setup scratch dir */
#define LDID_WIN		10		/* win dir */
#define LDID_SYS		11		/* win system dir */
#define LDID_IOS		12		/* win Iosubsys dir */
#define LDID_CMD		13		/* win command dir */
#define LDID_CPL		14		/* win control panel dir */
#define LDID_PRINT		15		/* win printer dir */
#define LDID_MAIL		16		/* win mail dir */
#define LDID_INF		17		/* win inf dir */
#define LDID_HELP		18		/* win help dir */
#define LDID_WINADMIN		19		/* admin dir */
#define LDID_FONTS		20		/* win fonts dir */
#define LDID_VIEWERS		21		/* win viewers dir */
#define LDID_VMM32		22		/* win VMM32 dir */
#define LDID_COLOR		23		/* win color mngment dir */
#define LDID_APPS		24		/* win apps dir */
#define LDID_SHARED		25		/* win shared dir */
#define LDID_WINBOOT		26		/* guaranteed win boot drive */
#define LDID_MACHINE		27		/* machine specific files */
#define LDID_HOST_WINBOOT	28
#define LDID_BOOT		30		/* boot drive root dir */
#define LDID_BOOT_HOST		31		/* boot drive host root dir */
#define LDID_OLD_WINBOOT	32		/* root subdir */
#define LDID_OLD_WIN		33		/* old windows dir */

465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537
/* flags for GenInstall() */
#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
#define GENINSTALL_DO_REGSRCPATH	64
#define GENINSTALL_DO_PERUSER		128

#define GEINISTALL_DO_INIREG		14
#define GENINSTALL_DO_ALL		255

/*
 * flags for InstallHinfSection()
 * 128 can be added, too. This means that the .inf file is provided by you
 * instead of being a 32 bit file (i.e. Windows .inf file).
 * In this case all files you install must be in the same dir
 * as your .inf file on the install disk.
 */
#define HOW_NEVER_REBOOT		0
#define HOW_ALWAYS_SILENT_REBOOT	1
#define HOW_ALWAYS_PROMPT_REBOOT	2
#define HOW_SILENT_REBOOT		3
#define HOW_PROMPT_REBOOT		4

/****** device installation stuff ******/

#define MAX_CLASS_NAME_LEN	32
#define MAX_DEVNODE_ID_LEN	256
#define MAX_GUID_STR		50

typedef struct _DEVICE_INFO
{
	UINT16              cbSize;
	struct _DEVICE_INFO *lpNextDi;
	char                szDescription[LINE_LEN];
	DWORD               dnDevnode;
	HKEY                hRegKey;
	char                szRegSubkey[MAX_DEVNODE_ID_LEN];
	char                szClassName[MAX_CLASS_NAME_LEN];
	DWORD               Flags;
	HWND16              hwndParent;
	/*LPDRIVER_NODE*/ LPVOID      lpCompatDrvList;
	/*LPDRIVER_NODE*/ LPVOID      lpClassDrvList;
	/*LPDRIVER_NODE*/ LPVOID      lpSelectedDriver;
	ATOM                atDriverPath;
	ATOM                atTempInfFile;
	HINSTANCE16         hinstClassInstaller;
	HINSTANCE16         hinstClassPropProvidor;
	HINSTANCE16         hinstDevicePropProvidor;
	HINSTANCE16         hinstBasicPropProvidor;
	FARPROC16           fpClassInstaller;
	FARPROC16           fpClassEnumPropPages;
	FARPROC16           fpDeviceEnumPropPages;
	FARPROC16           fpEnumBasicProperties;
	DWORD               dwSetupReserved;
	DWORD               dwClassInstallReserved;
	/*GENCALLBACKPROC*/ LPVOID     gicpGenInstallCallBack;

	LPARAM              gicplParam;
	UINT16              InfType;

	HINSTANCE16         hinstPrivateProblemHandler;
	FARPROC16           fpPrivateProblemHandler;
	LPARAM              lpClassInstallParams;
	struct _DEVICE_INFO *lpdiChildList;
	DWORD               dwFlagsEx;
	/*LPDRIVER_INFO*/ LPVOID       lpCompatDrvInfoList;
	/*LPDRIVER_INFO*/ LPVOID      lpClassDrvInfoList;
	char                szClassGUID[MAX_GUID_STR];
} DEVICE_INFO16, *LPDEVICE_INFO16, **LPLPDEVICE_INFO16;

538

539 540 541 542 543 544 545 546
extern void WINAPI GenFormStrWithoutPlaceHolders16(LPSTR,LPCSTR,HINF16);
extern RETERR16 WINAPI IpOpen16(LPCSTR,HINF16 *);
extern RETERR16 WINAPI IpClose16(HINF16);
extern RETERR16 WINAPI CtlSetLdd16(LPLOGDISKDESC);
extern RETERR16 WINAPI CtlGetLdd16(LPLOGDISKDESC);
extern RETERR16 WINAPI CtlFindLdd16(LPLOGDISKDESC);
extern RETERR16 WINAPI CtlAddLdd16(LPLOGDISKDESC);
extern RETERR16 WINAPI CtlDelLdd16(LOGDISKID16);
547
extern RETERR16 WINAPI CtlGetLddPath16(LOGDISKID16 ldid, LPSTR szPath);
548
extern RETERR16 WINAPI GenInstall16(HINF16,LPCSTR,WORD);
Andreas Mohr's avatar
Andreas Mohr committed
549

Steven Edwards's avatar
Steven Edwards committed
550 551 552 553 554 555 556 557 558 559 560 561
typedef struct tagLDD_LIST {
        LPLOGDISKDESC pldd;
        struct tagLDD_LIST *next;
} LDD_LIST;

#define INIT_LDD(ldd, LDID) \
  do { \
   memset(&(ldd), 0, sizeof(LOGDISKDESC_S)); \
   (ldd).cbSize = sizeof(LOGDISKDESC_S); \
   ldd.ldid = LDID; \
  } while(0)

Andreas Mohr's avatar
Andreas Mohr committed
562
#endif /* __SETUPX16_H */