Added regedit unit test, a couple minor changes to regedit.
[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 RETERR16 WINAPI VcpQueueCopy16(
364         LPCSTR lpszSrcFileName, LPCSTR lpszDstFileName,
365         LPCSTR lpszSrcDir, LPCSTR lpszDstDir,
366         LOGDISKID16 ldidSrc, LOGDISKID16 ldidDst,
367         LPEXPANDVTBL lpExpandVtbl,
368         WORD fl, LPARAM lParam
369 );
370 RETERR16 VcpFlush16(WORD fl, LPCSTR lpszBackupDest);
371 RETERR16 WINAPI VcpClose16(WORD fl, LPCSTR lpszBackupDest);
372
373 /* VcpExplain flags */
374 enum {
375         VCPEX_SRC_DISK,
376         VCPEX_SRC_CABINET,
377         VCPEX_SRC_LOCN,
378         VCPEX_DST_LOCN,
379         VCPEX_SRC_FILE,
380         VCPEX_DST_FILE,
381         VCPEX_DST_FILE_FINAL,
382         VCPEX_DOS_ERROR,
383         VCPEX_MESSAGE,
384         VCPEX_DOS_SOLUTION,
385         VCPEX_SRC_FULL,
386         VCPEX_DST_FULL,
387         VCPEX_DST_FULL_FINAL
388 };
389
390 LPCSTR WINAPI VcpExplain16(LPVIRTNODE lpVn, DWORD dwWhat);
391
392 /****** logical disk management ******/
393
394 typedef struct _LOGDISKDESC_S { /* ldd */
395         WORD        cbSize;       /* struct size */
396         LOGDISKID16 ldid;         /* logical disk ID */
397         LPSTR       pszPath;      /* path this descriptor points to */
398         LPSTR       pszVolLabel;  /* volume label of the disk related to it */
399         LPSTR       pszDiskName;  /* name of this disk */
400         WORD        wVolTime;     /* modification time of volume label */
401         WORD        wVolDate;     /* modification date */
402         DWORD       dwSerNum;     /* serial number of disk */
403         WORD        wFlags;
404 } LOGDISKDESC_S, *LPLOGDISKDESC;
405
406 /** logical disk identifiers (LDID) **/
407
408 /* predefined LDIDs */
409 #define LDID_PREDEF_START       0x0001
410 #define LDID_PREDEF_END         0x7fff
411
412 /* registry-assigned LDIDs */
413 #define LDID_VAR_START          0x7000
414 #define LDID_VAR_END            0x7fff
415
416 /* dynamically assigned LDIDs */
417 #define LDID_ASSIGN_START       0x8000
418 #define LDID_ASSIGN_END         0xbfff
419
420 #define LDID_NULL               0
421 #define LDID_ABSOLUTE           ((UINT)-1)
422 #define LDID_SRCPATH            1               /* setup source path */
423 #define LDID_SETUPTEMP          2               /* setup temp dir */
424 #define LDID_UNINSTALL          3               /* uninstall dir */
425 #define LDID_BACKUP             4               /* backup dir */
426 #define LDID_SETUPSCRATCH       5               /* setup scratch dir */
427 #define LDID_WIN                10              /* win dir */
428 #define LDID_SYS                11              /* win system dir */
429 #define LDID_IOS                12              /* win Iosubsys dir */
430 #define LDID_CMD                13              /* win command dir */
431 #define LDID_CPL                14              /* win control panel dir */
432 #define LDID_PRINT              15              /* win printer dir */
433 #define LDID_MAIL               16              /* win mail dir */
434 #define LDID_INF                17              /* win inf dir */
435 #define LDID_HELP               18              /* win help dir */
436 #define LDID_WINADMIN           19              /* admin dir */
437 #define LDID_FONTS              20              /* win fonts dir */
438 #define LDID_VIEWERS            21              /* win viewers dir */
439 #define LDID_VMM32              22              /* win VMM32 dir */
440 #define LDID_COLOR              23              /* win color mngment dir */
441 #define LDID_APPS               24              /* win apps dir */
442 #define LDID_SHARED             25              /* win shared dir */
443 #define LDID_WINBOOT            26              /* guaranteed win boot drive */
444 #define LDID_MACHINE            27              /* machine specific files */
445 #define LDID_HOST_WINBOOT       28
446 #define LDID_BOOT               30              /* boot drive root dir */
447 #define LDID_BOOT_HOST          31              /* boot drive host root dir */
448 #define LDID_OLD_WINBOOT        32              /* root subdir */
449 #define LDID_OLD_WIN            33              /* old windows dir */
450
451 /* flags for GenInstall() */
452 #define GENINSTALL_DO_FILES             1
453 #define GENINSTALL_DO_INI               2
454 #define GENINSTALL_DO_REG               4
455 #define GENINSTALL_DO_INI2REG           8
456 #define GENINSTALL_DO_CFGAUTO           16
457 #define GENINSTALL_DO_LOGCONFIG         32
458 #define GENINSTALL_DO_REGSRCPATH        64
459 #define GENINSTALL_DO_PERUSER           128
460
461 #define GEINISTALL_DO_INIREG            14
462 #define GENINSTALL_DO_ALL               255
463
464 /*
465  * flags for InstallHinfSection()
466  * 128 can be added, too. This means that the .inf file is provided by you
467  * instead of being a 32 bit file (i.e. Windows .inf file).
468  * In this case all files you install must be in the same dir
469  * as your .inf file on the install disk.
470  */
471 #define HOW_NEVER_REBOOT                0
472 #define HOW_ALWAYS_SILENT_REBOOT        1
473 #define HOW_ALWAYS_PROMPT_REBOOT        2
474 #define HOW_SILENT_REBOOT               3
475 #define HOW_PROMPT_REBOOT               4
476
477 /****** device installation stuff ******/
478
479 #define MAX_CLASS_NAME_LEN      32
480 #define MAX_DEVNODE_ID_LEN      256
481 #define MAX_GUID_STR            50
482
483 typedef struct _DEVICE_INFO
484 {
485         UINT16              cbSize;
486         struct _DEVICE_INFO *lpNextDi;
487         char                szDescription[LINE_LEN];
488         DWORD               dnDevnode;
489         HKEY                hRegKey;
490         char                szRegSubkey[MAX_DEVNODE_ID_LEN];
491         char                szClassName[MAX_CLASS_NAME_LEN];
492         DWORD               Flags;
493         HWND16              hwndParent;
494         /*LPDRIVER_NODE*/ LPVOID      lpCompatDrvList;
495         /*LPDRIVER_NODE*/ LPVOID      lpClassDrvList;
496         /*LPDRIVER_NODE*/ LPVOID      lpSelectedDriver;
497         ATOM                atDriverPath;
498         ATOM                atTempInfFile;
499         HINSTANCE16         hinstClassInstaller;
500         HINSTANCE16         hinstClassPropProvidor;
501         HINSTANCE16         hinstDevicePropProvidor;
502         HINSTANCE16         hinstBasicPropProvidor;
503         FARPROC16           fpClassInstaller;
504         FARPROC16           fpClassEnumPropPages;
505         FARPROC16           fpDeviceEnumPropPages;
506         FARPROC16           fpEnumBasicProperties;
507         DWORD               dwSetupReserved;
508         DWORD               dwClassInstallReserved;
509         /*GENCALLBACKPROC*/ LPVOID     gicpGenInstallCallBack;
510
511         LPARAM              gicplParam;
512         UINT16              InfType;
513
514         HINSTANCE16         hinstPrivateProblemHandler;
515         FARPROC16           fpPrivateProblemHandler;
516         LPARAM              lpClassInstallParams;
517         struct _DEVICE_INFO *lpdiChildList;
518         DWORD               dwFlagsEx;
519         /*LPDRIVER_INFO*/ LPVOID       lpCompatDrvInfoList;
520         /*LPDRIVER_INFO*/ LPVOID      lpClassDrvInfoList;
521         char                szClassGUID[MAX_GUID_STR];
522 } DEVICE_INFO16, *LPDEVICE_INFO16, **LPLPDEVICE_INFO16;
523
524
525 extern void WINAPI GenFormStrWithoutPlaceHolders16(LPSTR,LPCSTR,HINF16);
526 extern RETERR16 WINAPI IpOpen16(LPCSTR,HINF16 *);
527 extern RETERR16 WINAPI IpClose16(HINF16);
528 extern RETERR16 WINAPI CtlSetLdd16(LPLOGDISKDESC);
529 extern RETERR16 WINAPI CtlGetLdd16(LPLOGDISKDESC);
530 extern RETERR16 WINAPI CtlFindLdd16(LPLOGDISKDESC);
531 extern RETERR16 WINAPI CtlAddLdd16(LPLOGDISKDESC);
532 extern RETERR16 WINAPI CtlDelLdd16(LOGDISKID16);
533 extern RETERR16 WINAPI CtlGetLddPath16(LOGDISKID16 ldid, LPSTR szPath);
534 extern RETERR16 WINAPI GenInstall16(HINF16,LPCSTR,WORD);
535
536 #endif /* __SETUPX16_H */