Fix signature of SHLWAPI_334 as its string parameter really is an
[wine] / dlls / setupapi / setupx16.h
1 /*
2  * Copyright 2000 Andreas Mohr for Codeweavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #ifndef __SETUPX16_H
20 #define __SETUPX16_H
21
22 #include "wine/windef16.h"
23
24 typedef UINT16 HINF16;
25 typedef UINT16 LOGDISKID16;
26 typedef UINT16 VHSTR;
27
28 #define LINE_LEN        256
29
30 /* error codes stuff */
31
32 typedef UINT16 RETERR16;
33 #define OK              0
34 #define IP_ERROR        (UINT16)100
35 #define TP_ERROR        (UINT16)200
36 #define VCP_ERROR       (UINT16)300
37 #define GEN_ERROR       (UINT16)400
38 #define DI_ERROR        (UINT16)500
39
40 enum {
41         ERR_IP_INVALID_FILENAME = IP_ERROR+1,
42         ERR_IP_ALLOC_ERR,
43         ERR_IP_INVALID_SECT_NAME,
44         ERR_IP_OUT_OF_HANDLES,
45         ERR_IP_INF_NOT_FOUND,
46         ERR_IP_INVALID_INFFILE,
47         ERR_IP_INVALID_HINF,
48         ERR_IP_INVALID_FIELD,
49         ERR_IP_SECT_NOT_FOUND,
50         ERR_IP_END_OF_SECTION,
51         ERR_IP_PROFILE_NOT_FOUND,
52         ERR_IP_LINE_NOT_FOUND,
53         ERR_IP_FILEREAD,
54         ERR_IP_TOOMANYINFFILES,
55         ERR_IP_INVALID_SAVERESTORE,
56         ERR_IP_INVALID_INFTYPE
57 };
58
59 /****** virtual copy operations ******/
60
61 typedef DWORD LPEXPANDVTBL;
62
63 typedef struct {
64         DWORD           dwSoFar;
65         DWORD           dwTotal;
66 } VCPPROGRESS, *LPVCPPROGRESS;
67
68 typedef struct {
69         WORD            cbSize;
70         LOGDISKID16     ldid;
71         VHSTR           vhstrRoot;
72         VHSTR           vhstrVolumeLabel;
73         VHSTR           vhstrDiskName;
74         WORD            wVolumeTime;
75         WORD            wVolumeDate;
76         DWORD           dwSerialNumber;
77         WORD            fl;
78         LPARAM          lparamRef;
79
80         VCPPROGRESS     prgFileRead;
81         VCPPROGRESS     prgByteRead;
82
83         VCPPROGRESS     prgFileWrite;
84         VCPPROGRESS     prgByteWrite;
85 } VCPDISKINFO, *LPVCPDISKINFO;
86
87 typedef struct {
88         LOGDISKID16     ldid;
89         VHSTR           vhstrDir;
90         VHSTR           vhstrFileName;
91 } VCPFILESPEC, *LPVCPFILESPEC;
92
93 typedef struct {
94         UINT16          uiMDate;
95         UINT16          uiMTime;
96         UINT16          uiADate;
97         UINT16          uiATime;
98         UINT16          uiAttr;
99         DWORD           llenIn;
100         DWORD           llenOut;
101 } VCPFATTR, *LPVCPFATTR;
102
103 typedef struct {
104         UINT16          uDate;
105         UINT16          uTime;
106         DWORD           dwSize;
107 } VCPFILESTAT, *LPVCPFILESTAT;
108
109 typedef struct
110 {
111         HFILE16         hFileSrc;
112         HFILE16         hFileDst;
113         VCPFATTR        fAttr;
114         WORD            dosError;
115         VHSTR           vhstrFileName;
116         WPARAM          vcpm;
117 } VIRTNODEEX, *LPVIRTNODEEX;
118
119 typedef struct {
120         WORD            cbSize;
121         VCPFILESPEC     vfsSrc;
122         VCPFILESPEC     vfsDst;
123         WORD            fl;
124         LPARAM          lParam;
125         LPEXPANDVTBL    lpExpandVtbl;
126         LPVIRTNODEEX    lpvnex;
127         VHSTR           vhstrDstFinalName;
128         VCPFILESTAT     vFileStat;
129 } VIRTNODE, *LPVIRTNODE;
130
131 typedef struct {
132         WORD            cbSize;
133         VCPPROGRESS     prgDiskRead;
134         VCPPROGRESS     prgFileRead;
135         VCPPROGRESS     prgByteRead;
136
137         VCPPROGRESS     prgDiskWrite;
138         VCPPROGRESS     prgFileWrite;
139         VCPPROGRESS     prgByteWrite;
140
141         LPVCPDISKINFO   lpvdiIn;
142         LPVCPDISKINFO   lpvdiOut;
143         LPVIRTNODE      lpvn;
144 } VCPSTATUS, *LPVCPSTATUS;
145
146 #define CNFL_BACKUP             0x0001
147 #define CNFL_DELETEONFAILURE    0x0002
148 #define CNFL_RENAMEONSUCCESS    0x0004
149 #define CNFL_CONTINUATION       0x0008
150 #define CNFL_SKIPPED            0x0010
151 #define CNFL_IGNOREERRORS       0x0020
152 #define CNFL_RETRYFILE          0x0040
153 #define CNFL_COPIED             0x0080
154 #define VNFL_UNIQUE             0x0000
155 #define VNFL_MULTIPLEOK         0x0100
156 #define VNFL_DESTROYOLD         0x0200
157 #define VNFL_COPY               0x0000
158 #define VNFL_DELETE             0x0800
159 #define VNFL_RENAME             0x1000
160 #define VNFL_NODE_TYPE          (VNFL_RENAME|VNFL_DELETE|VNFL_COPY)
161 #define VNFL_CREATED            0x2000
162 #define VNFL_REJECTED           0x4000
163 #define VNFL_DEVICEINSTALLER    0x8000
164
165 enum {
166         ERR_VCP_IOFAIL = VCP_ERROR+1,
167         ERR_VCP_STRINGTOOLONG,
168         ERR_VCP_NOMEM,
169         ERR_VCP_QUEUEFULL,
170         ERR_VCP_NOVHSTR,
171         ERR_VCP_OVERFLOW,
172         ERR_VCP_BADARG,
173         ERR_VCP_UNINIT,
174         ERR_VCP_NOTFOUND,
175         ERR_VCP_BUSY,
176         ERR_VCP_INTERRUPTED,
177         ERR_VCP_BADDEST,
178         ERR_VCP_SKIPPED,
179         ERR_VCP_IO,
180         ERR_VCP_LOCKED,
181         ERR_VCP_WRONGDISK,
182         ERR_VCP_CHANGEMODE,
183         ERR_VCP_LDDINVALID,
184         ERR_VCP_LDDFIND,
185         ERR_VCP_LDDUNINIT,
186         ERR_VCP_LDDPATH_INVALID,
187         ERR_VCP_NOEXPANSION,
188         ERR_VCP_NOTOPEN,
189         ERR_VCP_NO_DIGITAL_SIGNATURE_CATALOG,
190         ERR_VCP_NO_DIGITAL_SIGNATURE_FILE
191 };
192
193 #define VCPN_OK         0
194 #define VCPN_PROCEED    0
195 #define VCPN_ABORT      -1
196 #define VCPN_RETRY      -2
197 #define VCPN_IGNORE     -3
198 #define VCPN_SKIP       -4
199 #define VCPN_FORCE      -5
200 #define VCPN_DEFER      -6
201 #define VCPN_FAIL       -7
202 #define VCPN_RETRYFILE  -8
203
204 #define VCPFL_ABANDON           0x00
205 #define VCPFL_BACKUP            0x01
206 #define VCPFL_COPY              0x02
207 #define VCPFL_BACKUPANDCOPY     (VCPFL_BACKUP|VCPFL_COPY)
208 #define VCPFL_INSPECIFIEDORDER  0x04
209 #define VCPFL_DELETE            0x08
210 #define VCPFL_RENAME            0x10
211 #define VCPFL_ALL               (VCPFL_COPY|VCPFL_DELETE|VCPFL_RENAME)
212
213 #define CFNL_BACKUP             0x0001
214 #define CFNL_DELETEONFAILURE    0x0002
215 #define CFNL_RENAMEONSUCCESS    0x0004
216 #define CFNL_CONTINUATION       0x0008
217 #define CFNL_SKIPPED            0x0010
218 #define CFNL_IGNOREERRORS       0x0020
219 #define CFNL_RETRYFILE          0x0040
220 #define CFNL_COPIED             0x0080
221 #define VFNL_MULTIPLEOK         0x0100
222 #define VFNL_DESTROYOLD         0x0200
223 #define VFNL_NOW                0x0400
224 #define VFNL_COPY               0x0000
225 #define VFNL_DELETE             0x0800
226 #define VFNL_RENAME             0x1000
227 #define VFNL_CREATED            0x2000
228 #define VFNL_REJECTED           0x4000
229 #define VCPM_DISKCLASS          0x01
230 #define VCPM_DISKFIRST          0x0100
231 #define VCPM_DISKLAST           0x01ff
232
233 enum {
234         VCPM_DISKCREATEINFO = VCPM_DISKFIRST,
235         VCPM_DISKGETINFO,
236         VCPM_DISKDESTROYINFO,
237         VCPM_DISKPREPINFO,
238         VCPM_DISKENSURE,
239         VCPM_DISKPROMPT,
240         VCPM_DISKFORMATBEGIN,
241         VCPM_DISKFORMATTING,
242         VCPM_DISKFORMATEND
243 };
244
245 #define VCPM_FILEINCLASS        0x02
246 #define VCPM_FILEOUTCLASS       0x03
247 #define VCPM_FILEFIRSTIN        0x0200
248 #define VCPM_FILEFIRSTOUT       0x0300
249 #define VCPM_FILELAST           0x03ff
250
251 enum {
252         VCPM_FILEOPENIN = VCPM_FILEFIRSTIN,
253         VCPM_FILEGETFATTR,
254         VCPM_FILECLOSEIN,
255         VCPM_FILECOPY,
256         VCPM_FILENEEDED,
257
258         VCPM_FILEOPENOUT = VCPM_FILEFIRSTOUT,
259         VCPM_FILESETFATTR,
260         VCPM_FILECLOSEOUT,
261         VCPM_FILEFINALIZE,
262         VCPM_FILEDELETE,
263         VCPM_FILERENAME
264 };
265
266 #define VCPM_NODECLASS          0x04
267 #define VCPM_NODEFIRST          0x0400
268 #define VCPM_NODELAST           0x04ff
269
270 enum {
271         VCPM_NODECREATE = VCPM_NODEFIRST,
272         VCPM_NODEACCEPT,
273         VCPM_NODEREJECT,
274         VCPM_NODEDESTROY,
275         VCPM_NODECHANGEDESTDIR,
276         VCPM_NODECOMPARE
277 };
278
279 #define VCPM_TALLYCLASS         0x05
280 #define VCPM_TALLYFIRST         0x0500
281 #define VCPM_TALLYLAST          0x05ff
282
283 enum {
284         VCPM_TALLYSTART = VCPM_TALLYFIRST,
285         VCPM_TALLYEND,
286         VCPM_TALLYFILE,
287         VCPM_TALLYDISK
288 };
289
290 #define VCPM_VERCLASS           0x06
291 #define VCPM_VERFIRST           0x0600
292 #define VCPM_VERLAST            0x06ff
293
294 enum {
295         VCPM_VERCHECK = VCPM_VERFIRST,
296         VCPM_VERCHECKDONE,
297         VCPM_VERRESOLVECONFLICT
298 };
299
300 #define VCPM_VSTATCLASS         0x07
301 #define VCPM_VSTATFIRST         0x0700
302 #define VCPM_VSTATLAST          0x07ff
303
304 enum {
305         VCPM_VSTATSTART = VCPM_VSTATFIRST,
306         VCPM_VSTATEND,
307         VCPM_VSTATREAD,
308         VCPM_VSTATWRITE,
309         VCPM_VSTATNEWDISK,
310         VCPM_VSTATCLOSESTART,
311         VCPM_VSTATCLOSEEND,
312         VCPM_VSTATBACKUPSTART,
313         VCPM_VSTATBACKUPEND,
314         VCPM_VSTATRENAMESTART,
315         VCPM_VSTATRENAMEEND,
316         VCPM_VSTATCOPYSTART,
317         VCPM_VSTATCOPYEND,
318         VCPM_VSTATDELETESTART,
319         VCPM_VSTATDELETEEND,
320         VCPM_VSTATPATHCHECKSTART,
321         VCPM_VSTATPATHCHECKEND,
322         VCPM_VSTATCERTIFYSTART,
323         VCPM_VSTATCERTIFYEND,
324         VCPM_VSTATUSERABORT,
325         VCPM_VSTATYIELD
326 };
327
328 #define VCPM_PATHCLASS          0x08
329 #define VCPM_PATHFIRST          0x0800
330 #define VCPM_PATHLAST           0x08ff
331
332 enum {
333         VCPM_BUILDPATH = VCPM_PATHFIRST,
334         VCPM_UNIQUEPATH,
335         VCPM_CHECKPATH
336 };
337
338 #define VCPM_PATCHCLASS         0x09
339 #define VCPM_PATCHFIRST         0x0900
340 #define VCPM_PATCHLAST          0x09ff
341
342 enum {
343         VCPM_FILEPATCHBEFORECPY = VCPM_PATCHFIRST,
344         VCPM_FILEPATCHAFTERCPY,
345         VCPM_FILEPATCHINFOPEN,
346         VCPM_FILEPATCHINFCLOSE
347 };
348
349 #define VCPM_CERTCLASS          0x0a
350 #define VCPM_CERTFIRST          0x0a00
351 #define VCPM_CERTLAST           0x0aff
352
353 enum {
354         VCPM_FILECERTIFY = VCPM_CERTFIRST,
355         VCPM_FILECERTIFYWARN
356 };
357
358 typedef LRESULT (CALLBACK *VIFPROC)(LPVOID lpvObj, UINT16 uMsg, WPARAM wParam, LPARAM lParam, LPARAM lparamRef);
359
360 typedef int (CALLBACK *VCPENUMPROC)(LPVIRTNODE lpvn, LPARAM lparamRef);
361
362 RETERR16 WINAPI VcpOpen16(VIFPROC vifproc, LPARAM lparamMsgRef);
363
364 /* VcpQueueCopy flags */
365 #define VNLP_SYSCRITICAL        0x0001
366 #define VNLP_SETUPCRITICAL      0x0002
367 #define VNLP_NOVERCHECK         0x0004
368 #define VNLP_FORCETEMP          0x0008
369 #define VNLP_IFEXISTS           0x0010
370 #define VNLP_KEEPNEWER          0x0020
371 #define VNLP_PATCHIFEXIST       0x0040
372 #define VNLP_NOPATCH            0x0080
373 #define VNLP_CATALOGCERT        0x0100
374 #define VNLP_NEEDCERTIFY        0x0200
375 #define VNLP_COPYIFEXISTS       0x0400
376
377 RETERR16 WINAPI VcpQueueCopy16(
378         LPCSTR lpszSrcFileName, LPCSTR lpszDstFileName,
379         LPCSTR lpszSrcDir, LPCSTR lpszDstDir,
380         LOGDISKID16 ldidSrc, LOGDISKID16 ldidDst,
381         LPEXPANDVTBL lpExpandVtbl,
382         WORD fl, LPARAM lParam
383 );
384 RETERR16 VcpFlush16(WORD fl, LPCSTR lpszBackupDest);
385 RETERR16 WINAPI VcpClose16(WORD fl, LPCSTR lpszBackupDest);
386
387 /* VcpExplain flags */
388 enum {
389         VCPEX_SRC_DISK,
390         VCPEX_SRC_CABINET,
391         VCPEX_SRC_LOCN,
392         VCPEX_DST_LOCN,
393         VCPEX_SRC_FILE,
394         VCPEX_DST_FILE,
395         VCPEX_DST_FILE_FINAL,
396         VCPEX_DOS_ERROR,
397         VCPEX_MESSAGE,
398         VCPEX_DOS_SOLUTION,
399         VCPEX_SRC_FULL,
400         VCPEX_DST_FULL,
401         VCPEX_DST_FULL_FINAL
402 };
403
404 LPCSTR WINAPI VcpExplain16(LPVIRTNODE lpVn, DWORD dwWhat);
405
406 /****** logical disk management ******/
407
408 typedef struct _LOGDISKDESC_S { /* ldd */
409         WORD        cbSize;       /* struct size */
410         LOGDISKID16 ldid;         /* logical disk ID */
411         LPSTR       pszPath;      /* path this descriptor points to */
412         LPSTR       pszVolLabel;  /* volume label of the disk related to it */
413         LPSTR       pszDiskName;  /* name of this disk */
414         WORD        wVolTime;     /* modification time of volume label */
415         WORD        wVolDate;     /* modification date */
416         DWORD       dwSerNum;     /* serial number of disk */
417         WORD        wFlags;
418 } LOGDISKDESC_S, *LPLOGDISKDESC;
419
420 /** logical disk identifiers (LDID) **/
421
422 /* predefined LDIDs */
423 #define LDID_PREDEF_START       0x0001
424 #define LDID_PREDEF_END         0x7fff
425
426 /* registry-assigned LDIDs */
427 #define LDID_VAR_START          0x7000
428 #define LDID_VAR_END            0x7fff
429
430 /* dynamically assigned LDIDs */
431 #define LDID_ASSIGN_START       0x8000
432 #define LDID_ASSIGN_END         0xbfff
433
434 #define LDID_NULL               0
435 #define LDID_ABSOLUTE           ((UINT)-1)
436 #define LDID_SRCPATH            1               /* setup source path */
437 #define LDID_SETUPTEMP          2               /* setup temp dir */
438 #define LDID_UNINSTALL          3               /* uninstall dir */
439 #define LDID_BACKUP             4               /* backup dir */
440 #define LDID_SETUPSCRATCH       5               /* setup scratch dir */
441 #define LDID_WIN                10              /* win dir */
442 #define LDID_SYS                11              /* win system dir */
443 #define LDID_IOS                12              /* win Iosubsys dir */
444 #define LDID_CMD                13              /* win command dir */
445 #define LDID_CPL                14              /* win control panel dir */
446 #define LDID_PRINT              15              /* win printer dir */
447 #define LDID_MAIL               16              /* win mail dir */
448 #define LDID_INF                17              /* win inf dir */
449 #define LDID_HELP               18              /* win help dir */
450 #define LDID_WINADMIN           19              /* admin dir */
451 #define LDID_FONTS              20              /* win fonts dir */
452 #define LDID_VIEWERS            21              /* win viewers dir */
453 #define LDID_VMM32              22              /* win VMM32 dir */
454 #define LDID_COLOR              23              /* win color mngment dir */
455 #define LDID_APPS               24              /* win apps dir */
456 #define LDID_SHARED             25              /* win shared dir */
457 #define LDID_WINBOOT            26              /* guaranteed win boot drive */
458 #define LDID_MACHINE            27              /* machine specific files */
459 #define LDID_HOST_WINBOOT       28
460 #define LDID_BOOT               30              /* boot drive root dir */
461 #define LDID_BOOT_HOST          31              /* boot drive host root dir */
462 #define LDID_OLD_WINBOOT        32              /* root subdir */
463 #define LDID_OLD_WIN            33              /* old windows dir */
464
465 /* flags for GenInstall() */
466 #define GENINSTALL_DO_FILES             1
467 #define GENINSTALL_DO_INI               2
468 #define GENINSTALL_DO_REG               4
469 #define GENINSTALL_DO_INI2REG           8
470 #define GENINSTALL_DO_CFGAUTO           16
471 #define GENINSTALL_DO_LOGCONFIG         32
472 #define GENINSTALL_DO_REGSRCPATH        64
473 #define GENINSTALL_DO_PERUSER           128
474
475 #define GEINISTALL_DO_INIREG            14
476 #define GENINSTALL_DO_ALL               255
477
478 /*
479  * flags for InstallHinfSection()
480  * 128 can be added, too. This means that the .inf file is provided by you
481  * instead of being a 32 bit file (i.e. Windows .inf file).
482  * In this case all files you install must be in the same dir
483  * as your .inf file on the install disk.
484  */
485 #define HOW_NEVER_REBOOT                0
486 #define HOW_ALWAYS_SILENT_REBOOT        1
487 #define HOW_ALWAYS_PROMPT_REBOOT        2
488 #define HOW_SILENT_REBOOT               3
489 #define HOW_PROMPT_REBOOT               4
490
491 /****** device installation stuff ******/
492
493 #define MAX_CLASS_NAME_LEN      32
494 #define MAX_DEVNODE_ID_LEN      256
495 #define MAX_GUID_STR            50
496
497 typedef struct _DEVICE_INFO
498 {
499         UINT16              cbSize;
500         struct _DEVICE_INFO *lpNextDi;
501         char                szDescription[LINE_LEN];
502         DWORD               dnDevnode;
503         HKEY                hRegKey;
504         char                szRegSubkey[MAX_DEVNODE_ID_LEN];
505         char                szClassName[MAX_CLASS_NAME_LEN];
506         DWORD               Flags;
507         HWND16              hwndParent;
508         /*LPDRIVER_NODE*/ LPVOID      lpCompatDrvList;
509         /*LPDRIVER_NODE*/ LPVOID      lpClassDrvList;
510         /*LPDRIVER_NODE*/ LPVOID      lpSelectedDriver;
511         ATOM                atDriverPath;
512         ATOM                atTempInfFile;
513         HINSTANCE16         hinstClassInstaller;
514         HINSTANCE16         hinstClassPropProvidor;
515         HINSTANCE16         hinstDevicePropProvidor;
516         HINSTANCE16         hinstBasicPropProvidor;
517         FARPROC16           fpClassInstaller;
518         FARPROC16           fpClassEnumPropPages;
519         FARPROC16           fpDeviceEnumPropPages;
520         FARPROC16           fpEnumBasicProperties;
521         DWORD               dwSetupReserved;
522         DWORD               dwClassInstallReserved;
523         /*GENCALLBACKPROC*/ LPVOID     gicpGenInstallCallBack;
524
525         LPARAM              gicplParam;
526         UINT16              InfType;
527
528         HINSTANCE16         hinstPrivateProblemHandler;
529         FARPROC16           fpPrivateProblemHandler;
530         LPARAM              lpClassInstallParams;
531         struct _DEVICE_INFO *lpdiChildList;
532         DWORD               dwFlagsEx;
533         /*LPDRIVER_INFO*/ LPVOID       lpCompatDrvInfoList;
534         /*LPDRIVER_INFO*/ LPVOID      lpClassDrvInfoList;
535         char                szClassGUID[MAX_GUID_STR];
536 } DEVICE_INFO16, *LPDEVICE_INFO16, **LPLPDEVICE_INFO16;
537
538
539 extern void WINAPI GenFormStrWithoutPlaceHolders16(LPSTR,LPCSTR,HINF16);
540 extern RETERR16 WINAPI IpOpen16(LPCSTR,HINF16 *);
541 extern RETERR16 WINAPI IpClose16(HINF16);
542 extern RETERR16 WINAPI CtlSetLdd16(LPLOGDISKDESC);
543 extern RETERR16 WINAPI CtlGetLdd16(LPLOGDISKDESC);
544 extern RETERR16 WINAPI CtlFindLdd16(LPLOGDISKDESC);
545 extern RETERR16 WINAPI CtlAddLdd16(LPLOGDISKDESC);
546 extern RETERR16 WINAPI CtlDelLdd16(LOGDISKID16);
547 extern RETERR16 WINAPI CtlGetLddPath16(LOGDISKID16 ldid, LPSTR szPath);
548 extern RETERR16 WINAPI GenInstall16(HINF16,LPCSTR,WORD);
549
550 #endif /* __SETUPX16_H */