SpacePoint Fusion plugin 1.0

hid/setupapi.h

00001 /*++
00002 
00003 Copyright (c) 1995-1997 Microsoft Corporation
00004 
00005 Module Name:
00006 
00007     setupapi.h
00008 
00009 Abstract:
00010 
00011     Public header file for Windows NT Setup services Dll.
00012 
00013 Revision History:
00014 
00015 --*/
00016 
00017 #ifndef _INC_SETUPAPI
00018 #define _INC_SETUPAPI
00019 
00020 //
00021 // Define API decoration for direct importing of DLL references.
00022 //
00023 #if !defined(_SETUPAPI_)
00024 #define WINSETUPAPI DECLSPEC_IMPORT
00025 #else
00026 #define WINSETUPAPI
00027 #endif
00028 
00029 #include <pshpack1.h>   // Assume byte packing throughout
00030 
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034 
00035 #ifndef __LPGUID_DEFINED__
00036 #define __LPGUID_DEFINED__
00037 typedef GUID *LPGUID;
00038 #endif
00039 
00040 //
00041 // Include commctrl.h for our use of HIMAGELIST and wizard support.
00042 //
00043 #include <commctrl.h>
00044 
00045 
00046 //
00047 // Define maximum string length constants as specified by
00048 // Windows 95.
00049 //
00050 #define LINE_LEN                    256 // Win95-compatible maximum for displayable
00051                                         // strings coming from a device INF.
00052 #define MAX_INF_STRING_LENGTH      4096 // Actual maximum size of an INF string (including
00053                                         // string substitutions).
00054 #define MAX_TITLE_LEN                60
00055 #define MAX_INSTRUCTION_LEN         256
00056 #define MAX_LABEL_LEN                30
00057 #define MAX_SERVICE_NAME_LEN        256
00058 
00059 //
00060 // Define maximum length of a machine name in the format expected by ConfigMgr32
00061 // CM_Connect_Machine (i.e., "\\\\MachineName\0").
00062 //
00063 #define SP_MAX_MACHINENAME_LENGTH   (MAX_COMPUTERNAME_LENGTH + 3)
00064 
00065 //
00066 // Define type for reference to loaded inf file
00067 //
00068 typedef PVOID HINF;
00069 
00070 //
00071 // Inf context structure. Applications must not interpret or
00072 // overwrite values in these structures.
00073 //
00074 typedef struct _INFCONTEXT {
00075     PVOID Inf;
00076     PVOID CurrentInf;
00077     UINT Section;
00078     UINT Line;
00079 } INFCONTEXT, *PINFCONTEXT;
00080 
00081 //
00082 // Inf file information structure.
00083 //
00084 typedef struct _SP_INF_INFORMATION {
00085     DWORD InfStyle;
00086     DWORD InfCount;
00087     BYTE VersionData[ANYSIZE_ARRAY];
00088 } SP_INF_INFORMATION, *PSP_INF_INFORMATION;
00089 
00090 //
00091 // SP_INF_INFORMATION.InfStyle values
00092 //
00093 #define INF_STYLE_NONE  0       // unrecognized or non-existent
00094 #define INF_STYLE_OLDNT 1       // winnt 3.x
00095 #define INF_STYLE_WIN4  2       // Win95
00096 
00097 //
00098 // Target directory specs.
00099 //
00100 #define DIRID_ABSOLUTE          -1              // real 32-bit -1
00101 #define DIRID_ABSOLUTE_16BIT     0xffff         // 16-bit -1 for compat w/setupx
00102 #define DIRID_NULL               0
00103 #define DIRID_SRCPATH            1
00104 #define DIRID_WINDOWS           10
00105 #define DIRID_SYSTEM            11              // system32
00106 #define DIRID_DRIVERS           12
00107 #define DIRID_IOSUBSYS          DIRID_DRIVERS
00108 #define DIRID_INF               17
00109 #define DIRID_HELP              18
00110 #define DIRID_FONTS             20
00111 #define DIRID_VIEWERS           21
00112 #define DIRID_COLOR             23
00113 #define DIRID_APPS              24
00114 #define DIRID_SHARED            25
00115 #define DIRID_BOOT              30
00116 
00117 #define DIRID_SYSTEM16          50
00118 #define DIRID_SPOOL             51
00119 #define DIRID_SPOOLDRIVERS      52
00120 #define DIRID_USERPROFILE       53
00121 #define DIRID_LOADER            54
00122 #define DIRID_PRINTPROCESSOR    55
00123 
00124 #define DIRID_DEFAULT           DIRID_SYSTEM
00125 
00126 //
00127 // First user-definable dirid. See SetupSetDirectoryId().
00128 //
00129 #define DIRID_USER              0x8000
00130 
00131 
00132 //
00133 // Setup callback notification routine type
00134 //
00135 typedef UINT (CALLBACK* PSP_FILE_CALLBACK_A)(
00136     IN PVOID Context,
00137     IN UINT Notification,
00138     IN UINT Param1,
00139     IN UINT Param2
00140     );
00141 
00142 typedef UINT (CALLBACK* PSP_FILE_CALLBACK_W)(
00143     IN PVOID Context,
00144     IN UINT Notification,
00145     IN UINT Param1,
00146     IN UINT Param2
00147     );
00148 
00149 #ifdef UNICODE
00150 #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
00151 #else
00152 #define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
00153 #endif
00154 
00155 
00156 //
00157 // Operation/queue start/end notification. These are ordinal values.
00158 //
00159 #define SPFILENOTIFY_STARTQUEUE         0x00000001
00160 #define SPFILENOTIFY_ENDQUEUE           0x00000002
00161 #define SPFILENOTIFY_STARTSUBQUEUE      0x00000003
00162 #define SPFILENOTIFY_ENDSUBQUEUE        0x00000004
00163 #define SPFILENOTIFY_STARTDELETE        0x00000005
00164 #define SPFILENOTIFY_ENDDELETE          0x00000006
00165 #define SPFILENOTIFY_DELETEERROR        0x00000007
00166 #define SPFILENOTIFY_STARTRENAME        0x00000008
00167 #define SPFILENOTIFY_ENDRENAME          0x00000009
00168 #define SPFILENOTIFY_RENAMEERROR        0x0000000a
00169 #define SPFILENOTIFY_STARTCOPY          0x0000000b
00170 #define SPFILENOTIFY_ENDCOPY            0x0000000c
00171 #define SPFILENOTIFY_COPYERROR          0x0000000d
00172 #define SPFILENOTIFY_NEEDMEDIA          0x0000000e
00173 #define SPFILENOTIFY_QUEUESCAN          0x0000000f
00174 //
00175 // These are used with SetupIterateCabinet().
00176 //
00177 #define SPFILENOTIFY_CABINETINFO        0x00000010
00178 #define SPFILENOTIFY_FILEINCABINET      0x00000011
00179 #define SPFILENOTIFY_NEEDNEWCABINET     0x00000012
00180 #define SPFILENOTIFY_FILEEXTRACTED      0x00000013
00181 
00182 #define SPFILENOTIFY_FILEOPDELAYED      0x00000014
00183 
00184 //
00185 // Copy notification. These are bit flags that may be combined.
00186 //
00187 #define SPFILENOTIFY_LANGMISMATCH       0x00010000
00188 #define SPFILENOTIFY_TARGETEXISTS       0x00020000
00189 #define SPFILENOTIFY_TARGETNEWER        0x00040000
00190 
00191 //
00192 // File operation codes and callback outcomes.
00193 //
00194 #define FILEOP_COPY                     0
00195 #define FILEOP_RENAME                   1
00196 #define FILEOP_DELETE                   2
00197 
00198 #define FILEOP_ABORT                    0
00199 #define FILEOP_DOIT                     1
00200 #define FILEOP_SKIP                     2
00201 #define FILEOP_RETRY                    FILEOP_DOIT
00202 #define FILEOP_NEWPATH                  4
00203 
00204 //
00205 // Flags in inf copy sections
00206 //
00207 #define COPYFLG_WARN_IF_SKIP            0x00000001      // warn if user tries to skip file
00208 #define COPYFLG_NOSKIP                  0x00000002      // disallow skipping this file
00209 #define COPYFLG_NOVERSIONCHECK          0x00000004      // ignore versions and overwrite target
00210 #define COPYFLG_FORCE_FILE_IN_USE       0x00000008      // force file-in-use behavior
00211 #define COPYFLG_NO_OVERWRITE            0x00000010      // do not copy if file exists on target
00212 #define COPYFLG_NO_VERSION_DIALOG       0x00000020      // do not copy if target is newer
00213 #define COPYFLG_OVERWRITE_OLDER_ONLY    0x00000040      // leave target alone if version same as source
00214 #define COPYFLG_REPLACEONLY             0x00000400      // copy only if file exists on target
00215 
00216 //
00217 // Flags in inf delete sections
00218 // New flags go in high word
00219 //
00220 #define DELFLG_IN_USE                   0x00000001      // queue in-use file for delete
00221 #define DELFLG_IN_USE1                  0x00010000      // high-word version of DELFLG_IN_USE
00222 
00223 //
00224 // Source and file paths. Used when notifying queue callback
00225 // of SPFILENOTIFY_STARTxxx, SPFILENOTIFY_ENDxxx, and SPFILENOTIFY_xxxERROR.
00226 //
00227 typedef struct _FILEPATHS_A {
00228     PCSTR  Target;
00229     PCSTR  Source;  // not used for delete operations
00230     UINT   Win32Error;
00231     DWORD  Flags;   // such as SP_COPY_NOSKIP for copy errors
00232 } FILEPATHS_A, *PFILEPATHS_A;
00233 
00234 typedef struct _FILEPATHS_W {
00235     PCWSTR Target;
00236     PCWSTR Source;  // not used for delete operations
00237     UINT   Win32Error;
00238     DWORD  Flags;   // such as SP_COPY_NOSKIP for copy errors
00239 } FILEPATHS_W, *PFILEPATHS_W;
00240 
00241 #ifdef UNICODE
00242 typedef FILEPATHS_W FILEPATHS;
00243 typedef PFILEPATHS_W PFILEPATHS;
00244 #else
00245 typedef FILEPATHS_A FILEPATHS;
00246 typedef PFILEPATHS_A PFILEPATHS;
00247 #endif
00248 
00249 
00250 //
00251 // Structure used with SPFILENOTIFY_NEEDMEDIA
00252 //
00253 typedef struct _SOURCE_MEDIA_A {
00254     PCSTR Reserved;
00255     PCSTR Tagfile;          // may be NULL
00256     PCSTR Description;
00257     //
00258     // Pathname part and filename part of source file
00259     // that caused us to need the media.
00260     //
00261     PCSTR SourcePath;
00262     PCSTR SourceFile;
00263     DWORD Flags;            // subset of SP_COPY_xxx
00264 } SOURCE_MEDIA_A, *PSOURCE_MEDIA_A;
00265 
00266 typedef struct _SOURCE_MEDIA_W {
00267     PCWSTR Reserved;
00268     PCWSTR Tagfile;         // may be NULL
00269     PCWSTR Description;
00270     //
00271     // Pathname part and filename part of source file
00272     // that caused us to need the media.
00273     //
00274     PCWSTR SourcePath;
00275     PCWSTR SourceFile;
00276     DWORD  Flags;           // subset of SP_COPY_xxx
00277 } SOURCE_MEDIA_W, *PSOURCE_MEDIA_W;
00278 
00279 #ifdef UNICODE
00280 typedef SOURCE_MEDIA_W SOURCE_MEDIA;
00281 typedef PSOURCE_MEDIA_W PSOURCE_MEDIA;
00282 #else
00283 typedef SOURCE_MEDIA_A SOURCE_MEDIA;
00284 typedef PSOURCE_MEDIA_A PSOURCE_MEDIA;
00285 #endif
00286 
00287 //
00288 // Structure used with SPFILENOTIFY_CABINETINFO and
00289 // SPFILENOTIFY_NEEDNEWCABINET
00290 //
00291 typedef struct _CABINET_INFO_A {
00292     PCSTR CabinetPath;
00293     PCSTR CabinetFile;
00294     PCSTR DiskName;
00295     USHORT SetId;
00296     USHORT CabinetNumber;
00297 } CABINET_INFO_A, *PCABINET_INFO_A;
00298 
00299 typedef struct _CABINET_INFO_W {
00300     PCWSTR CabinetPath;
00301     PCWSTR CabinetFile;
00302     PCWSTR DiskName;
00303     USHORT SetId;
00304     USHORT CabinetNumber;
00305 } CABINET_INFO_W, *PCABINET_INFO_W;
00306 
00307 #ifdef UNICODE
00308 typedef CABINET_INFO_W CABINET_INFO;
00309 typedef PCABINET_INFO_W PCABINET_INFO;
00310 #else
00311 typedef CABINET_INFO_A CABINET_INFO;
00312 typedef PCABINET_INFO_A PCABINET_INFO;
00313 #endif
00314 
00315 //
00316 // Structure used with SPFILENOTIFY_FILEINCABINET
00317 //
00318 typedef struct _FILE_IN_CABINET_INFO_A {
00319     PCSTR NameInCabinet;
00320     DWORD FileSize;
00321     DWORD Win32Error;
00322     WORD  DosDate;
00323     WORD  DosTime;
00324     WORD  DosAttribs;
00325     CHAR  FullTargetName[MAX_PATH];
00326 } FILE_IN_CABINET_INFO_A, *PFILE_IN_CABINET_INFO_A;
00327 
00328 typedef struct _FILE_IN_CABINET_INFO_W {
00329     PCWSTR NameInCabinet;
00330     DWORD  FileSize;
00331     DWORD  Win32Error;
00332     WORD   DosDate;
00333     WORD   DosTime;
00334     WORD   DosAttribs;
00335     WCHAR  FullTargetName[MAX_PATH];
00336 } FILE_IN_CABINET_INFO_W, *PFILE_IN_CABINET_INFO_W;
00337 
00338 #ifdef UNICODE
00339 typedef FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO;
00340 typedef PFILE_IN_CABINET_INFO_W PFILE_IN_CABINET_INFO;
00341 #else
00342 typedef FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO;
00343 typedef PFILE_IN_CABINET_INFO_A PFILE_IN_CABINET_INFO;
00344 #endif
00345 
00346 
00347 //
00348 // Define type for setup file queue
00349 //
00350 typedef PVOID HSPFILEQ;
00351 
00352 //
00353 // Define type for setup disk space list
00354 //
00355 typedef PVOID HDSKSPC;
00356 
00357 //
00358 // Define type for reference to device information set
00359 //
00360 typedef PVOID HDEVINFO;
00361 
00362 //
00363 // Device information structure (references a device instance
00364 // that is a member of a device information set)
00365 //
00366 typedef struct _SP_DEVINFO_DATA {
00367     DWORD cbSize;
00368     GUID  ClassGuid;
00369     DWORD DevInst;    // DEVINST handle
00370     DWORD Reserved;
00371 } SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;
00372 
00373 //
00374 // Device interface information structure (references a device
00375 // interface that is associated with the device information
00376 // element that owns it).
00377 //
00378 typedef struct _SP_DEVICE_INTERFACE_DATA {
00379     DWORD cbSize;
00380     GUID  InterfaceClassGuid;
00381     DWORD Flags;
00382     DWORD Reserved;
00383 } SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;
00384 
00385 //
00386 // Flags for SP_DEVICE_INTERFACE_DATA.Flags field.
00387 //
00388 #define SPINT_ACTIVE  0x00000001
00389 #define SPINT_DEFAULT 0x00000002
00390 #define SPINT_REMOVED 0x00000004
00391 
00392 //
00393 // Backward compatibility--do not use.
00394 //
00395 typedef SP_DEVICE_INTERFACE_DATA  SP_INTERFACE_DEVICE_DATA;
00396 typedef PSP_DEVICE_INTERFACE_DATA PSP_INTERFACE_DEVICE_DATA;
00397 #define SPID_ACTIVE               SPINT_ACTIVE
00398 #define SPID_DEFAULT              SPINT_DEFAULT
00399 #define SPID_REMOVED              SPINT_REMOVED
00400 
00401 
00402 typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_A {
00403     DWORD  cbSize;
00404     CHAR   DevicePath[ANYSIZE_ARRAY];
00405 } SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;
00406 
00407 typedef struct _SP_DEVICE_INTERFACE_DETAIL_DATA_W {
00408     DWORD  cbSize;
00409     WCHAR  DevicePath[ANYSIZE_ARRAY];
00410 } SP_DEVICE_INTERFACE_DETAIL_DATA_W, *PSP_DEVICE_INTERFACE_DETAIL_DATA_W;
00411 
00412 #ifdef UNICODE
00413 typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA;
00414 typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_DEVICE_INTERFACE_DETAIL_DATA;
00415 #else
00416 typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA;
00417 typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_DEVICE_INTERFACE_DETAIL_DATA;
00418 #endif
00419 
00420 //
00421 // Backward compatibility--do not use.
00422 //
00423 typedef SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W;
00424 typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA_W;
00425 typedef SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A;
00426 typedef PSP_DEVICE_INTERFACE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA_A;
00427 #ifdef UNICODE
00428 typedef SP_INTERFACE_DEVICE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA;
00429 typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_W PSP_INTERFACE_DEVICE_DETAIL_DATA;
00430 #else
00431 typedef SP_INTERFACE_DEVICE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA;
00432 typedef PSP_INTERFACE_DEVICE_DETAIL_DATA_A PSP_INTERFACE_DEVICE_DETAIL_DATA;
00433 #endif
00434 
00435 
00436 //
00437 // Structure for detailed information on a device information set (used for
00438 // SetupDiGetDeviceInfoListDetail which supercedes the functionality of
00439 // SetupDiGetDeviceInfoListClass).
00440 //
00441 typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_A {
00442     DWORD  cbSize;
00443     GUID   ClassGuid;
00444     HANDLE RemoteMachineHandle;
00445     CHAR   RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
00446 } SP_DEVINFO_LIST_DETAIL_DATA_A, *PSP_DEVINFO_LIST_DETAIL_DATA_A;
00447 
00448 typedef struct _SP_DEVINFO_LIST_DETAIL_DATA_W {
00449     DWORD  cbSize;
00450     GUID   ClassGuid;
00451     HANDLE RemoteMachineHandle;
00452     WCHAR  RemoteMachineName[SP_MAX_MACHINENAME_LENGTH];
00453 } SP_DEVINFO_LIST_DETAIL_DATA_W, *PSP_DEVINFO_LIST_DETAIL_DATA_W;
00454 
00455 #ifdef UNICODE
00456 typedef SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA;
00457 typedef PSP_DEVINFO_LIST_DETAIL_DATA_W PSP_DEVINFO_LIST_DETAIL_DATA;
00458 #else
00459 typedef SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA;
00460 typedef PSP_DEVINFO_LIST_DETAIL_DATA_A PSP_DEVINFO_LIST_DETAIL_DATA;
00461 #endif
00462 
00463 
00464 //
00465 // Class installer function codes
00466 //
00467 #define DIF_SELECTDEVICE            0x00000001
00468 #define DIF_INSTALLDEVICE           0x00000002
00469 #define DIF_ASSIGNRESOURCES         0x00000003
00470 #define DIF_PROPERTIES              0x00000004
00471 #define DIF_REMOVE                  0x00000005
00472 #define DIF_FIRSTTIMESETUP          0x00000006
00473 #define DIF_FOUNDDEVICE             0x00000007
00474 #define DIF_SELECTCLASSDRIVERS      0x00000008
00475 #define DIF_VALIDATECLASSDRIVERS    0x00000009
00476 #define DIF_INSTALLCLASSDRIVERS     0x0000000A
00477 #define DIF_CALCDISKSPACE           0x0000000B
00478 #define DIF_DESTROYPRIVATEDATA      0x0000000C
00479 #define DIF_VALIDATEDRIVER          0x0000000D
00480 #define DIF_MOVEDEVICE              0x0000000E
00481 #define DIF_DETECT                  0x0000000F
00482 #define DIF_INSTALLWIZARD           0x00000010
00483 #define DIF_DESTROYWIZARDDATA       0x00000011
00484 #define DIF_PROPERTYCHANGE          0x00000012
00485 #define DIF_ENABLECLASS             0x00000013
00486 #define DIF_DETECTVERIFY            0x00000014
00487 #define DIF_INSTALLDEVICEFILES      0x00000015
00488 #define DIF_UNREMOVE                0x00000016
00489 #define DIF_SELECTBESTCOMPATDRV     0x00000017
00490 #define DIF_ALLOW_INSTALL           0x00000018
00491 #define DIF_REGISTERDEVICE          0x00000019
00492 #define DIF_INSTALLINTERFACES       0x00000020
00493 #define DIF_DETECTCANCEL            0x00000021
00494 #define DIF_REGISTER_COINSTALLERS   0x00000022
00495 
00496 typedef UINT        DI_FUNCTION;    // Function type for device installer
00497 
00498 
00499 //
00500 // Device installation parameters structure (associated with a
00501 // particular device information element, or globally with a device
00502 // information set)
00503 //
00504 typedef struct _SP_DEVINSTALL_PARAMS_A {
00505     DWORD             cbSize;
00506     DWORD             Flags;
00507     DWORD             FlagsEx;
00508     HWND              hwndParent;
00509     PSP_FILE_CALLBACK InstallMsgHandler;
00510     PVOID             InstallMsgHandlerContext;
00511     HSPFILEQ          FileQueue;
00512     DWORD             ClassInstallReserved;
00513     DWORD             Reserved;
00514     CHAR              DriverPath[MAX_PATH];
00515 } SP_DEVINSTALL_PARAMS_A, *PSP_DEVINSTALL_PARAMS_A;
00516 
00517 typedef struct _SP_DEVINSTALL_PARAMS_W {
00518     DWORD             cbSize;
00519     DWORD             Flags;
00520     DWORD             FlagsEx;
00521     HWND              hwndParent;
00522     PSP_FILE_CALLBACK InstallMsgHandler;
00523     PVOID             InstallMsgHandlerContext;
00524     HSPFILEQ          FileQueue;
00525     DWORD             ClassInstallReserved;
00526     DWORD             Reserved;
00527     WCHAR             DriverPath[MAX_PATH];
00528 } SP_DEVINSTALL_PARAMS_W, *PSP_DEVINSTALL_PARAMS_W;
00529 
00530 #ifdef UNICODE
00531 typedef SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS;
00532 typedef PSP_DEVINSTALL_PARAMS_W PSP_DEVINSTALL_PARAMS;
00533 #else
00534 typedef SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS;
00535 typedef PSP_DEVINSTALL_PARAMS_A PSP_DEVINSTALL_PARAMS;
00536 #endif
00537 
00538 
00539 //
00540 // SP_DEVINSTALL_PARAMS.Flags values
00541 //
00542 // Flags for choosing a device
00543 //
00544 #define DI_SHOWOEM                  0x00000001L     // support Other... button
00545 #define DI_SHOWCOMPAT               0x00000002L     // show compatibility list
00546 #define DI_SHOWCLASS                0x00000004L     // show class list
00547 #define DI_SHOWALL                  0x00000007L     // both class & compat list shown
00548 #define DI_NOVCP                    0x00000008L     // don't create a new copy queue--use
00549                                                     // caller-supplied FileQueue
00550 #define DI_DIDCOMPAT                0x00000010L     // Searched for compatible devices
00551 #define DI_DIDCLASS                 0x00000020L     // Searched for class devices
00552 #define DI_AUTOASSIGNRES            0x00000040L     // No UI for resources if possible
00553 
00554 // flags returned by DiInstallDevice to indicate need to reboot/restart
00555 #define DI_NEEDRESTART              0x00000080L     // Reboot required to take effect
00556 #define DI_NEEDREBOOT               0x00000100L     // ""
00557 
00558 // flags for device installation
00559 #define DI_NOBROWSE                 0x00000200L     // no Browse... in InsertDisk
00560 
00561 // Flags set by DiBuildDriverInfoList
00562 #define DI_MULTMFGS                 0x00000400L     // Set if multiple manufacturers in
00563                                                     // class driver list
00564 
00565 // Flag indicates that device is disabled
00566 #define DI_DISABLED                 0x00000800L     // Set if device disabled
00567 
00568 // Flags for Device/Class Properties
00569 #define DI_GENERALPAGE_ADDED        0x00001000L
00570 #define DI_RESOURCEPAGE_ADDED       0x00002000L
00571 
00572 // Flag to indicate the setting properties for this Device (or class) caused a change
00573 // so the Dev Mgr UI probably needs to be updatd.
00574 #define DI_PROPERTIES_CHANGE        0x00004000L
00575 
00576 // Flag to indicate that the sorting from the INF file should be used.
00577 #define DI_INF_IS_SORTED            0x00008000L
00578 
00579 // Flag to indicate that only the the INF specified by SP_DEVINSTALL_PARAMS.DriverPath
00580 // should be searched.
00581 #define DI_ENUMSINGLEINF            0x00010000L
00582 
00583 // Flag that prevents ConfigMgr from removing/re-enumerating devices during device
00584 // registration, installation, and deletion.
00585 #define DI_DONOTCALLCONFIGMG        0x00020000L
00586 
00587 // The following flag can be used to install a device disabled
00588 #define DI_INSTALLDISABLED          0x00040000L
00589 
00590 // Flag that causes SetupDiBuildDriverInfoList to build a device's compatible driver
00591 // list from its existing class driver list, instead of the normal INF search.
00592 #define DI_COMPAT_FROM_CLASS        0x00080000L
00593 
00594 // This flag is set if the Class Install params should be used.
00595 #define DI_CLASSINSTALLPARAMS       0x00100000L
00596 
00597 // This flag is set if the caller of DiCallClassInstaller does NOT
00598 // want the internal default action performed if the Class installer
00599 // returns ERROR_DI_DO_DEFAULT.
00600 #define DI_NODI_DEFAULTACTION       0x00200000L
00601 
00602 // The setupx flag, DI_NOSYNCPROCESSING (0x00400000L) is not support in the Setup APIs.
00603 
00604 // flags for device installation
00605 #define DI_QUIETINSTALL             0x00800000L     // don't confuse the user with
00606                                                     // questions or excess info
00607 #define DI_NOFILECOPY               0x01000000L     // No file Copy necessary
00608 #define DI_FORCECOPY                0x02000000L     // Force files to be copied from install path
00609 #define DI_DRIVERPAGE_ADDED         0x04000000L     // Prop provider added Driver page.
00610 #define DI_USECI_SELECTSTRINGS      0x08000000L     // Use Class Installer Provided strings in the Select Device Dlg
00611 #define DI_OVERRIDE_INFFLAGS        0x10000000L     // Override INF flags
00612 #define DI_PROPS_NOCHANGEUSAGE      0x20000000L     // No Enable/Disable in General Props
00613 
00614 #define DI_NOSELECTICONS            0x40000000L     // No small icons in select device dialogs
00615 
00616 #define DI_NOWRITE_IDS              0x80000000L     // Don't write HW & Compat IDs on install
00617 
00618 
00619 //
00620 // SP_DEVINSTALL_PARAMS.FlagsEx values
00621 //
00622 #define DI_FLAGSEX_USEOLDINFSEARCH      0x00000001L  // Inf Search functions should not use Index Search
00623 #define DI_FLAGSEX_AUTOSELECTRANK0      0x00000002L  // SetupDiSelectDevice doesn't prompt user if rank 0 match
00624 #define DI_FLAGSEX_CI_FAILED            0x00000004L  // Failed to Load/Call class installer
00625 
00626 #define DI_FLAGSEX_DIDINFOLIST          0x00000010L  // Did the Class Info List
00627 #define DI_FLAGSEX_DIDCOMPATINFO        0x00000020L  // Did the Compat Info List
00628 
00629 #define DI_FLAGSEX_FILTERCLASSES        0x00000040L
00630 #define DI_FLAGSEX_SETFAILEDINSTALL     0x00000080L
00631 #define DI_FLAGSEX_DEVICECHANGE         0x00000100L
00632 #define DI_FLAGSEX_ALWAYSWRITEIDS       0x00000200L
00633 #define DI_FLAGSEX_ALLOWEXCLUDEDDRVS    0x00000800L
00634 #define DI_FLAGSEX_NOUIONQUERYREMOVE    0x00001000L
00635 #define DI_FLAGSEX_USECLASSFORCOMPAT    0x00002000L  // Use the device's class when building compat drv list.
00636                                                      // (Ignored if DI_COMPAT_FROM_CLASS flag is specified.)
00637 #define DI_FLAGSEX_OLDINF_IN_CLASSLIST  0x00004000L  // Search legacy INFs when building class driver list.
00638 #define DI_FLAGSEX_NO_DRVREG_MODIFY     0x00008000L  // Don't run AddReg and DelReg for device's software (driver) key.
00639 #define DI_FLAGSEX_IN_SYSTEM_SETUP      0x00010000L  // Installation is occurring during initial system setup.
00640 #define DI_FLAGSEX_INET_DRIVER          0x00020000L  // Driver came from Windows Update
00641 #define DI_FLAGSEX_APPENDDRIVERLIST     0x00040000L  // Cause SetupDiBuildDriverInfoList to append
00642                                                      // a new driver list to an existing list.
00643 
00644 
00645 //
00646 // Class installation parameters header.  This must be the first field of any class install
00647 // parameter structure.  The InstallFunction field must be set to the function code
00648 // corresponding to the structure, and the cbSize field must be set to the size of the
00649 // header structure.  E.g.,
00650 //
00651 // SP_ENABLECLASS_PARAMS EnableClassParams;
00652 //
00653 // EnableClassParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
00654 // EnableClassParams.ClassInstallHeader.InstallFunction = DIF_ENABLECLASS;
00655 //
00656 typedef struct _SP_CLASSINSTALL_HEADER {
00657     DWORD       cbSize;
00658     DI_FUNCTION InstallFunction;
00659 } SP_CLASSINSTALL_HEADER, *PSP_CLASSINSTALL_HEADER;
00660 
00661 
00662 //
00663 // Structure corresponding to a DIF_ENABLECLASS install function.
00664 //
00665 typedef struct _SP_ENABLECLASS_PARAMS {
00666     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00667     GUID                   ClassGuid;
00668     DWORD                  EnableMessage;
00669 } SP_ENABLECLASS_PARAMS, *PSP_ENABLECLASS_PARAMS;
00670 
00671 #define ENABLECLASS_QUERY   0
00672 #define ENABLECLASS_SUCCESS 1
00673 #define ENABLECLASS_FAILURE 2
00674 
00675 
00676 //
00677 // Structure corresponding to a DIF_MOVEDEVICE install function.
00678 //
00679 typedef struct _SP_MOVEDEV_PARAMS {
00680     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00681     SP_DEVINFO_DATA        SourceDeviceInfoData;
00682 } SP_MOVEDEV_PARAMS, *PSP_MOVEDEV_PARAMS;
00683 
00684 
00685 //
00686 // Values indicating a change in a device's state
00687 //
00688 #define DICS_ENABLE      0x00000001
00689 #define DICS_DISABLE     0x00000002
00690 #define DICS_PROPCHANGE  0x00000003
00691 #define DICS_START       0x00000004
00692 #define DICS_STOP        0x00000005
00693 //
00694 // Values specifying the scope of a device property change
00695 //
00696 #define DICS_FLAG_GLOBAL         0x00000001  // make change in all hardware profiles
00697 #define DICS_FLAG_CONFIGSPECIFIC 0x00000002  // make change in specified profile only
00698 #define DICS_FLAG_CONFIGGENERAL  0x00000004  // 1 or more hardware profile-specific
00699                                              // changes to follow.
00700 //
00701 // Structure corresponding to a DIF_PROPERTYCHANGE install function.
00702 //
00703 typedef struct _SP_PROPCHANGE_PARAMS {
00704     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00705     DWORD                  StateChange;
00706     DWORD                  Scope;
00707     DWORD                  HwProfile;
00708 } SP_PROPCHANGE_PARAMS, *PSP_PROPCHANGE_PARAMS;
00709 
00710 
00711 //
00712 // Structure corresponding to a DIF_REMOVE install function.
00713 //
00714 typedef struct _SP_REMOVEDEVICE_PARAMS {
00715     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00716     DWORD Scope;
00717     DWORD HwProfile;
00718 } SP_REMOVEDEVICE_PARAMS, *PSP_REMOVEDEVICE_PARAMS;
00719 
00720 #define DI_REMOVEDEVICE_GLOBAL                  0x00000001
00721 #define DI_REMOVEDEVICE_CONFIGSPECIFIC          0x00000002
00722 
00723 
00724 //
00725 // Structure corresponding to a DIF_UNREMOVE install function.
00726 //
00727 typedef struct _SP_UNREMOVEDEVICE_PARAMS {
00728     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00729     DWORD Scope;
00730     DWORD HwProfile;
00731 } SP_UNREMOVEDEVICE_PARAMS, *PSP_UNREMOVEDEVICE_PARAMS;
00732 
00733 #define DI_UNREMOVEDEVICE_CONFIGSPECIFIC        0x00000002
00734 
00735 
00736 //
00737 // Structure corresponding to a DIF_SELECTDEVICE install function.
00738 //
00739 typedef struct _SP_SELECTDEVICE_PARAMS_A {
00740     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00741     CHAR                   Title[MAX_TITLE_LEN];
00742     CHAR                   Instructions[MAX_INSTRUCTION_LEN];
00743     CHAR                   ListLabel[MAX_LABEL_LEN];
00744     BYTE                   Reserved[2];                  // DWORD size alignment
00745 } SP_SELECTDEVICE_PARAMS_A, *PSP_SELECTDEVICE_PARAMS_A;
00746 
00747 typedef struct _SP_SELECTDEVICE_PARAMS_W {
00748     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00749     WCHAR                  Title[MAX_TITLE_LEN];
00750     WCHAR                  Instructions[MAX_INSTRUCTION_LEN];
00751     WCHAR                  ListLabel[MAX_LABEL_LEN];
00752 } SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
00753 
00754 #ifdef UNICODE
00755 typedef SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS;
00756 typedef PSP_SELECTDEVICE_PARAMS_W PSP_SELECTDEVICE_PARAMS;
00757 #else
00758 typedef SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS;
00759 typedef PSP_SELECTDEVICE_PARAMS_A PSP_SELECTDEVICE_PARAMS;
00760 #endif
00761 
00762 
00763 //
00764 // Structure corresponding to a DIF_DETECT install function.
00765 //
00766 
00767 typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)(
00768      IN PVOID ProgressNotifyParam,
00769      IN DWORD DetectComplete
00770      );
00771 
00772 // where:
00773 //     ProgressNotifyParam - value supplied by caller requesting detection.
00774 //     DetectComplete - Percent completion, to be incremented by class
00775 //                      installer, as it steps thru its detection.
00776 //
00777 // Return Value - If TRUE, then detection is cancelled.  Allows caller
00778 //                requesting detection to stop detection asap.
00779 //
00780 
00781 typedef struct _SP_DETECTDEVICE_PARAMS {
00782     SP_CLASSINSTALL_HEADER  ClassInstallHeader;
00783     PDETECT_PROGRESS_NOTIFY DetectProgressNotify;
00784     PVOID                   ProgressNotifyParam;
00785 } SP_DETECTDEVICE_PARAMS, *PSP_DETECTDEVICE_PARAMS;
00786 
00787 
00788 //
00789 // 'Add New Device' installation wizard structure
00790 //
00791 // Structure corresponding to a DIF_INSTALLWIZARD install function.
00792 // (NOTE: This structure is also applicable for DIF_DESTROYWIZARDDATA,
00793 // but DIF_INSTALLWIZARD is the associated function code in the class
00794 // installation parameter structure in both cases.)
00795 //
00796 // Define maximum number of dynamic wizard pages that can be added to
00797 // hardware install wizard.
00798 //
00799 #define MAX_INSTALLWIZARD_DYNAPAGES             20
00800 
00801 typedef struct _SP_INSTALLWIZARD_DATA {
00802     SP_CLASSINSTALL_HEADER ClassInstallHeader;
00803     DWORD                  Flags;
00804     HPROPSHEETPAGE         DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES];
00805     DWORD                  NumDynamicPages;
00806     DWORD                  DynamicPageFlags;
00807     DWORD                  PrivateFlags;
00808     LPARAM                 PrivateData;
00809     HWND                   hwndWizardDlg;
00810 } SP_INSTALLWIZARD_DATA, *PSP_INSTALLWIZARD_DATA;
00811 
00812 //
00813 // SP_INSTALLWIZARD_DATA.Flags values
00814 //
00815 #define NDW_INSTALLFLAG_DIDFACTDEFS         0x00000001
00816 #define NDW_INSTALLFLAG_HARDWAREALLREADYIN  0x00000002
00817 #define NDW_INSTALLFLAG_NEEDRESTART         DI_NEEDRESTART
00818 #define NDW_INSTALLFLAG_NEEDREBOOT          DI_NEEDREBOOT
00819 #define NDW_INSTALLFLAG_NEEDSHUTDOWN        0x00000200
00820 #define NDW_INSTALLFLAG_EXPRESSINTRO        0x00000400
00821 #define NDW_INSTALLFLAG_SKIPISDEVINSTALLED  0x00000800
00822 #define NDW_INSTALLFLAG_NODETECTEDDEVS      0x00001000
00823 #define NDW_INSTALLFLAG_INSTALLSPECIFIC     0x00002000
00824 #define NDW_INSTALLFLAG_SKIPCLASSLIST       0x00004000
00825 #define NDW_INSTALLFLAG_CI_PICKED_OEM       0x00008000
00826 #define NDW_INSTALLFLAG_PCMCIAMODE          0x00010000
00827 #define NDW_INSTALLFLAG_PCMCIADEVICE        0x00020000
00828 #define NDW_INSTALLFLAG_USERCANCEL          0x00040000
00829 #define NDW_INSTALLFLAG_KNOWNCLASS          0x00080000
00830 
00831 
00832 //
00833 // SP_INSTALLWIZARD_DATA.DynamicPageFlags values
00834 //
00835 // This flag is set if a Class installer has added pages to the
00836 // install wizard.
00837 //
00838 #define DYNAWIZ_FLAG_PAGESADDED             0x00000001
00839 
00840 //
00841 // The following flags will control the button states when displaying
00842 // the InstallDetectedDevs dialog.
00843 //
00844 #define DYNAWIZ_FLAG_INSTALLDET_NEXT        0x00000002
00845 #define DYNAWIZ_FLAG_INSTALLDET_PREV        0x00000004
00846 
00847 // Set this flag if you jump to the analyze page, and want it to
00848 // handle conflicts for you.  NOTE.  You will not get control back
00849 // in the event of a conflict if you set this flag.
00850 //
00851 // BUGBUG (lonnym): Not currently implemented!
00852 //
00853 #define DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT 0x00000008
00854 
00855 //
00856 // Define wizard page resource IDs to be used when adding custom pages
00857 // to the hardware install wizard.
00858 //
00859 // Resource ID for the first page that the install wizard will go to after
00860 // adding the class installer pages.
00861 //
00862 #define IDD_DYNAWIZ_FIRSTPAGE                   10000
00863 
00864 //
00865 // Resource ID for the page that the Select Device page will go back to.
00866 //
00867 #define IDD_DYNAWIZ_SELECT_PREVPAGE             10001
00868 
00869 //
00870 // Resource ID for the page that the Select Device page will go forward to.
00871 //
00872 #define IDD_DYNAWIZ_SELECT_NEXTPAGE             10002
00873 
00874 //
00875 // Resource ID for the page that the Analyze dialog should go back to
00876 // This will only be used in the event that there is a problem, and the user
00877 // selects Back from the analyze proc.
00878 //
00879 #define IDD_DYNAWIZ_ANALYZE_PREVPAGE            10003
00880 
00881 //
00882 // Resource ID for the page that the Analyze dialog should go to if it
00883 // continue from the analyze proc.  the wAnalyzeResult in the INSTALLDATA
00884 // struct will contain the anaysis results.
00885 //
00886 #define IDD_DYNAWIZ_ANALYZE_NEXTPAGE            10004
00887 
00888 //
00889 // Resource ID for that page that the Install detected devices page will go
00890 // back to.
00891 //
00892 #define IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE    10006
00893 
00894 //
00895 // Resource ID for the page that the Install detected devices page will go
00896 // forward to.
00897 //
00898 #define IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE    10007
00899 
00900 //
00901 // Resource ID for the page that the Install detected devices page will go
00902 // to in the event that no devices are detected.
00903 //
00904 #define IDD_DYNAWIZ_INSTALLDETECTED_NODEVS      10008
00905 
00906 //
00907 // Resource ID of the hardware install wizard's select device page.
00908 // This ID can be used to go directly to the hardware install wizard's select
00909 // device page.
00910 //
00911 #define IDD_DYNAWIZ_SELECTDEV_PAGE              10009
00912 
00913 //
00914 // Resource ID of the hardware install wizard's device analysis page.
00915 // This ID can be use to go directly to the hardware install wizard's analysis
00916 // page.
00917 //
00918 #define IDD_DYNAWIZ_ANALYZEDEV_PAGE             10010
00919 
00920 //
00921 // Resource ID of the hardware install wizard's install detected devices page.
00922 // This ID can be use to go directly to the hardware install wizard's install
00923 // detected devices page.
00924 //
00925 #define IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE    10011
00926 
00927 //
00928 // Resource ID of the hardware install wizard's select class page.
00929 // This ID can be use to go directly to the hardware install wizard's select
00930 // class page.
00931 //
00932 #define IDD_DYNAWIZ_SELECTCLASS_PAGE            10012
00933 
00934 
00935 //
00936 // Driver information structure (member of a driver info list that may be associated
00937 // with a particular device instance, or (globally) with a device information set)
00938 //
00939 typedef struct _SP_DRVINFO_DATA_A {
00940     DWORD cbSize;
00941     DWORD DriverType;
00942     DWORD Reserved;
00943     CHAR  Description[LINE_LEN];
00944     CHAR  MfgName[LINE_LEN];
00945     CHAR  ProviderName[LINE_LEN];
00946 } SP_DRVINFO_DATA_A, *PSP_DRVINFO_DATA_A;
00947 
00948 typedef struct _SP_DRVINFO_DATA_W {
00949     DWORD cbSize;
00950     DWORD DriverType;
00951     DWORD Reserved;
00952     WCHAR Description[LINE_LEN];
00953     WCHAR MfgName[LINE_LEN];
00954     WCHAR ProviderName[LINE_LEN];
00955 } SP_DRVINFO_DATA_W, *PSP_DRVINFO_DATA_W;
00956 
00957 #ifdef UNICODE
00958 typedef SP_DRVINFO_DATA_W SP_DRVINFO_DATA;
00959 typedef PSP_DRVINFO_DATA_W PSP_DRVINFO_DATA;
00960 #else
00961 typedef SP_DRVINFO_DATA_A SP_DRVINFO_DATA;
00962 typedef PSP_DRVINFO_DATA_A PSP_DRVINFO_DATA;
00963 #endif
00964 
00965 
00966 //
00967 // Driver information details structure (provides detailed information about a
00968 // particular driver information structure)
00969 //
00970 typedef struct _SP_DRVINFO_DETAIL_DATA_A {
00971     DWORD    cbSize;
00972     FILETIME InfDate;
00973     DWORD    CompatIDsOffset;
00974     DWORD    CompatIDsLength;
00975     DWORD    Reserved;
00976     CHAR     SectionName[LINE_LEN];
00977     CHAR     InfFileName[MAX_PATH];
00978     CHAR     DrvDescription[LINE_LEN];
00979     CHAR     HardwareID[ANYSIZE_ARRAY];
00980 } SP_DRVINFO_DETAIL_DATA_A, *PSP_DRVINFO_DETAIL_DATA_A;
00981 
00982 typedef struct _SP_DRVINFO_DETAIL_DATA_W {
00983     DWORD    cbSize;
00984     FILETIME InfDate;
00985     DWORD    CompatIDsOffset;
00986     DWORD    CompatIDsLength;
00987     DWORD    Reserved;
00988     WCHAR    SectionName[LINE_LEN];
00989     WCHAR    InfFileName[MAX_PATH];
00990     WCHAR    DrvDescription[LINE_LEN];
00991     WCHAR    HardwareID[ANYSIZE_ARRAY];
00992 } SP_DRVINFO_DETAIL_DATA_W, *PSP_DRVINFO_DETAIL_DATA_W;
00993 
00994 #ifdef UNICODE
00995 typedef SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA;
00996 typedef PSP_DRVINFO_DETAIL_DATA_W PSP_DRVINFO_DETAIL_DATA;
00997 #else
00998 typedef SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA;
00999 typedef PSP_DRVINFO_DETAIL_DATA_A PSP_DRVINFO_DETAIL_DATA;
01000 #endif
01001 
01002 
01003 //
01004 // Driver installation parameters (associated with a particular driver
01005 // information element)
01006 //
01007 typedef struct _SP_DRVINSTALL_PARAMS {
01008     DWORD cbSize;
01009     DWORD Rank;
01010     DWORD Flags;
01011     DWORD PrivateData;
01012     DWORD Reserved;
01013 } SP_DRVINSTALL_PARAMS, *PSP_DRVINSTALL_PARAMS;
01014 
01015 //
01016 // SP_DRVINSTALL_PARAMS.Flags values
01017 //
01018 #define DNF_DUPDESC         0x00000001   // Multiple providers have same desc
01019 #define DNF_OLDDRIVER       0x00000002   // Driver node specifies old/current driver
01020 #define DNF_EXCLUDEFROMLIST 0x00000004   // If set, this driver node will not be
01021                                          // displayed in any driver select dialogs.
01022 #define DNF_NODRIVER        0x00000008   // if we want to install no driver
01023                                          // (e.g no mouse drv)
01024 #define DNF_LEGACYINF       0x00000010   // this driver node comes from an old-style INF
01025 
01026 
01027 //
01028 // Setup callback routine for comparing detection signatures
01029 //
01030 typedef DWORD (CALLBACK* PSP_DETSIG_CMPPROC)(
01031     IN HDEVINFO         DeviceInfoSet,
01032     IN PSP_DEVINFO_DATA NewDeviceData,
01033     IN PSP_DEVINFO_DATA ExistingDeviceData,
01034     IN PVOID            CompareContext      OPTIONAL
01035     );
01036 
01037 
01038 //
01039 // Define context structure handed to co-installers
01040 //
01041 typedef struct _COINSTALLER_CONTEXT_DATA {
01042     BOOL  PostProcessing;
01043     DWORD InstallResult;
01044     PVOID PrivateData;
01045 } COINSTALLER_CONTEXT_DATA, *PCOINSTALLER_CONTEXT_DATA;
01046 
01047 
01048 //
01049 // Structure containing class image list information.
01050 //
01051 typedef struct _SP_CLASSIMAGELIST_DATA {
01052     DWORD      cbSize;
01053     HIMAGELIST ImageList;
01054     DWORD      Reserved;
01055 } SP_CLASSIMAGELIST_DATA, *PSP_CLASSIMAGELIST_DATA;
01056 
01057 
01058 //
01059 // Structure to be passed as first parameter (LPVOID lpv) to ExtensionPropSheetPageProc
01060 // entry point in setupapi.dll or to "EnumPropPages32" or "BasicProperties32" entry
01061 // points provided by class/device property page providers.  Used to retrieve a handle
01062 // (or, potentially, multiple handles) to property pages for a specified property page type.
01063 //
01064 typedef struct _SP_PROPSHEETPAGE_REQUEST {
01065     DWORD            cbSize;
01066     DWORD            PageRequested;
01067     HDEVINFO         DeviceInfoSet;
01068     PSP_DEVINFO_DATA DeviceInfoData;
01069 } SP_PROPSHEETPAGE_REQUEST, *PSP_PROPSHEETPAGE_REQUEST;
01070 
01071 //
01072 // Property sheet codes used in SP_PROPSHEETPAGE_REQUEST.PageRequested
01073 //
01074 #define SPPSR_SELECT_DEVICE_RESOURCES      1    // supplied by setupapi.dll
01075 #define SPPSR_ENUM_BASIC_DEVICE_PROPERTIES 2    // supplied by device's BasicProperties32 provider
01076 #define SPPSR_ENUM_ADV_DEVICE_PROPERTIES   3    // supplied by class and/or device's EnumPropPages32 provider
01077 
01078 
01079 //
01080 // Setupapi-specific error codes
01081 //
01082 // Inf parse outcomes
01083 //
01084 #define ERROR_EXPECTED_SECTION_NAME  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0)
01085 #define ERROR_BAD_SECTION_NAME_LINE  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|1)
01086 #define ERROR_SECTION_NAME_TOO_LONG  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|2)
01087 #define ERROR_GENERAL_SYNTAX         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|3)
01088 //
01089 // Inf runtime errors
01090 //
01091 #define ERROR_WRONG_INF_STYLE        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x100)
01092 #define ERROR_SECTION_NOT_FOUND      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x101)
01093 #define ERROR_LINE_NOT_FOUND         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x102)
01094 //
01095 // Device Installer errors
01096 //
01097 #define ERROR_NO_ASSOCIATED_CLASS         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x200)
01098 #define ERROR_CLASS_MISMATCH              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x201)
01099 #define ERROR_DUPLICATE_FOUND             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x202)
01100 #define ERROR_NO_DRIVER_SELECTED          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x203)
01101 #define ERROR_KEY_DOES_NOT_EXIST          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x204)
01102 #define ERROR_INVALID_DEVINST_NAME        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x205)
01103 #define ERROR_INVALID_CLASS               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x206)
01104 #define ERROR_DEVINST_ALREADY_EXISTS      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x207)
01105 #define ERROR_DEVINFO_NOT_REGISTERED      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x208)
01106 #define ERROR_INVALID_REG_PROPERTY        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x209)
01107 #define ERROR_NO_INF                      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20A)
01108 #define ERROR_NO_SUCH_DEVINST             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20B)
01109 #define ERROR_CANT_LOAD_CLASS_ICON        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20C)
01110 #define ERROR_INVALID_CLASS_INSTALLER     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20D)
01111 #define ERROR_DI_DO_DEFAULT               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20E)
01112 #define ERROR_DI_NOFILECOPY               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x20F)
01113 #define ERROR_INVALID_HWPROFILE           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x210)
01114 #define ERROR_NO_DEVICE_SELECTED          (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x211)
01115 #define ERROR_DEVINFO_LIST_LOCKED         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x212)
01116 #define ERROR_DEVINFO_DATA_LOCKED         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x213)
01117 #define ERROR_DI_BAD_PATH                 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x214)
01118 #define ERROR_NO_CLASSINSTALL_PARAMS      (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x215)
01119 #define ERROR_FILEQUEUE_LOCKED            (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x216)
01120 #define ERROR_BAD_SERVICE_INSTALLSECT     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x217)
01121 #define ERROR_NO_CLASS_DRIVER_LIST        (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x218)
01122 #define ERROR_NO_ASSOCIATED_SERVICE       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x219)
01123 #define ERROR_NO_DEFAULT_DEVICE_INTERFACE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21A)
01124 #define ERROR_DEVICE_INTERFACE_ACTIVE     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21B)
01125 #define ERROR_DEVICE_INTERFACE_REMOVED    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21C)
01126 #define ERROR_BAD_INTERFACE_INSTALLSECT   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21D)
01127 #define ERROR_NO_SUCH_INTERFACE_CLASS     (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21E)
01128 #define ERROR_INVALID_REFERENCE_STRING    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x21F)
01129 #define ERROR_INVALID_MACHINENAME         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x220)
01130 #define ERROR_REMOTE_COMM_FAILURE         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x221)
01131 #define ERROR_MACHINE_UNAVAILABLE         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x222)
01132 #define ERROR_NO_CONFIGMGR_SERVICES       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x223)
01133 #define ERROR_INVALID_PROPPAGE_PROVIDER   (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x224)
01134 #define ERROR_NO_SUCH_DEVICE_INTERFACE    (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x225)
01135 #define ERROR_DI_POSTPROCESSING_REQUIRED  (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x226)
01136 #define ERROR_INVALID_COINSTALLER         (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x227)
01137 #define ERROR_NO_COMPAT_DRIVERS           (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x228)
01138 #define ERROR_NO_DEVICE_ICON              (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x229)
01139 #define ERROR_INVALID_INF_LOGCONFIG       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22A)
01140 #define ERROR_DI_DONT_INSTALL             (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22B)
01141 #define ERROR_INVALID_FILTER_DRIVER       (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x22C)
01142 
01143 //
01144 // Backward compatibility--do not use.
01145 //
01146 #define ERROR_NO_DEFAULT_INTERFACE_DEVICE ERROR_NO_DEFAULT_DEVICE_INTERFACE
01147 #define ERROR_INTERFACE_DEVICE_ACTIVE     ERROR_DEVICE_INTERFACE_ACTIVE
01148 #define ERROR_INTERFACE_DEVICE_REMOVED    ERROR_DEVICE_INTERFACE_REMOVED
01149 #define ERROR_NO_SUCH_INTERFACE_DEVICE    ERROR_NO_SUCH_DEVICE_INTERFACE
01150 
01151 
01152 //
01153 // Win9x migration DLL error code
01154 //
01155 #define ERROR_NOT_INSTALLED               (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x1000)
01156 
01157 
01158 WINSETUPAPI
01159 BOOL
01160 WINAPI
01161 SetupGetInfInformationA(
01162     IN  LPCVOID             InfSpec,
01163     IN  DWORD               SearchControl,
01164     OUT PSP_INF_INFORMATION ReturnBuffer,     OPTIONAL
01165     IN  DWORD               ReturnBufferSize,
01166     OUT PDWORD              RequiredSize      OPTIONAL
01167     );
01168 
01169 WINSETUPAPI
01170 BOOL
01171 WINAPI
01172 SetupGetInfInformationW(
01173     IN  LPCVOID             InfSpec,
01174     IN  DWORD               SearchControl,
01175     OUT PSP_INF_INFORMATION ReturnBuffer,     OPTIONAL
01176     IN  DWORD               ReturnBufferSize,
01177     OUT PDWORD              RequiredSize      OPTIONAL
01178     );
01179 
01180 //
01181 // SearchControl flags for SetupGetInfInformation
01182 //
01183 #define INFINFO_INF_SPEC_IS_HINF        1
01184 #define INFINFO_INF_NAME_IS_ABSOLUTE    2
01185 #define INFINFO_DEFAULT_SEARCH          3
01186 #define INFINFO_REVERSE_DEFAULT_SEARCH  4
01187 #define INFINFO_INF_PATH_LIST_SEARCH    5
01188 
01189 #ifdef UNICODE
01190 #define SetupGetInfInformation SetupGetInfInformationW
01191 #else
01192 #define SetupGetInfInformation SetupGetInfInformationA
01193 #endif
01194 
01195 
01196 WINSETUPAPI
01197 BOOL
01198 WINAPI
01199 SetupQueryInfFileInformationA(
01200     IN  PSP_INF_INFORMATION InfInformation,
01201     IN  UINT                InfIndex,
01202     OUT PSTR                ReturnBuffer,     OPTIONAL
01203     IN  DWORD               ReturnBufferSize,
01204     OUT PDWORD              RequiredSize      OPTIONAL
01205     );
01206 
01207 WINSETUPAPI
01208 BOOL
01209 WINAPI
01210 SetupQueryInfFileInformationW(
01211     IN  PSP_INF_INFORMATION InfInformation,
01212     IN  UINT                InfIndex,
01213     OUT PWSTR               ReturnBuffer,     OPTIONAL
01214     IN  DWORD               ReturnBufferSize,
01215     OUT PDWORD              RequiredSize      OPTIONAL
01216     );
01217 
01218 #ifdef UNICODE
01219 #define SetupQueryInfFileInformation SetupQueryInfFileInformationW
01220 #else
01221 #define SetupQueryInfFileInformation SetupQueryInfFileInformationA
01222 #endif
01223 
01224 
01225 WINSETUPAPI
01226 BOOL
01227 WINAPI
01228 SetupQueryInfVersionInformationA(
01229     IN  PSP_INF_INFORMATION InfInformation,
01230     IN  UINT                InfIndex,
01231     IN  PCSTR               Key,              OPTIONAL
01232     OUT PSTR                ReturnBuffer,     OPTIONAL
01233     IN  DWORD               ReturnBufferSize,
01234     OUT PDWORD              RequiredSize      OPTIONAL
01235     );
01236 
01237 WINSETUPAPI
01238 BOOL
01239 WINAPI
01240 SetupQueryInfVersionInformationW(
01241     IN  PSP_INF_INFORMATION InfInformation,
01242     IN  UINT                InfIndex,
01243     IN  PCWSTR              Key,              OPTIONAL
01244     OUT PWSTR               ReturnBuffer,     OPTIONAL
01245     IN  DWORD               ReturnBufferSize,
01246     OUT PDWORD              RequiredSize      OPTIONAL
01247     );
01248 
01249 #ifdef UNICODE
01250 #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationW
01251 #else
01252 #define SetupQueryInfVersionInformation SetupQueryInfVersionInformationA
01253 #endif
01254 
01255 
01256 WINSETUPAPI
01257 BOOL
01258 WINAPI
01259 SetupGetInfFileListA(
01260     IN  PCSTR  DirectoryPath,    OPTIONAL
01261     IN  DWORD  InfStyle,
01262     OUT PSTR   ReturnBuffer,     OPTIONAL
01263     IN  DWORD  ReturnBufferSize,
01264     OUT PDWORD RequiredSize      OPTIONAL
01265     );
01266 
01267 WINSETUPAPI
01268 BOOL
01269 WINAPI
01270 SetupGetInfFileListW(
01271     IN  PCWSTR DirectoryPath,    OPTIONAL
01272     IN  DWORD  InfStyle,
01273     OUT PWSTR  ReturnBuffer,     OPTIONAL
01274     IN  DWORD  ReturnBufferSize,
01275     OUT PDWORD RequiredSize      OPTIONAL
01276     );
01277 
01278 #ifdef UNICODE
01279 #define SetupGetInfFileList SetupGetInfFileListW
01280 #else
01281 #define SetupGetInfFileList SetupGetInfFileListA
01282 #endif
01283 
01284 
01285 WINSETUPAPI
01286 HINF
01287 WINAPI
01288 SetupOpenInfFileW(
01289     IN  PCWSTR FileName,
01290     IN  PCWSTR InfClass,    OPTIONAL
01291     IN  DWORD  InfStyle,
01292     OUT PUINT  ErrorLine    OPTIONAL
01293     );
01294 
01295 WINSETUPAPI
01296 HINF
01297 WINAPI
01298 SetupOpenInfFileA(
01299     IN  PCSTR FileName,
01300     IN  PCSTR InfClass,     OPTIONAL
01301     IN  DWORD InfStyle,
01302     OUT PUINT ErrorLine     OPTIONAL
01303     );
01304 
01305 #ifdef UNICODE
01306 #define SetupOpenInfFile SetupOpenInfFileW
01307 #else
01308 #define SetupOpenInfFile SetupOpenInfFileA
01309 #endif
01310 
01311 
01312 WINSETUPAPI
01313 HINF
01314 WINAPI
01315 SetupOpenMasterInf(
01316     VOID
01317     );
01318 
01319 
01320 WINSETUPAPI
01321 BOOL
01322 WINAPI
01323 SetupOpenAppendInfFileW(
01324     IN  PCWSTR FileName,    OPTIONAL
01325     IN  HINF   InfHandle,
01326     OUT PUINT  ErrorLine    OPTIONAL
01327     );
01328 
01329 WINSETUPAPI
01330 BOOL
01331 WINAPI
01332 SetupOpenAppendInfFileA(
01333     IN  PCSTR FileName,     OPTIONAL
01334     IN  HINF  InfHandle,
01335     OUT PUINT ErrorLine     OPTIONAL
01336     );
01337 
01338 #ifdef UNICODE
01339 #define SetupOpenAppendInfFile SetupOpenAppendInfFileW
01340 #else
01341 #define SetupOpenAppendInfFile SetupOpenAppendInfFileA
01342 #endif
01343 
01344 
01345 WINSETUPAPI
01346 VOID
01347 WINAPI
01348 SetupCloseInfFile(
01349     IN HINF InfHandle
01350     );
01351 
01352 
01353 WINSETUPAPI
01354 BOOL
01355 WINAPI
01356 SetupFindFirstLineA(
01357     IN  HINF        InfHandle,
01358     IN  PCSTR       Section,
01359     IN  PCSTR       Key,          OPTIONAL
01360     OUT PINFCONTEXT Context
01361     );
01362 
01363 WINSETUPAPI
01364 BOOL
01365 WINAPI
01366 SetupFindFirstLineW(
01367     IN  HINF        InfHandle,
01368     IN  PCWSTR      Section,
01369     IN  PCWSTR      Key,          OPTIONAL
01370     OUT PINFCONTEXT Context
01371     );
01372 
01373 #ifdef UNICODE
01374 #define SetupFindFirstLine SetupFindFirstLineW
01375 #else
01376 #define SetupFindFirstLine SetupFindFirstLineA
01377 #endif
01378 
01379 
01380 WINSETUPAPI
01381 BOOL
01382 WINAPI
01383 SetupFindNextLine(
01384     IN  PINFCONTEXT ContextIn,
01385     OUT PINFCONTEXT ContextOut
01386     );
01387 
01388 
01389 WINSETUPAPI
01390 BOOL
01391 WINAPI
01392 SetupFindNextMatchLineA(
01393     IN  PINFCONTEXT ContextIn,
01394     IN  PCSTR       Key,        OPTIONAL
01395     OUT PINFCONTEXT ContextOut
01396     );
01397 
01398 WINSETUPAPI
01399 BOOL
01400 WINAPI
01401 SetupFindNextMatchLineW(
01402     IN  PINFCONTEXT ContextIn,
01403     IN  PCWSTR      Key,        OPTIONAL
01404     OUT PINFCONTEXT ContextOut
01405     );
01406 
01407 #ifdef UNICODE
01408 #define SetupFindNextMatchLine SetupFindNextMatchLineW
01409 #else
01410 #define SetupFindNextMatchLine SetupFindNextMatchLineA
01411 #endif
01412 
01413 
01414 WINSETUPAPI
01415 BOOL
01416 WINAPI
01417 SetupGetLineByIndexA(
01418     IN  HINF        InfHandle,
01419     IN  PCSTR       Section,
01420     IN  DWORD       Index,
01421     OUT PINFCONTEXT Context
01422     );
01423 
01424 WINSETUPAPI
01425 BOOL
01426 WINAPI
01427 SetupGetLineByIndexW(
01428     IN  HINF        InfHandle,
01429     IN  PCWSTR      Section,
01430     IN  DWORD       Index,
01431     OUT PINFCONTEXT Context
01432     );
01433 
01434 #ifdef UNICODE
01435 #define SetupGetLineByIndex SetupGetLineByIndexW
01436 #else
01437 #define SetupGetLineByIndex SetupGetLineByIndexA
01438 #endif
01439 
01440 
01441 WINSETUPAPI
01442 LONG
01443 WINAPI
01444 SetupGetLineCountA(
01445     IN HINF  InfHandle,
01446     IN PCSTR Section
01447     );
01448 
01449 WINSETUPAPI
01450 LONG
01451 WINAPI
01452 SetupGetLineCountW(
01453     IN HINF   InfHandle,
01454     IN PCWSTR Section
01455     );
01456 
01457 #ifdef UNICODE
01458 #define SetupGetLineCount SetupGetLineCountW
01459 #else
01460 #define SetupGetLineCount SetupGetLineCountA
01461 #endif
01462 
01463 
01464 WINSETUPAPI
01465 BOOL
01466 WINAPI
01467 SetupGetLineTextA(
01468     IN  PINFCONTEXT Context,          OPTIONAL
01469     IN  HINF        InfHandle,        OPTIONAL
01470     IN  PCSTR       Section,          OPTIONAL
01471     IN  PCSTR       Key,              OPTIONAL
01472     OUT PSTR        ReturnBuffer,     OPTIONAL
01473     IN  DWORD       ReturnBufferSize,
01474     OUT PDWORD      RequiredSize      OPTIONAL
01475     );
01476 
01477 WINSETUPAPI
01478 BOOL
01479 WINAPI
01480 SetupGetLineTextW(
01481     IN  PINFCONTEXT Context,          OPTIONAL
01482     IN  HINF        InfHandle,        OPTIONAL
01483     IN  PCWSTR      Section,          OPTIONAL
01484     IN  PCWSTR      Key,              OPTIONAL
01485     OUT PWSTR       ReturnBuffer,     OPTIONAL
01486     IN  DWORD       ReturnBufferSize,
01487     OUT PDWORD      RequiredSize      OPTIONAL
01488     );
01489 
01490 #ifdef UNICODE
01491 #define SetupGetLineText SetupGetLineTextW
01492 #else
01493 #define SetupGetLineText SetupGetLineTextA
01494 #endif
01495 
01496 
01497 WINSETUPAPI
01498 DWORD
01499 WINAPI
01500 SetupGetFieldCount(
01501     IN PINFCONTEXT Context
01502     );
01503 
01504 
01505 WINSETUPAPI
01506 BOOL
01507 WINAPI
01508 SetupGetStringFieldA(
01509     IN  PINFCONTEXT Context,
01510     IN  DWORD       FieldIndex,
01511     OUT PSTR        ReturnBuffer,     OPTIONAL
01512     IN  DWORD       ReturnBufferSize,
01513     OUT PDWORD      RequiredSize      OPTIONAL
01514     );
01515 
01516 WINSETUPAPI
01517 BOOL
01518 WINAPI
01519 SetupGetStringFieldW(
01520     IN  PINFCONTEXT Context,
01521     IN  DWORD       FieldIndex,
01522     OUT PWSTR       ReturnBuffer,     OPTIONAL
01523     IN  DWORD       ReturnBufferSize,
01524     OUT PDWORD      RequiredSize      OPTIONAL
01525     );
01526 
01527 #ifdef UNICODE
01528 #define SetupGetStringField SetupGetStringFieldW
01529 #else
01530 #define SetupGetStringField SetupGetStringFieldA
01531 #endif
01532 
01533 
01534 WINSETUPAPI
01535 BOOL
01536 WINAPI
01537 SetupGetIntField(
01538     IN  PINFCONTEXT Context,
01539     IN  DWORD       FieldIndex,
01540     OUT PINT        IntegerValue
01541     );
01542 
01543 
01544 WINSETUPAPI
01545 BOOL
01546 WINAPI
01547 SetupGetMultiSzFieldA(
01548     IN  PINFCONTEXT Context,
01549     IN  DWORD       FieldIndex,
01550     OUT PSTR        ReturnBuffer,     OPTIONAL
01551     IN  DWORD       ReturnBufferSize,
01552     OUT LPDWORD     RequiredSize      OPTIONAL
01553     );
01554 
01555 WINSETUPAPI
01556 BOOL
01557 WINAPI
01558 SetupGetMultiSzFieldW(
01559     IN  PINFCONTEXT Context,
01560     IN  DWORD       FieldIndex,
01561     OUT PWSTR       ReturnBuffer,     OPTIONAL
01562     IN  DWORD       ReturnBufferSize,
01563     OUT LPDWORD     RequiredSize      OPTIONAL
01564     );
01565 
01566 #ifdef UNICODE
01567 #define SetupGetMultiSzField SetupGetMultiSzFieldW
01568 #else
01569 #define SetupGetMultiSzField SetupGetMultiSzFieldA
01570 #endif
01571 
01572 
01573 WINSETUPAPI
01574 BOOL
01575 WINAPI
01576 SetupGetBinaryField(
01577     IN  PINFCONTEXT Context,
01578     IN  DWORD       FieldIndex,
01579     OUT PBYTE       ReturnBuffer,     OPTIONAL
01580     IN  DWORD       ReturnBufferSize,
01581     OUT LPDWORD     RequiredSize      OPTIONAL
01582     );
01583 
01584 
01585 WINSETUPAPI
01586 DWORD
01587 WINAPI
01588 SetupGetFileCompressionInfoA(
01589     IN  PCSTR   SourceFileName,
01590     OUT PSTR   *ActualSourceFileName,
01591     OUT PDWORD  SourceFileSize,
01592     OUT PDWORD  TargetFileSize,
01593     OUT PUINT   CompressionType
01594     );
01595 
01596 WINSETUPAPI
01597 DWORD
01598 WINAPI
01599 SetupGetFileCompressionInfoW(
01600     IN  PCWSTR  SourceFileName,
01601     OUT PWSTR  *ActualSourceFileName,
01602     OUT PDWORD  SourceFileSize,
01603     OUT PDWORD  TargetFileSize,
01604     OUT PUINT   CompressionType
01605     );
01606 
01607 #ifdef UNICODE
01608 #define SetupGetFileCompressionInfo SetupGetFileCompressionInfoW
01609 #else
01610 #define SetupGetFileCompressionInfo SetupGetFileCompressionInfoA
01611 #endif
01612 
01613 
01614 //
01615 // Compression types
01616 //
01617 #define FILE_COMPRESSION_NONE       0
01618 #define FILE_COMPRESSION_WINLZA     1
01619 #define FILE_COMPRESSION_MSZIP      2
01620 
01621 
01622 WINSETUPAPI
01623 DWORD
01624 WINAPI
01625 SetupDecompressOrCopyFileA(
01626     IN PCSTR SourceFileName,
01627     IN PCSTR TargetFileName,
01628     IN PUINT CompressionType OPTIONAL
01629     );
01630 
01631 WINSETUPAPI
01632 DWORD
01633 WINAPI
01634 SetupDecompressOrCopyFileW(
01635     IN PCWSTR SourceFileName,
01636     IN PCWSTR TargetFileName,
01637     IN PUINT  CompressionType OPTIONAL
01638     );
01639 
01640 #ifdef UNICODE
01641 #define SetupDecompressOrCopyFile SetupDecompressOrCopyFileW
01642 #else
01643 #define SetupDecompressOrCopyFile SetupDecompressOrCopyFileA
01644 #endif
01645 
01646 
01647 WINSETUPAPI
01648 BOOL
01649 WINAPI
01650 SetupGetSourceFileLocationA(
01651     IN  HINF        InfHandle,
01652     IN  PINFCONTEXT InfContext,       OPTIONAL
01653     IN  PCSTR       FileName,         OPTIONAL
01654     OUT PUINT       SourceId,
01655     OUT PSTR        ReturnBuffer,     OPTIONAL
01656     IN  DWORD       ReturnBufferSize,
01657     OUT PDWORD      RequiredSize      OPTIONAL
01658     );
01659 
01660 WINSETUPAPI
01661 BOOL
01662 WINAPI
01663 SetupGetSourceFileLocationW(
01664     IN  HINF        InfHandle,
01665     IN  PINFCONTEXT InfContext,       OPTIONAL
01666     IN  PCWSTR      FileName,         OPTIONAL
01667     OUT PUINT       SourceId,
01668     OUT PWSTR       ReturnBuffer,     OPTIONAL
01669     IN  DWORD       ReturnBufferSize,
01670     OUT PDWORD      RequiredSize      OPTIONAL
01671     );
01672 
01673 #ifdef UNICODE
01674 #define SetupGetSourceFileLocation SetupGetSourceFileLocationW
01675 #else
01676 #define SetupGetSourceFileLocation SetupGetSourceFileLocationA
01677 #endif
01678 
01679 
01680 WINSETUPAPI
01681 BOOL
01682 WINAPI
01683 SetupGetSourceFileSizeA(
01684     IN  HINF        InfHandle,
01685     IN  PINFCONTEXT InfContext,     OPTIONAL
01686     IN  PCSTR       FileName,       OPTIONAL
01687     IN  PCSTR       Section,        OPTIONAL
01688     OUT PDWORD      FileSize,
01689     IN  UINT        RoundingFactor  OPTIONAL
01690     );
01691 
01692 WINSETUPAPI
01693 BOOL
01694 WINAPI
01695 SetupGetSourceFileSizeW(
01696     IN  HINF        InfHandle,
01697     IN  PINFCONTEXT InfContext,     OPTIONAL
01698     IN  PCWSTR      FileName,       OPTIONAL
01699     IN  PCWSTR      Section,        OPTIONAL
01700     OUT PDWORD      FileSize,
01701     IN  UINT        RoundingFactor  OPTIONAL
01702     );
01703 
01704 #ifdef UNICODE
01705 #define SetupGetSourceFileSize SetupGetSourceFileSizeW
01706 #else
01707 #define SetupGetSourceFileSize SetupGetSourceFileSizeA
01708 #endif
01709 
01710 
01711 WINSETUPAPI
01712 BOOL
01713 WINAPI
01714 SetupGetTargetPathA(
01715     IN  HINF        InfHandle,
01716     IN  PINFCONTEXT InfContext,       OPTIONAL
01717     IN  PCSTR       Section,          OPTIONAL
01718     OUT PSTR        ReturnBuffer,     OPTIONAL
01719     IN  DWORD       ReturnBufferSize,
01720     OUT PDWORD      RequiredSize      OPTIONAL
01721     );
01722 
01723 WINSETUPAPI
01724 BOOL
01725 WINAPI
01726 SetupGetTargetPathW(
01727     IN  HINF        InfHandle,
01728     IN  PINFCONTEXT InfContext,       OPTIONAL
01729     IN  PCWSTR      Section,          OPTIONAL
01730     OUT PWSTR       ReturnBuffer,     OPTIONAL
01731     IN  DWORD       ReturnBufferSize,
01732     OUT PDWORD      RequiredSize      OPTIONAL
01733     );
01734 
01735 #ifdef UNICODE
01736 #define SetupGetTargetPath SetupGetTargetPathW
01737 #else
01738 #define SetupGetTargetPath SetupGetTargetPathA
01739 #endif
01740 
01741 
01742 //
01743 // Define flags for SourceList APIs.
01744 //
01745 #define SRCLIST_TEMPORARY       0x00000001
01746 #define SRCLIST_NOBROWSE        0x00000002
01747 #define SRCLIST_SYSTEM          0x00000010
01748 #define SRCLIST_USER            0x00000020
01749 #define SRCLIST_SYSIFADMIN      0x00000040
01750 #define SRCLIST_SUBDIRS         0x00000100
01751 #define SRCLIST_APPEND          0x00000200
01752 #define SRCLIST_NOSTRIPPLATFORM 0x00000400
01753 
01754 
01755 WINSETUPAPI
01756 BOOL
01757 WINAPI
01758 SetupSetSourceListA(
01759     IN DWORD  Flags,
01760     IN PCSTR *SourceList,
01761     IN UINT   SourceCount
01762     );
01763 
01764 WINSETUPAPI
01765 BOOL
01766 WINAPI
01767 SetupSetSourceListW(
01768     IN DWORD   Flags,
01769     IN PCWSTR *SourceList,
01770     IN UINT    SourceCount
01771     );
01772 
01773 #ifdef UNICODE
01774 #define SetupSetSourceList SetupSetSourceListW
01775 #else
01776 #define SetupSetSourceList SetupSetSourceListA
01777 #endif
01778 
01779 
01780 WINSETUPAPI
01781 BOOL
01782 WINAPI
01783 SetupCancelTemporarySourceList(
01784     VOID
01785     );
01786 
01787 
01788 WINSETUPAPI
01789 BOOL
01790 WINAPI
01791 SetupAddToSourceListA(
01792     IN DWORD Flags,
01793     IN PCSTR Source
01794     );
01795 
01796 WINSETUPAPI
01797 BOOL
01798 WINAPI
01799 SetupAddToSourceListW(
01800     IN DWORD  Flags,
01801     IN PCWSTR Source
01802     );
01803 
01804 #ifdef UNICODE
01805 #define SetupAddToSourceList SetupAddToSourceListW
01806 #else
01807 #define SetupAddToSourceList SetupAddToSourceListA
01808 #endif
01809 
01810 
01811 WINSETUPAPI
01812 BOOL
01813 WINAPI
01814 SetupRemoveFromSourceListA(
01815     IN DWORD Flags,
01816     IN PCSTR Source
01817     );
01818 
01819 WINSETUPAPI
01820 BOOL
01821 WINAPI
01822 SetupRemoveFromSourceListW(
01823     IN DWORD  Flags,
01824     IN PCWSTR Source
01825     );
01826 
01827 #ifdef UNICODE
01828 #define SetupRemoveFromSourceList SetupRemoveFromSourceListW
01829 #else
01830 #define SetupRemoveFromSourceList SetupRemoveFromSourceListA
01831 #endif
01832 
01833 
01834 WINSETUPAPI
01835 BOOL
01836 WINAPI
01837 SetupQuerySourceListA(
01838     IN  DWORD   Flags,
01839     OUT PCSTR **List,
01840     OUT PUINT   Count
01841     );
01842 
01843 WINSETUPAPI
01844 BOOL
01845 WINAPI
01846 SetupQuerySourceListW(
01847     IN  DWORD    Flags,
01848     OUT PCWSTR **List,
01849     OUT PUINT    Count
01850     );
01851 
01852 #ifdef UNICODE
01853 #define SetupQuerySourceList SetupQuerySourceListW
01854 #else
01855 #define SetupQuerySourceList SetupQuerySourceListA
01856 #endif
01857 
01858 
01859 WINSETUPAPI
01860 BOOL
01861 WINAPI
01862 SetupFreeSourceListA(
01863     IN OUT PCSTR **List,
01864     IN     UINT    Count
01865     );
01866 
01867 WINSETUPAPI
01868 BOOL
01869 WINAPI
01870 SetupFreeSourceListW(
01871     IN OUT PCWSTR **List,
01872     IN     UINT     Count
01873     );
01874 
01875 #ifdef UNICODE
01876 #define SetupFreeSourceList SetupFreeSourceListW
01877 #else
01878 #define SetupFreeSourceList SetupFreeSourceListA
01879 #endif
01880 
01881 
01882 WINSETUPAPI
01883 UINT
01884 WINAPI
01885 SetupPromptForDiskA(
01886     IN  HWND   hwndParent,
01887     IN  PCSTR  DialogTitle,      OPTIONAL
01888     IN  PCSTR  DiskName,         OPTIONAL
01889     IN  PCSTR  PathToSource,     OPTIONAL
01890     IN  PCSTR  FileSought,
01891     IN  PCSTR  TagFile,          OPTIONAL
01892     IN  DWORD  DiskPromptStyle,
01893     OUT PSTR   PathBuffer,
01894     IN  DWORD  PathBufferSize,
01895     OUT PDWORD PathRequiredSize
01896     );
01897 
01898 WINSETUPAPI
01899 UINT
01900 WINAPI
01901 SetupPromptForDiskW(
01902     IN  HWND   hwndParent,
01903     IN  PCWSTR DialogTitle,      OPTIONAL
01904     IN  PCWSTR DiskName,         OPTIONAL
01905     IN  PCWSTR PathToSource,     OPTIONAL
01906     IN  PCWSTR FileSought,
01907     IN  PCWSTR TagFile,          OPTIONAL
01908     IN  DWORD  DiskPromptStyle,
01909     OUT PWSTR  PathBuffer,
01910     IN  DWORD  PathBufferSize,
01911     OUT PDWORD PathRequiredSize
01912     );
01913 
01914 #ifdef UNICODE
01915 #define SetupPromptForDisk SetupPromptForDiskW
01916 #else
01917 #define SetupPromptForDisk SetupPromptForDiskA
01918 #endif
01919 
01920 
01921 WINSETUPAPI
01922 UINT
01923 WINAPI
01924 SetupCopyErrorA(
01925     IN  HWND   hwndParent,
01926     IN  PCSTR  DialogTitle,     OPTIONAL
01927     IN  PCSTR  DiskName,        OPTIONAL
01928     IN  PCSTR  PathToSource,
01929     IN  PCSTR  SourceFile,
01930     IN  PCSTR  TargetPathFile,  OPTIONAL
01931     IN  UINT   Win32ErrorCode,
01932     IN  DWORD  Style,
01933     OUT PSTR   PathBuffer,      OPTIONAL
01934     IN  DWORD  PathBufferSize,
01935     OUT PDWORD PathRequiredSize OPTIONAL
01936     );
01937 
01938 WINSETUPAPI
01939 UINT
01940 WINAPI
01941 SetupCopyErrorW(
01942     IN  HWND   hwndParent,
01943     IN  PCWSTR DialogTitle,     OPTIONAL
01944     IN  PCWSTR DiskName,        OPTIONAL
01945     IN  PCWSTR PathToSource,
01946     IN  PCWSTR SourceFile,
01947     IN  PCWSTR TargetPathFile,  OPTIONAL
01948     IN  UINT   Win32ErrorCode,
01949     IN  DWORD  Style,
01950     OUT PWSTR  PathBuffer,      OPTIONAL
01951     IN  DWORD  PathBufferSize,
01952     OUT PDWORD PathRequiredSize OPTIONAL
01953     );
01954 
01955 #ifdef UNICODE
01956 #define SetupCopyError SetupCopyErrorW
01957 #else
01958 #define SetupCopyError SetupCopyErrorA
01959 #endif
01960 
01961 
01962 WINSETUPAPI
01963 UINT
01964 WINAPI
01965 SetupRenameErrorA(
01966     IN  HWND   hwndParent,
01967     IN  PCSTR  DialogTitle,     OPTIONAL
01968     IN  PCSTR  SourceFile,
01969     IN  PCSTR  TargetFile,
01970     IN  UINT   Win32ErrorCode,
01971     IN  DWORD  Style
01972     );
01973 
01974 WINSETUPAPI
01975 UINT
01976 WINAPI
01977 SetupRenameErrorW(
01978     IN  HWND   hwndParent,
01979     IN  PCWSTR DialogTitle,     OPTIONAL
01980     IN  PCWSTR SourceFile,
01981     IN  PCWSTR TargetFile,
01982     IN  UINT   Win32ErrorCode,
01983     IN  DWORD  Style
01984     );
01985 
01986 #ifdef UNICODE
01987 #define SetupRenameError SetupRenameErrorW
01988 #else
01989 #define SetupRenameError SetupRenameErrorA
01990 #endif
01991 
01992 
01993 WINSETUPAPI
01994 UINT
01995 WINAPI
01996 SetupDeleteErrorA(
01997     IN  HWND   hwndParent,
01998     IN  PCSTR  DialogTitle,     OPTIONAL
01999     IN  PCSTR  File,
02000     IN  UINT   Win32ErrorCode,
02001     IN  DWORD  Style
02002     );
02003 
02004 WINSETUPAPI
02005 UINT
02006 WINAPI
02007 SetupDeleteErrorW(
02008     IN  HWND   hwndParent,
02009     IN  PCWSTR DialogTitle,     OPTIONAL
02010     IN  PCWSTR File,
02011     IN  UINT   Win32ErrorCode,
02012     IN  DWORD  Style
02013     );
02014 
02015 #ifdef UNICODE
02016 #define SetupDeleteError SetupDeleteErrorW
02017 #else
02018 #define SetupDeleteError SetupDeleteErrorA
02019 #endif
02020 
02021 
02022 //
02023 // Styles for SetupPromptForDisk, SetupCopyError,
02024 // SetupRenameError, SetupDeleteError
02025 //
02026 #define IDF_NOBROWSE        0x00000001
02027 #define IDF_NOSKIP          0x00000002
02028 #define IDF_NODETAILS       0x00000004
02029 #define IDF_NOCOMPRESSED    0x00000008
02030 #define IDF_CHECKFIRST      0x00000100
02031 #define IDF_NOBEEP          0x00000200
02032 #define IDF_NOFOREGROUND    0x00000400
02033 #define IDF_WARNIFSKIP      0x00000800
02034 #define IDF_OEMDISK         0x80000000
02035 
02036 //
02037 // Return values for SetupPromptForDisk, SetupCopyError,
02038 // SetupRenameError, SetupDeleteError
02039 //
02040 #define DPROMPT_SUCCESS         0
02041 #define DPROMPT_CANCEL          1
02042 #define DPROMPT_SKIPFILE        2
02043 #define DPROMPT_BUFFERTOOSMALL  3
02044 #define DPROMPT_OUTOFMEMORY     4
02045 
02046 
02047 WINSETUPAPI
02048 BOOL
02049 WINAPI
02050 SetupSetDirectoryIdA(
02051     IN HINF  InfHandle,
02052     IN DWORD Id,            OPTIONAL
02053     IN PCSTR Directory      OPTIONAL
02054     );
02055 
02056 WINSETUPAPI
02057 BOOL
02058 WINAPI
02059 SetupSetDirectoryIdW(
02060     IN HINF   InfHandle,
02061     IN DWORD  Id,           OPTIONAL
02062     IN PCWSTR Directory     OPTIONAL
02063     );
02064 
02065 #ifdef UNICODE
02066 #define SetupSetDirectoryId SetupSetDirectoryIdW
02067 #else
02068 #define SetupSetDirectoryId SetupSetDirectoryIdA
02069 #endif
02070 
02071 
02072 WINSETUPAPI
02073 BOOL
02074 WINAPI
02075 SetupSetDirectoryIdExA(
02076     IN HINF  InfHandle,
02077     IN DWORD Id,            OPTIONAL
02078     IN PCSTR Directory,     OPTIONAL
02079     IN DWORD Flags,
02080     IN DWORD Reserved1,
02081     IN PVOID Reserved2
02082     );
02083 
02084 WINSETUPAPI
02085 BOOL
02086 WINAPI
02087 SetupSetDirectoryIdExW(
02088     IN HINF   InfHandle,
02089     IN DWORD  Id,           OPTIONAL
02090     IN PCWSTR Directory,    OPTIONAL
02091     IN DWORD  Flags,
02092     IN DWORD  Reserved1,
02093     IN PVOID  Reserved2
02094     );
02095 
02096 #ifdef UNICODE
02097 #define SetupSetDirectoryIdEx SetupSetDirectoryIdExW
02098 #else
02099 #define SetupSetDirectoryIdEx SetupSetDirectoryIdExA
02100 #endif
02101 
02102 //
02103 // Flags for SetupSetDirectoryIdEx
02104 //
02105 #define SETDIRID_NOT_FULL_PATH      0x00000001
02106 
02107 
02108 WINSETUPAPI
02109 BOOL
02110 WINAPI
02111 SetupGetSourceInfoA(
02112     IN  HINF   InfHandle,
02113     IN  UINT   SourceId,
02114     IN  UINT   InfoDesired,
02115     OUT PSTR   ReturnBuffer,     OPTIONAL
02116     IN  DWORD  ReturnBufferSize,
02117     OUT PDWORD RequiredSize      OPTIONAL
02118     );
02119 
02120 WINSETUPAPI
02121 BOOL
02122 WINAPI
02123 SetupGetSourceInfoW(
02124     IN  HINF   InfHandle,
02125     IN  UINT   SourceId,
02126     IN  UINT   InfoDesired,
02127     OUT PWSTR  ReturnBuffer,     OPTIONAL
02128     IN  DWORD  ReturnBufferSize,
02129     OUT PDWORD RequiredSize      OPTIONAL
02130     );
02131 
02132 #ifdef UNICODE
02133 #define SetupGetSourceInfo SetupGetSourceInfoW
02134 #else
02135 #define SetupGetSourceInfo SetupGetSourceInfoA
02136 #endif
02137 
02138 //
02139 // InfoDesired values for SetupGetSourceInfo
02140 //
02141 #define SRCINFO_PATH            1
02142 #define SRCINFO_TAGFILE         2
02143 #define SRCINFO_DESCRIPTION     3
02144 
02145 
02146 WINSETUPAPI
02147 BOOL
02148 WINAPI
02149 SetupInstallFileA(
02150     IN HINF                InfHandle,         OPTIONAL
02151     IN PINFCONTEXT         InfContext,        OPTIONAL
02152     IN PCSTR               SourceFile,        OPTIONAL
02153     IN PCSTR               SourcePathRoot,    OPTIONAL
02154     IN PCSTR               DestinationName,   OPTIONAL
02155     IN DWORD               CopyStyle,
02156     IN PSP_FILE_CALLBACK_A CopyMsgHandler,    OPTIONAL
02157     IN PVOID               Context            OPTIONAL
02158     );
02159 
02160 WINSETUPAPI
02161 BOOL
02162 WINAPI
02163 SetupInstallFileW(
02164     IN HINF                InfHandle,         OPTIONAL
02165     IN PINFCONTEXT         InfContext,        OPTIONAL
02166     IN PCWSTR              SourceFile,        OPTIONAL
02167     IN PCWSTR              SourcePathRoot,    OPTIONAL
02168     IN PCWSTR              DestinationName,   OPTIONAL
02169     IN DWORD               CopyStyle,
02170     IN PSP_FILE_CALLBACK_W CopyMsgHandler,    OPTIONAL
02171     IN PVOID               Context            OPTIONAL
02172     );
02173 
02174 #ifdef UNICODE
02175 #define SetupInstallFile SetupInstallFileW
02176 #else
02177 #define SetupInstallFile SetupInstallFileA
02178 #endif
02179 
02180 WINSETUPAPI
02181 BOOL
02182 WINAPI
02183 SetupInstallFileExA(
02184     IN  HINF                InfHandle,         OPTIONAL
02185     IN  PINFCONTEXT         InfContext,        OPTIONAL
02186     IN  PCSTR               SourceFile,        OPTIONAL
02187     IN  PCSTR               SourcePathRoot,    OPTIONAL
02188     IN  PCSTR               DestinationName,   OPTIONAL
02189     IN  DWORD               CopyStyle,
02190     IN  PSP_FILE_CALLBACK_A CopyMsgHandler,    OPTIONAL
02191     IN  PVOID               Context,           OPTIONAL
02192     OUT PBOOL               FileWasInUse
02193     );
02194 
02195 WINSETUPAPI
02196 BOOL
02197 WINAPI
02198 SetupInstallFileExW(
02199     IN  HINF                InfHandle,         OPTIONAL
02200     IN  PINFCONTEXT         InfContext,        OPTIONAL
02201     IN  PCWSTR              SourceFile,        OPTIONAL
02202     IN  PCWSTR              SourcePathRoot,    OPTIONAL
02203     IN  PCWSTR              DestinationName,   OPTIONAL
02204     IN  DWORD               CopyStyle,
02205     IN  PSP_FILE_CALLBACK_W CopyMsgHandler,    OPTIONAL
02206     IN  PVOID               Context,           OPTIONAL
02207     OUT PBOOL               FileWasInUse
02208     );
02209 
02210 #ifdef UNICODE
02211 #define SetupInstallFileEx SetupInstallFileExW
02212 #else
02213 #define SetupInstallFileEx SetupInstallFileExA
02214 #endif
02215 
02216 //
02217 // CopyStyle values for copy and queue-related APIs
02218 //
02219 #define SP_COPY_DELETESOURCE        0x0000001   // delete source file on successful copy
02220 #define SP_COPY_REPLACEONLY         0x0000002   // copy only if target file already present
02221 #define SP_COPY_NEWER               0x0000004   // copy only if source newer than or same as target
02222 #define SP_COPY_NEWER_OR_SAME       SP_COPY_NEWER
02223 #define SP_COPY_NOOVERWRITE         0x0000008   // copy only if target doesn't exist
02224 #define SP_COPY_NODECOMP            0x0000010   // don't decompress source file while copying
02225 #define SP_COPY_LANGUAGEAWARE       0x0000020   // don't overwrite file of different language
02226 #define SP_COPY_SOURCE_ABSOLUTE     0x0000040   // SourceFile is a full source path
02227 #define SP_COPY_SOURCEPATH_ABSOLUTE 0x0000080   // SourcePathRoot is the full path
02228 #define SP_COPY_IN_USE_NEEDS_REBOOT 0x0000100   // System needs reboot if file in use
02229 #define SP_COPY_FORCE_IN_USE        0x0000200   // Force target-in-use behavior
02230 #define SP_COPY_NOSKIP              0x0000400   // Skip is disallowed for this file or section
02231 #define SP_FLAG_CABINETCONTINUATION 0x0000800   // Used with need media notification
02232 #define SP_COPY_FORCE_NOOVERWRITE   0x0001000   // like NOOVERWRITE but no callback nofitication
02233 #define SP_COPY_FORCE_NEWER         0x0002000   // like NEWER but no callback nofitication
02234 #define SP_COPY_WARNIFSKIP          0x0004000   // system critical file: warn if user tries to skip
02235 #define SP_COPY_NOBROWSE            0x0008000   // Browsing is disallowed for this file or section
02236 #define SP_COPY_NEWER_ONLY          0x0010000   // copy only if source file newer than target
02237 
02238 
02239 WINSETUPAPI
02240 HSPFILEQ
02241 WINAPI
02242 SetupOpenFileQueue(
02243     VOID
02244     );
02245 
02246 WINSETUPAPI
02247 BOOL
02248 WINAPI
02249 SetupCloseFileQueue(
02250     IN HSPFILEQ QueueHandle
02251     );
02252 
02253 
02254 WINSETUPAPI
02255 BOOL
02256 WINAPI
02257 SetupSetPlatformPathOverrideA(
02258     IN PCSTR Override   OPTIONAL
02259     );
02260 
02261 WINSETUPAPI
02262 BOOL
02263 WINAPI
02264 SetupSetPlatformPathOverrideW(
02265     IN PCWSTR Override  OPTIONAL
02266     );
02267 
02268 #ifdef UNICODE
02269 #define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW
02270 #else
02271 #define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA
02272 #endif
02273 
02274 
02275 WINSETUPAPI
02276 BOOL
02277 WINAPI
02278 SetupQueueCopyA(
02279     IN HSPFILEQ QueueHandle,
02280     IN PCSTR    SourceRootPath,
02281     IN PCSTR    SourcePath,         OPTIONAL
02282     IN PCSTR    SourceFilename,
02283     IN PCSTR    SourceDescription,  OPTIONAL
02284     IN PCSTR    SourceTagfile,      OPTIONAL
02285     IN PCSTR    TargetDirectory,
02286     IN PCSTR    TargetFilename,     OPTIONAL
02287     IN DWORD    CopyStyle
02288     );
02289 
02290 WINSETUPAPI
02291 BOOL
02292 WINAPI
02293 SetupQueueCopyW(
02294     IN HSPFILEQ QueueHandle,
02295     IN PCWSTR   SourceRootPath,
02296     IN PCWSTR   SourcePath,         OPTIONAL
02297     IN PCWSTR   SourceFilename,
02298     IN PCWSTR   SourceDescription,  OPTIONAL
02299     IN PCWSTR   SourceTagfile,      OPTIONAL
02300     IN PCWSTR   TargetDirectory,
02301     IN PCWSTR   TargetFilename,     OPTIONAL
02302     IN DWORD    CopyStyle
02303     );
02304 
02305 #ifdef UNICODE
02306 #define SetupQueueCopy SetupQueueCopyW
02307 #else
02308 #define SetupQueueCopy SetupQueueCopyA
02309 #endif
02310 
02311 
02312 WINSETUPAPI
02313 BOOL
02314 WINAPI
02315 SetupQueueDefaultCopyA(
02316     IN HSPFILEQ QueueHandle,
02317     IN HINF     InfHandle,
02318     IN PCSTR    SourceRootPath,
02319     IN PCSTR    SourceFilename,
02320     IN PCSTR    TargetFilename,
02321     IN DWORD    CopyStyle
02322     );
02323 
02324 WINSETUPAPI
02325 BOOL
02326 WINAPI
02327 SetupQueueDefaultCopyW(
02328     IN HSPFILEQ QueueHandle,
02329     IN HINF     InfHandle,
02330     IN PCWSTR   SourceRootPath,
02331     IN PCWSTR   SourceFilename,
02332     IN PCWSTR   TargetFilename,
02333     IN DWORD    CopyStyle
02334     );
02335 
02336 #ifdef UNICODE
02337 #define SetupQueueDefaultCopy SetupQueueDefaultCopyW
02338 #else
02339 #define SetupQueueDefaultCopy SetupQueueDefaultCopyA
02340 #endif
02341 
02342 
02343 WINSETUPAPI
02344 BOOL
02345 WINAPI
02346 SetupQueueCopySectionA(
02347     IN HSPFILEQ QueueHandle,
02348     IN PCSTR    SourceRootPath,
02349     IN HINF     InfHandle,
02350     IN HINF     ListInfHandle,   OPTIONAL
02351     IN PCSTR    Section,
02352     IN DWORD    CopyStyle
02353     );
02354 
02355 WINSETUPAPI
02356 BOOL
02357 WINAPI
02358 SetupQueueCopySectionW(
02359     IN HSPFILEQ QueueHandle,
02360     IN PCWSTR   SourceRootPath,
02361     IN HINF     InfHandle,
02362     IN HINF     ListInfHandle,   OPTIONAL
02363     IN PCWSTR   Section,
02364     IN DWORD    CopyStyle
02365     );
02366 
02367 #ifdef UNICODE
02368 #define SetupQueueCopySection SetupQueueCopySectionW
02369 #else
02370 #define SetupQueueCopySection SetupQueueCopySectionA
02371 #endif
02372 
02373 
02374 WINSETUPAPI
02375 BOOL
02376 WINAPI
02377 SetupQueueDeleteA(
02378     IN HSPFILEQ QueueHandle,
02379     IN PCSTR    PathPart1,
02380     IN PCSTR    PathPart2       OPTIONAL
02381     );
02382 
02383 WINSETUPAPI
02384 BOOL
02385 WINAPI
02386 SetupQueueDeleteW(
02387     IN HSPFILEQ QueueHandle,
02388     IN PCWSTR   PathPart1,
02389     IN PCWSTR   PathPart2       OPTIONAL
02390     );
02391 
02392 #ifdef UNICODE
02393 #define SetupQueueDelete SetupQueueDeleteW
02394 #else
02395 #define SetupQueueDelete SetupQueueDeleteA
02396 #endif
02397 
02398 
02399 WINSETUPAPI
02400 BOOL
02401 WINAPI
02402 SetupQueueDeleteSectionA(
02403     IN HSPFILEQ QueueHandle,
02404     IN HINF     InfHandle,
02405     IN HINF     ListInfHandle,   OPTIONAL
02406     IN PCSTR    Section
02407     );
02408 
02409 WINSETUPAPI
02410 BOOL
02411 WINAPI
02412 SetupQueueDeleteSectionW(
02413     IN HSPFILEQ QueueHandle,
02414     IN HINF     InfHandle,
02415     IN HINF     ListInfHandle,   OPTIONAL
02416     IN PCWSTR   Section
02417     );
02418 
02419 #ifdef UNICODE
02420 #define SetupQueueDeleteSection SetupQueueDeleteSectionW
02421 #else
02422 #define SetupQueueDeleteSection SetupQueueDeleteSectionA
02423 #endif
02424 
02425 
02426 WINSETUPAPI
02427 BOOL
02428 WINAPI
02429 SetupQueueRenameA(
02430     IN HSPFILEQ QueueHandle,
02431     IN PCSTR    SourcePath,
02432     IN PCSTR    SourceFilename, OPTIONAL
02433     IN PCSTR    TargetPath,     OPTIONAL
02434     IN PCSTR    TargetFilename
02435     );
02436 
02437 WINSETUPAPI
02438 BOOL
02439 WINAPI
02440 SetupQueueRenameW(
02441     IN HSPFILEQ QueueHandle,
02442     IN PCWSTR   SourcePath,
02443     IN PCWSTR   SourceFilename, OPTIONAL
02444     IN PCWSTR   TargetPath,     OPTIONAL
02445     IN PCWSTR   TargetFilename
02446     );
02447 
02448 #ifdef UNICODE
02449 #define SetupQueueRename SetupQueueRenameW
02450 #else
02451 #define SetupQueueRename SetupQueueRenameA
02452 #endif
02453 
02454 
02455 WINSETUPAPI
02456 BOOL
02457 WINAPI
02458 SetupQueueRenameSectionA(
02459     IN HSPFILEQ QueueHandle,
02460     IN HINF     InfHandle,
02461     IN HINF     ListInfHandle,   OPTIONAL
02462     IN PCSTR    Section
02463     );
02464 
02465 WINSETUPAPI
02466 BOOL
02467 WINAPI
02468 SetupQueueRenameSectionW(
02469     IN HSPFILEQ QueueHandle,
02470     IN HINF     InfHandle,
02471     IN HINF     ListInfHandle,   OPTIONAL
02472     IN PCWSTR   Section
02473     );
02474 
02475 #ifdef UNICODE
02476 #define SetupQueueRenameSection SetupQueueRenameSectionW
02477 #else
02478 #define SetupQueueRenameSection SetupQueueRenameSectionA
02479 #endif
02480 
02481 
02482 WINSETUPAPI
02483 BOOL
02484 WINAPI
02485 SetupCommitFileQueueA(
02486     IN HWND                Owner,         OPTIONAL
02487     IN HSPFILEQ            QueueHandle,
02488     IN PSP_FILE_CALLBACK_A MsgHandler,
02489     IN PVOID               Context
02490     );
02491 
02492 WINSETUPAPI
02493 BOOL
02494 WINAPI
02495 SetupCommitFileQueueW(
02496     IN HWND                Owner,         OPTIONAL
02497     IN HSPFILEQ            QueueHandle,
02498     IN PSP_FILE_CALLBACK_W MsgHandler,
02499     IN PVOID               Context
02500     );
02501 
02502 #ifdef UNICODE
02503 #define SetupCommitFileQueue SetupCommitFileQueueW
02504 #else
02505 #define SetupCommitFileQueue SetupCommitFileQueueA
02506 #endif
02507 
02508 
02509 WINSETUPAPI
02510 BOOL
02511 WINAPI
02512 SetupScanFileQueueA(
02513     IN  HSPFILEQ            FileQueue,
02514     IN  DWORD               Flags,
02515     IN  HWND                Window,            OPTIONAL
02516     IN  PSP_FILE_CALLBACK_A CallbackRoutine,   OPTIONAL
02517     IN  PVOID               CallbackContext,   OPTIONAL
02518     OUT PDWORD              Result
02519     );
02520 
02521 WINSETUPAPI
02522 BOOL
02523 WINAPI
02524 SetupScanFileQueueW(
02525     IN  HSPFILEQ            FileQueue,
02526     IN  DWORD               Flags,
02527     IN  HWND                Window,            OPTIONAL
02528     IN  PSP_FILE_CALLBACK_W CallbackRoutine,   OPTIONAL
02529     IN  PVOID               CallbackContext,   OPTIONAL
02530     OUT PDWORD              Result
02531     );
02532 
02533 #ifdef UNICODE
02534 #define SetupScanFileQueue SetupScanFileQueueW
02535 #else
02536 #define SetupScanFileQueue SetupScanFileQueueA
02537 #endif
02538 
02539 //
02540 // Define flags for SetupScanFileQueue.
02541 //
02542 #define SPQ_SCAN_FILE_PRESENCE  0x00000001
02543 #define SPQ_SCAN_FILE_VALIDITY  0x00000002
02544 #define SPQ_SCAN_USE_CALLBACK   0x00000004
02545 #define SPQ_SCAN_INFORM_USER    0x00000010
02546 
02547 //
02548 // Define flags used with Param2 for SPFILENOTIFY_QUEUESCAN
02549 //
02550 #define SPQ_DELAYED_COPY        0x00000001  // file was in use; registered for delayed copy
02551 
02552 
02553 //
02554 // Define OEM Source Type values for use in SetupCopyOEMInf.
02555 //
02556 #define SPOST_NONE  0
02557 #define SPOST_PATH  1
02558 #define SPOST_URL   2
02559 #define SPOST_MAX   3
02560 
02561 WINSETUPAPI
02562 BOOL
02563 WINAPI
02564 SetupCopyOEMInfA(
02565     IN  PCSTR   SourceInfFileName,
02566     IN  PCSTR   OEMSourceMediaLocation,         OPTIONAL
02567     IN  DWORD   OEMSourceMediaType,
02568     IN  DWORD   CopyStyle,
02569     OUT PSTR    DestinationInfFileName,         OPTIONAL
02570     IN  DWORD   DestinationInfFileNameSize,
02571     OUT PDWORD  RequiredSize,                   OPTIONAL
02572     OUT PSTR   *DestinationInfFileNameComponent OPTIONAL
02573     );
02574 
02575 WINSETUPAPI
02576 BOOL
02577 WINAPI
02578 SetupCopyOEMInfW(
02579     IN  PCWSTR  SourceInfFileName,
02580     IN  PCWSTR  OEMSourceMediaLocation,         OPTIONAL
02581     IN  DWORD   OEMSourceMediaType,
02582     IN  DWORD   CopyStyle,
02583     OUT PWSTR   DestinationInfFileName,         OPTIONAL
02584     IN  DWORD   DestinationInfFileNameSize,
02585     OUT PDWORD  RequiredSize,                   OPTIONAL
02586     OUT PWSTR  *DestinationInfFileNameComponent OPTIONAL
02587     );
02588 
02589 #ifdef UNICODE
02590 #define SetupCopyOEMInf SetupCopyOEMInfW
02591 #else
02592 #define SetupCopyOEMInf SetupCopyOEMInfA
02593 #endif
02594 
02595 
02596 //
02597 // Disk space list APIs
02598 //
02599 WINSETUPAPI
02600 HDSKSPC
02601 WINAPI
02602 SetupCreateDiskSpaceListA(
02603     IN PVOID Reserved1,
02604     IN DWORD Reserved2,
02605     IN UINT  Flags
02606     );
02607 
02608 WINSETUPAPI
02609 HDSKSPC
02610 WINAPI
02611 SetupCreateDiskSpaceListW(
02612     IN PVOID Reserved1,
02613     IN DWORD Reserved2,
02614     IN UINT  Flags
02615     );
02616 
02617 #ifdef UNICODE
02618 #define SetupCreateDiskSpaceList SetupCreateDiskSpaceListW
02619 #else
02620 #define SetupCreateDiskSpaceList SetupCreateDiskSpaceListA
02621 #endif
02622 
02623 //
02624 // Flags for SetupCreateDiskSpaceList
02625 //
02626 #define SPDSL_IGNORE_DISK              0x00000001  // ignore deletes and on-disk files in copies
02627 #define SPDSL_DISALLOW_NEGATIVE_ADJUST 0x00000002
02628 
02629 
02630 WINSETUPAPI
02631 HDSKSPC
02632 WINAPI
02633 SetupDuplicateDiskSpaceListA(
02634     IN HDSKSPC DiskSpace,
02635     IN PVOID   Reserved1,
02636     IN DWORD   Reserved2,
02637     IN UINT    Flags
02638     );
02639 
02640 WINSETUPAPI
02641 HDSKSPC
02642 WINAPI
02643 SetupDuplicateDiskSpaceListW(
02644     IN HDSKSPC DiskSpace,
02645     IN PVOID   Reserved1,
02646     IN DWORD   Reserved2,
02647     IN UINT    Flags
02648     );
02649 
02650 #ifdef UNICODE
02651 #define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListW
02652 #else
02653 #define SetupDuplicateDiskSpaceList SetupDuplicateDiskSpaceListA
02654 #endif
02655 
02656 
02657 WINSETUPAPI
02658 BOOL
02659 WINAPI
02660 SetupDestroyDiskSpaceList(
02661     IN OUT HDSKSPC DiskSpace
02662     );
02663 
02664 
02665 WINSETUPAPI
02666 BOOL
02667 WINAPI
02668 SetupQueryDrivesInDiskSpaceListA(
02669     IN  HDSKSPC DiskSpace,
02670     OUT PSTR    ReturnBuffer,       OPTIONAL
02671     IN  DWORD   ReturnBufferSize,
02672     OUT PDWORD  RequiredSize        OPTIONAL
02673     );
02674 
02675 WINSETUPAPI
02676 BOOL
02677 WINAPI
02678 SetupQueryDrivesInDiskSpaceListW(
02679     IN  HDSKSPC DiskSpace,
02680     OUT PWSTR   ReturnBuffer,       OPTIONAL
02681     IN  DWORD   ReturnBufferSize,
02682     OUT PDWORD  RequiredSize        OPTIONAL
02683     );
02684 
02685 #ifdef UNICODE
02686 #define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListW
02687 #else
02688 #define SetupQueryDrivesInDiskSpaceList SetupQueryDrivesInDiskSpaceListA
02689 #endif
02690 
02691 
02692 WINSETUPAPI
02693 BOOL
02694 WINAPI
02695 SetupQuerySpaceRequiredOnDriveA(
02696     IN  HDSKSPC   DiskSpace,
02697     IN  PCSTR     DriveSpec,
02698     OUT LONGLONG *SpaceRequired,
02699     IN  PVOID     Reserved1,
02700     IN  UINT      Reserved2
02701     );
02702 
02703 WINSETUPAPI
02704 BOOL
02705 WINAPI
02706 SetupQuerySpaceRequiredOnDriveW(
02707     IN  HDSKSPC   DiskSpace,
02708     IN  PCWSTR    DriveSpec,
02709     OUT LONGLONG *SpaceRequired,
02710     IN  PVOID     Reserved1,
02711     IN  UINT      Reserved2
02712     );
02713 
02714 #ifdef UNICODE
02715 #define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveW
02716 #else
02717 #define SetupQuerySpaceRequiredOnDrive SetupQuerySpaceRequiredOnDriveA
02718 #endif
02719 
02720 
02721 WINSETUPAPI
02722 BOOL
02723 WINAPI
02724 SetupAdjustDiskSpaceListA(
02725     IN HDSKSPC  DiskSpace,
02726     IN LPCSTR   DriveRoot,
02727     IN LONGLONG Amount,
02728     IN PVOID    Reserved1,
02729     IN UINT     Reserved2
02730     );
02731 
02732 WINSETUPAPI
02733 BOOL
02734 WINAPI
02735 SetupAdjustDiskSpaceListW(
02736     IN HDSKSPC  DiskSpace,
02737     IN LPCWSTR  DriveRoot,
02738     IN LONGLONG Amount,
02739     IN PVOID    Reserved1,
02740     IN UINT     Reserved2
02741     );
02742 
02743 #ifdef UNICODE
02744 #define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListW
02745 #else
02746 #define SetupAdjustDiskSpaceList SetupAdjustDiskSpaceListA
02747 #endif
02748 
02749 
02750 WINSETUPAPI
02751 BOOL
02752 WINAPI
02753 SetupAddToDiskSpaceListA(
02754     IN HDSKSPC  DiskSpace,
02755     IN PCSTR    TargetFilespec,
02756     IN LONGLONG FileSize,
02757     IN UINT     Operation,
02758     IN PVOID    Reserved1,
02759     IN UINT     Reserved2
02760     );
02761 
02762 WINSETUPAPI
02763 BOOL
02764 WINAPI
02765 SetupAddToDiskSpaceListW(
02766     IN HDSKSPC  DiskSpace,
02767     IN PCWSTR   TargetFilespec,
02768     IN LONGLONG FileSize,
02769     IN UINT     Operation,
02770     IN PVOID    Reserved1,
02771     IN UINT     Reserved2
02772     );
02773 
02774 #ifdef UNICODE
02775 #define SetupAddToDiskSpaceList SetupAddToDiskSpaceListW
02776 #else
02777 #define SetupAddToDiskSpaceList SetupAddToDiskSpaceListA
02778 #endif
02779 
02780 
02781 WINSETUPAPI
02782 BOOL
02783 WINAPI
02784 SetupAddSectionToDiskSpaceListA(
02785     IN HDSKSPC DiskSpace,
02786     IN HINF    InfHandle,
02787     IN HINF    ListInfHandle,  OPTIONAL
02788     IN PCSTR   SectionName,
02789     IN UINT    Operation,
02790     IN PVOID   Reserved1,
02791     IN UINT    Reserved2
02792     );
02793 
02794 WINSETUPAPI
02795 BOOL
02796 WINAPI
02797 SetupAddSectionToDiskSpaceListW(
02798     IN HDSKSPC DiskSpace,
02799     IN HINF    InfHandle,
02800     IN HINF    ListInfHandle,  OPTIONAL
02801     IN PCWSTR  SectionName,
02802     IN UINT    Operation,
02803     IN PVOID   Reserved1,
02804     IN UINT    Reserved2
02805     );
02806 
02807 #ifdef UNICODE
02808 #define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListW
02809 #else
02810 #define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListA
02811 #endif
02812 
02813 
02814 WINSETUPAPI
02815 BOOL
02816 WINAPI
02817 SetupAddInstallSectionToDiskSpaceListA(
02818     IN HDSKSPC DiskSpace,
02819     IN HINF    InfHandle,
02820     IN HINF    LayoutInfHandle,     OPTIONAL
02821     IN PCSTR   SectionName,
02822     IN PVOID   Reserved1,
02823     IN UINT    Reserved2
02824     );
02825 
02826 WINSETUPAPI
02827 BOOL
02828 WINAPI
02829 SetupAddInstallSectionToDiskSpaceListW(
02830     IN HDSKSPC DiskSpace,
02831     IN HINF    InfHandle,
02832     IN HINF    LayoutInfHandle,     OPTIONAL
02833     IN PCWSTR  SectionName,
02834     IN PVOID   Reserved1,
02835     IN UINT    Reserved2
02836     );
02837 
02838 #ifdef UNICODE
02839 #define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListW
02840 #else
02841 #define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListA
02842 #endif
02843 
02844 
02845 WINSETUPAPI
02846 BOOL
02847 WINAPI
02848 SetupRemoveFromDiskSpaceListA(
02849     IN HDSKSPC DiskSpace,
02850     IN PCSTR   TargetFilespec,
02851     IN UINT    Operation,
02852     IN PVOID   Reserved1,
02853     IN UINT    Reserved2
02854     );
02855 
02856 WINSETUPAPI
02857 BOOL
02858 WINAPI
02859 SetupRemoveFromDiskSpaceListW(
02860     IN HDSKSPC DiskSpace,
02861     IN PCWSTR  TargetFilespec,
02862     IN UINT    Operation,
02863     IN PVOID   Reserved1,
02864     IN UINT    Reserved2
02865     );
02866 
02867 #ifdef UNICODE
02868 #define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListW
02869 #else
02870 #define SetupRemoveFromDiskSpaceList SetupRemoveFromDiskSpaceListA
02871 #endif
02872 
02873 
02874 WINSETUPAPI
02875 BOOL
02876 WINAPI
02877 SetupRemoveSectionFromDiskSpaceListA(
02878     IN HDSKSPC DiskSpace,
02879     IN HINF    InfHandle,
02880     IN HINF    ListInfHandle,  OPTIONAL
02881     IN PCSTR   SectionName,
02882     IN UINT    Operation,
02883     IN PVOID   Reserved1,
02884     IN UINT    Reserved2
02885     );
02886 
02887 WINSETUPAPI
02888 BOOL
02889 WINAPI
02890 SetupRemoveSectionFromDiskSpaceListW(
02891     IN HDSKSPC DiskSpace,
02892     IN HINF    InfHandle,
02893     IN HINF    ListInfHandle,  OPTIONAL
02894     IN PCWSTR  SectionName,
02895     IN UINT    Operation,
02896     IN PVOID   Reserved1,
02897     IN UINT    Reserved2
02898     );
02899 
02900 #ifdef UNICODE
02901 #define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListW
02902 #else
02903 #define SetupRemoveSectionFromDiskSpaceList SetupRemoveSectionFromDiskSpaceListA
02904 #endif
02905 
02906 
02907 WINSETUPAPI
02908 BOOL
02909 WINAPI
02910 SetupRemoveInstallSectionFromDiskSpaceListA(
02911     IN HDSKSPC DiskSpace,
02912     IN HINF    InfHandle,
02913     IN HINF    LayoutInfHandle,     OPTIONAL
02914     IN PCSTR   SectionName,
02915     IN PVOID   Reserved1,
02916     IN UINT    Reserved2
02917     );
02918 
02919 WINSETUPAPI
02920 BOOL
02921 WINAPI
02922 SetupRemoveInstallSectionFromDiskSpaceListW(
02923     IN HDSKSPC DiskSpace,
02924     IN HINF    InfHandle,
02925     IN HINF    LayoutInfHandle,     OPTIONAL
02926     IN PCWSTR  SectionName,
02927     IN PVOID   Reserved1,
02928     IN UINT    Reserved2
02929     );
02930 
02931 #ifdef UNICODE
02932 #define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListW
02933 #else
02934 #define SetupRemoveInstallSectionFromDiskSpaceList SetupRemoveInstallSectionFromDiskSpaceListA
02935 #endif
02936 
02937 
02938 //
02939 // Cabinet APIs
02940 //
02941 
02942 WINSETUPAPI
02943 BOOL
02944 WINAPI
02945 SetupIterateCabinetA(
02946     IN  PCSTR               CabinetFile,
02947     IN  DWORD               Reserved,
02948     IN  PSP_FILE_CALLBACK_A MsgHandler,
02949     IN  PVOID               Context
02950     );
02951 
02952 WINSETUPAPI
02953 BOOL
02954 WINAPI
02955 SetupIterateCabinetW(
02956     IN  PCWSTR              CabinetFile,
02957     IN  DWORD               Reserved,
02958     IN  PSP_FILE_CALLBACK_W MsgHandler,
02959     IN  PVOID               Context
02960     );
02961 
02962 #ifdef UNICODE
02963 #define SetupIterateCabinet SetupIterateCabinetW
02964 #else
02965 #define SetupIterateCabinet SetupIterateCabinetA
02966 #endif
02967 
02968 
02969 WINSETUPAPI
02970 INT
02971 WINAPI
02972 SetupPromptReboot(
02973     IN HSPFILEQ FileQueue,  OPTIONAL
02974     IN HWND     Owner,
02975     IN BOOL     ScanOnly
02976     );
02977 
02978 //
02979 // Define flags that are returned by SetupPromptReboot
02980 //
02981 #define SPFILEQ_FILE_IN_USE         0x00000001
02982 #define SPFILEQ_REBOOT_RECOMMENDED  0x00000002
02983 #define SPFILEQ_REBOOT_IN_PROGRESS  0x00000004
02984 
02985 
02986 WINSETUPAPI
02987 PVOID
02988 WINAPI
02989 SetupInitDefaultQueueCallback(
02990     IN HWND OwnerWindow
02991     );
02992 
02993 WINSETUPAPI
02994 PVOID
02995 WINAPI
02996 SetupInitDefaultQueueCallbackEx(
02997     IN HWND  OwnerWindow,
02998     IN HWND  AlternateProgressWindow, OPTIONAL
02999     IN UINT  ProgressMessage,
03000     IN DWORD Reserved1,
03001     IN PVOID Reserved2
03002     );
03003 
03004 WINSETUPAPI
03005 VOID
03006 WINAPI
03007 SetupTermDefaultQueueCallback(
03008     IN PVOID Context
03009     );
03010 
03011 WINSETUPAPI
03012 UINT
03013 WINAPI
03014 SetupDefaultQueueCallbackA(
03015     IN PVOID Context,
03016     IN UINT  Notification,
03017     IN UINT  Param1,
03018     IN UINT  Param2
03019     );
03020 
03021 WINSETUPAPI
03022 UINT
03023 WINAPI
03024 SetupDefaultQueueCallbackW(
03025     IN PVOID Context,
03026     IN UINT  Notification,
03027     IN UINT  Param1,
03028     IN UINT  Param2
03029     );
03030 
03031 #ifdef UNICODE
03032 #define SetupDefaultQueueCallback SetupDefaultQueueCallbackW
03033 #else
03034 #define SetupDefaultQueueCallback SetupDefaultQueueCallbackA
03035 #endif
03036 
03037 
03038 //
03039 // Flags for AddReg section lines in INF.  The corresponding value
03040 // is <ValueType> in the AddReg line format given below:
03041 //
03042 // <RegRootString>,<SubKey>,<ValueName>,<ValueType>,<Value>...
03043 //
03044 // The low word contains basic flags concerning the general data type
03045 // and AddReg action. The high word contains values that more specifically
03046 // identify the data type of the registry value.  The high word is ignored
03047 // by the 16-bit Windows 95 SETUPX APIs.
03048 //
03049 #define FLG_ADDREG_BINVALUETYPE     ( 0x00000001 )
03050 #define FLG_ADDREG_NOCLOBBER        ( 0x00000002 )
03051 #define FLG_ADDREG_DELVAL           ( 0x00000004 )
03052 #define FLG_ADDREG_APPEND           ( 0x00000008 ) // Currently supported only
03053                                                    // for REG_MULTI_SZ values.
03054 #define FLG_ADDREG_KEYONLY          ( 0x00000010 ) // Just create the key, ignore value
03055 #define FLG_ADDREG_OVERWRITEONLY    ( 0x00000020 ) // Set only if value already exists
03056 
03057 #define FLG_ADDREG_TYPE_MASK        ( 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE )
03058 #define FLG_ADDREG_TYPE_SZ          ( 0x00000000                           )
03059 #define FLG_ADDREG_TYPE_MULTI_SZ    ( 0x00010000                           )
03060 #define FLG_ADDREG_TYPE_EXPAND_SZ   ( 0x00020000                           )
03061 #define FLG_ADDREG_TYPE_BINARY      ( 0x00000000 | FLG_ADDREG_BINVALUETYPE )
03062 #define FLG_ADDREG_TYPE_DWORD       ( 0x00010000 | FLG_ADDREG_BINVALUETYPE )
03063 #define FLG_ADDREG_TYPE_NONE        ( 0x00020000 | FLG_ADDREG_BINVALUETYPE )
03064 
03065 //
03066 // The INF may supply any arbitrary data type ordinal in the highword except
03067 // for the following: REG_NONE, REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ.  If this
03068 // technique is used, then the data is given in binary format, one byte per
03069 // field.
03070 //
03071 
03072 
03073 WINSETUPAPI
03074 BOOL
03075 WINAPI
03076 SetupInstallFromInfSectionA(
03077     IN HWND                Owner,
03078     IN HINF                InfHandle,
03079     IN PCSTR               SectionName,
03080     IN UINT                Flags,
03081     IN HKEY                RelativeKeyRoot,   OPTIONAL
03082     IN PCSTR               SourceRootPath,    OPTIONAL
03083     IN UINT                CopyFlags,
03084     IN PSP_FILE_CALLBACK_A MsgHandler,
03085     IN PVOID               Context,
03086     IN HDEVINFO            DeviceInfoSet,     OPTIONAL
03087     IN PSP_DEVINFO_DATA    DeviceInfoData     OPTIONAL
03088     );
03089 
03090 WINSETUPAPI
03091 BOOL
03092 WINAPI
03093 SetupInstallFromInfSectionW(
03094     IN HWND                Owner,
03095     IN HINF                InfHandle,
03096     IN PCWSTR              SectionName,
03097     IN UINT                Flags,
03098     IN HKEY                RelativeKeyRoot,   OPTIONAL
03099     IN PCWSTR              SourceRootPath,    OPTIONAL
03100     IN UINT                CopyFlags,
03101     IN PSP_FILE_CALLBACK_W MsgHandler,
03102     IN PVOID               Context,
03103     IN HDEVINFO            DeviceInfoSet,     OPTIONAL
03104     IN PSP_DEVINFO_DATA    DeviceInfoData     OPTIONAL
03105     );
03106 
03107 #ifdef UNICODE
03108 #define SetupInstallFromInfSection SetupInstallFromInfSectionW
03109 #else
03110 #define SetupInstallFromInfSection SetupInstallFromInfSectionA
03111 #endif
03112 
03113 //
03114 // Flags for SetupInstallFromInfSection
03115 //
03116 #define SPINST_LOGCONFIG                0x00000001
03117 #define SPINST_INIFILES                 0x00000002
03118 #define SPINST_REGISTRY                 0x00000004
03119 #define SPINST_INI2REG                  0x00000008
03120 #define SPINST_FILES                    0x00000010
03121 #define SPINST_ALL                      0x0000001f
03122 #define SPINST_SINGLESECTION            0x00010000
03123 #define SPINST_LOGCONFIG_IS_FORCED      0x00020000
03124 #define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000
03125 
03126 
03127 WINSETUPAPI
03128 BOOL
03129 WINAPI
03130 SetupInstallFilesFromInfSectionA(
03131     IN HINF     InfHandle,
03132     IN HINF     LayoutInfHandle,    OPTIONAL
03133     IN HSPFILEQ FileQueue,
03134     IN PCSTR    SectionName,
03135     IN PCSTR    SourceRootPath,     OPTIONAL
03136     IN UINT     CopyFlags
03137     );
03138 
03139 WINSETUPAPI
03140 BOOL
03141 WINAPI
03142 SetupInstallFilesFromInfSectionW(
03143     IN HINF     InfHandle,
03144     IN HINF     LayoutInfHandle,    OPTIONAL
03145     IN HSPFILEQ FileQueue,
03146     IN PCWSTR   SectionName,
03147     IN PCWSTR   SourceRootPath,     OPTIONAL
03148     IN UINT     CopyFlags
03149     );
03150 
03151 #ifdef UNICODE
03152 #define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionW
03153 #else
03154 #define SetupInstallFilesFromInfSection SetupInstallFilesFromInfSectionA
03155 #endif
03156 
03157 
03158 //
03159 // Flags for SetupInstallServicesFromInfSection(Ex).  These flags are also used in
03160 // the flags field of AddService or DelService lines in a device INF.  Some of these
03161 // flags are not permitted in the non-Ex API.  These flags are marked as such below.
03162 //
03163 #define SPSVCINST_TAGTOFRONT          (0x00000001)  // (AddService) move service's tag to front of its group order list
03164 #define SPSVCINST_ASSOCSERVICE        (0x00000002)  // (AddService) **Ex API only** mark this service as the function
03165                                                     // driver for the device being installed.
03166 #define SPSVCINST_DELETEEVENTLOGENTRY (0x00000004)  // (DelService) delete the associated event log entry for a service
03167                                                     // specified in a DelService entry
03168 
03169 WINSETUPAPI
03170 BOOL
03171 WINAPI
03172 SetupInstallServicesFromInfSectionA(
03173     IN HINF   InfHandle,
03174     IN PCSTR  SectionName,
03175     IN DWORD  Flags
03176     );
03177 
03178 WINSETUPAPI
03179 BOOL
03180 WINAPI
03181 SetupInstallServicesFromInfSectionW(
03182     IN HINF   InfHandle,
03183     IN PCWSTR SectionName,
03184     IN DWORD  Flags
03185     );
03186 
03187 #ifdef UNICODE
03188 #define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionW
03189 #else
03190 #define SetupInstallServicesFromInfSection SetupInstallServicesFromInfSectionA
03191 #endif
03192 
03193 
03194 WINSETUPAPI
03195 BOOL
03196 WINAPI
03197 SetupInstallServicesFromInfSectionExA(
03198     IN HINF             InfHandle,
03199     IN PCSTR            SectionName,
03200     IN DWORD            Flags,
03201     IN HDEVINFO         DeviceInfoSet,  OPTIONAL
03202     IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
03203     IN PVOID            Reserved1,
03204     IN PVOID            Reserved2
03205     );
03206 
03207 WINSETUPAPI
03208 BOOL
03209 WINAPI
03210 SetupInstallServicesFromInfSectionExW(
03211     IN HINF             InfHandle,
03212     IN PCWSTR           SectionName,
03213     IN DWORD            Flags,
03214     IN HDEVINFO         DeviceInfoSet,  OPTIONAL
03215     IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
03216     IN PVOID            Reserved1,
03217     IN PVOID            Reserved2
03218     );
03219 
03220 #ifdef UNICODE
03221 #define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExW
03222 #else
03223 #define SetupInstallServicesFromInfSectionEx SetupInstallServicesFromInfSectionExA
03224 #endif
03225 
03226 
03227 //
03228 // Define handle type for Setup file log.
03229 //
03230 typedef PVOID HSPFILELOG;
03231 
03232 WINSETUPAPI
03233 HSPFILELOG
03234 WINAPI
03235 SetupInitializeFileLogA(
03236     IN PCSTR LogFileName,   OPTIONAL
03237     IN DWORD Flags
03238     );
03239 
03240 WINSETUPAPI
03241 HSPFILELOG
03242 WINAPI
03243 SetupInitializeFileLogW(
03244     IN PCWSTR LogFileName,  OPTIONAL
03245     IN DWORD  Flags
03246     );
03247 
03248 #ifdef UNICODE
03249 #define SetupInitializeFileLog SetupInitializeFileLogW
03250 #else
03251 #define SetupInitializeFileLog SetupInitializeFileLogA
03252 #endif
03253 
03254 //
03255 // Flags for SetupInitializeFileLog
03256 //
03257 #define SPFILELOG_SYSTEMLOG     0x00000001  // use system log -- must be Administrator
03258 #define SPFILELOG_FORCENEW      0x00000002  // not valid with SPFILELOG_SYSTEMLOG
03259 #define SPFILELOG_QUERYONLY     0x00000004  // allows non-administrators to read system log
03260 
03261 
03262 WINSETUPAPI
03263 BOOL
03264 WINAPI
03265 SetupTerminateFileLog(
03266     IN HSPFILELOG FileLogHandle
03267     );
03268 
03269 
03270 WINSETUPAPI
03271 BOOL
03272 WINAPI
03273 SetupLogFileA(
03274     IN HSPFILELOG FileLogHandle,
03275     IN PCSTR      LogSectionName,   OPTIONAL
03276     IN PCSTR      SourceFilename,
03277     IN PCSTR      TargetFilename,
03278     IN DWORD      Checksum,         OPTIONAL
03279     IN PCSTR      DiskTagfile,      OPTIONAL
03280     IN PCSTR      DiskDescription,  OPTIONAL
03281     IN PCSTR      OtherInfo,        OPTIONAL
03282     IN DWORD      Flags
03283     );
03284 
03285 WINSETUPAPI
03286 BOOL
03287 WINAPI
03288 SetupLogFileW(
03289     IN HSPFILELOG FileLogHandle,
03290     IN PCWSTR     LogSectionName,   OPTIONAL
03291     IN PCWSTR     SourceFilename,
03292     IN PCWSTR     TargetFilename,
03293     IN DWORD      Checksum,         OPTIONAL
03294     IN PCWSTR     DiskTagfile,      OPTIONAL
03295     IN PCWSTR     DiskDescription,  OPTIONAL
03296     IN PCWSTR     OtherInfo,        OPTIONAL
03297     IN DWORD      Flags
03298     );
03299 
03300 #ifdef UNICODE
03301 #define SetupLogFile SetupLogFileW
03302 #else
03303 #define SetupLogFile SetupLogFileA
03304 #endif
03305 
03306 //
03307 // Flags for SetupLogFile
03308 //
03309 #define SPFILELOG_OEMFILE   0x00000001
03310 
03311 
03312 WINSETUPAPI
03313 BOOL
03314 WINAPI
03315 SetupRemoveFileLogEntryA(
03316     IN HSPFILELOG FileLogHandle,
03317     IN PCSTR      LogSectionName,   OPTIONAL
03318     IN PCSTR      TargetFilename    OPTIONAL
03319     );
03320 
03321 WINSETUPAPI
03322 BOOL
03323 WINAPI
03324 SetupRemoveFileLogEntryW(
03325     IN HSPFILELOG FileLogHandle,
03326     IN PCWSTR     LogSectionName,   OPTIONAL
03327     IN PCWSTR     TargetFilename    OPTIONAL
03328     );
03329 
03330 #ifdef UNICODE
03331 #define SetupRemoveFileLogEntry SetupRemoveFileLogEntryW
03332 #else
03333 #define SetupRemoveFileLogEntry SetupRemoveFileLogEntryA
03334 #endif
03335 
03336 
03337 //
03338 // Items retrievable from SetupQueryFileLog()
03339 //
03340 typedef enum {
03341     SetupFileLogSourceFilename,
03342     SetupFileLogChecksum,
03343     SetupFileLogDiskTagfile,
03344     SetupFileLogDiskDescription,
03345     SetupFileLogOtherInfo,
03346     SetupFileLogMax
03347 } SetupFileLogInfo;
03348 
03349 WINSETUPAPI
03350 BOOL
03351 WINAPI
03352 SetupQueryFileLogA(
03353     IN  HSPFILELOG       FileLogHandle,
03354     IN  PCSTR            LogSectionName,   OPTIONAL
03355     IN  PCSTR            TargetFilename,
03356     IN  SetupFileLogInfo DesiredInfo,
03357     OUT PSTR             DataOut,          OPTIONAL
03358     IN  DWORD            ReturnBufferSize,
03359     OUT PDWORD           RequiredSize      OPTIONAL
03360     );
03361 
03362 WINSETUPAPI
03363 BOOL
03364 WINAPI
03365 SetupQueryFileLogW(
03366     IN  HSPFILELOG       FileLogHandle,
03367     IN  PCWSTR           LogSectionName,   OPTIONAL
03368     IN  PCWSTR           TargetFilename,
03369     IN  SetupFileLogInfo DesiredInfo,
03370     OUT PWSTR            DataOut,          OPTIONAL
03371     IN  DWORD            ReturnBufferSize,
03372     OUT PDWORD           RequiredSize      OPTIONAL
03373     );
03374 
03375 #ifdef UNICODE
03376 #define SetupQueryFileLog SetupQueryFileLogW
03377 #else
03378 #define SetupQueryFileLog SetupQueryFileLogA
03379 #endif
03380 
03381 //
03382 // Text logging APIs
03383 //
03384 
03385 typedef enum {
03386     LogSevInformation,
03387     LogSevWarning,
03388     LogSevError,
03389     LogSevFatalError,
03390     LogSevMaximum
03391 } LogSeverity;
03392 
03393 WINSETUPAPI
03394 BOOL
03395 WINAPI
03396 SetupOpenLog (
03397     BOOL Erase
03398     );
03399 
03400 WINSETUPAPI
03401 BOOL
03402 WINAPI
03403 SetupLogErrorA (
03404     IN  LPCSTR              MessageString,
03405     IN  LogSeverity         Severity
03406     );
03407 
03408 WINSETUPAPI
03409 BOOL
03410 WINAPI
03411 SetupLogErrorW (
03412     IN  LPCWSTR             MessageString,
03413     IN  LogSeverity         Severity
03414     );
03415 
03416 #ifdef UNICODE
03417 #define SetupLogError SetupLogErrorW
03418 #else
03419 #define SetupLogError SetupLogErrorA
03420 #endif
03421 
03422 WINSETUPAPI
03423 VOID
03424 WINAPI
03425 SetupCloseLog (
03426     VOID
03427     );
03428 
03429 
03430 
03431 
03432 
03433 //
03434 // Device Installer APIs
03435 //
03436 
03437 WINSETUPAPI
03438 HDEVINFO
03439 WINAPI
03440 SetupDiCreateDeviceInfoList(
03441     IN LPGUID ClassGuid, OPTIONAL
03442     IN HWND   hwndParent OPTIONAL
03443     );
03444 
03445 
03446 WINSETUPAPI
03447 HDEVINFO
03448 WINAPI
03449 SetupDiCreateDeviceInfoListExA(
03450     IN LPGUID ClassGuid,   OPTIONAL
03451     IN HWND   hwndParent,  OPTIONAL
03452     IN PCSTR  MachineName, OPTIONAL
03453     IN PVOID  Reserved
03454     );
03455 
03456 WINSETUPAPI
03457 HDEVINFO
03458 WINAPI
03459 SetupDiCreateDeviceInfoListExW(
03460     IN LPGUID ClassGuid,   OPTIONAL
03461     IN HWND   hwndParent,  OPTIONAL
03462     IN PCWSTR MachineName, OPTIONAL
03463     IN PVOID  Reserved
03464     );
03465 
03466 #ifdef UNICODE
03467 #define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExW
03468 #else
03469 #define SetupDiCreateDeviceInfoListEx SetupDiCreateDeviceInfoListExA
03470 #endif
03471 
03472 
03473 WINSETUPAPI
03474 BOOL
03475 WINAPI
03476 SetupDiGetDeviceInfoListClass(
03477     IN  HDEVINFO DeviceInfoSet,
03478     OUT LPGUID   ClassGuid
03479     );
03480 
03481 WINSETUPAPI
03482 BOOL
03483 WINAPI
03484 SetupDiGetDeviceInfoListDetailA(
03485     IN  HDEVINFO                       DeviceInfoSet,
03486     OUT PSP_DEVINFO_LIST_DETAIL_DATA_A DeviceInfoSetDetailData
03487     );
03488 
03489 WINSETUPAPI
03490 BOOL
03491 WINAPI
03492 SetupDiGetDeviceInfoListDetailW(
03493     IN  HDEVINFO                       DeviceInfoSet,
03494     OUT PSP_DEVINFO_LIST_DETAIL_DATA_W DeviceInfoSetDetailData
03495     );
03496 
03497 #ifdef UNICODE
03498 #define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailW
03499 #else
03500 #define SetupDiGetDeviceInfoListDetail SetupDiGetDeviceInfoListDetailA
03501 #endif
03502 
03503 
03504 //
03505 // Flags for SetupDiCreateDeviceInfo
03506 //
03507 #define DICD_GENERATE_ID        0x00000001
03508 #define DICD_INHERIT_CLASSDRVS  0x00000002
03509 
03510 WINSETUPAPI
03511 BOOL
03512 WINAPI
03513 SetupDiCreateDeviceInfoA(
03514     IN  HDEVINFO         DeviceInfoSet,
03515     IN  PCSTR            DeviceName,
03516     IN  LPGUID           ClassGuid,
03517     IN  PCSTR            DeviceDescription, OPTIONAL
03518     IN  HWND             hwndParent,        OPTIONAL
03519     IN  DWORD            CreationFlags,
03520     OUT PSP_DEVINFO_DATA DeviceInfoData     OPTIONAL
03521     );
03522 
03523 WINSETUPAPI
03524 BOOL
03525 WINAPI
03526 SetupDiCreateDeviceInfoW(
03527     IN  HDEVINFO         DeviceInfoSet,
03528     IN  PCWSTR           DeviceName,
03529     IN  LPGUID           ClassGuid,
03530     IN  PCWSTR           DeviceDescription, OPTIONAL
03531     IN  HWND             hwndParent,        OPTIONAL
03532     IN  DWORD            CreationFlags,
03533     OUT PSP_DEVINFO_DATA DeviceInfoData     OPTIONAL
03534     );
03535 
03536 #ifdef UNICODE
03537 #define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoW
03538 #else
03539 #define SetupDiCreateDeviceInfo SetupDiCreateDeviceInfoA
03540 #endif
03541 
03542 
03543 //
03544 // Flags for SetupDiOpenDeviceInfo
03545 //
03546 #define DIOD_INHERIT_CLASSDRVS  0x00000002
03547 #define DIOD_CANCEL_REMOVE      0x00000004
03548 
03549 WINSETUPAPI
03550 BOOL
03551 WINAPI
03552 SetupDiOpenDeviceInfoA(
03553     IN  HDEVINFO         DeviceInfoSet,
03554     IN  PCSTR            DeviceInstanceId,
03555     IN  HWND             hwndParent,       OPTIONAL
03556     IN  DWORD            OpenFlags,
03557     OUT PSP_DEVINFO_DATA DeviceInfoData    OPTIONAL
03558     );
03559 
03560 WINSETUPAPI
03561 BOOL
03562 WINAPI
03563 SetupDiOpenDeviceInfoW(
03564     IN  HDEVINFO         DeviceInfoSet,
03565     IN  PCWSTR           DeviceInstanceId,
03566     IN  HWND             hwndParent,       OPTIONAL
03567     IN  DWORD            OpenFlags,
03568     OUT PSP_DEVINFO_DATA DeviceInfoData    OPTIONAL
03569     );
03570 
03571 #ifdef UNICODE
03572 #define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoW
03573 #else
03574 #define SetupDiOpenDeviceInfo SetupDiOpenDeviceInfoA
03575 #endif
03576 
03577 
03578 WINSETUPAPI
03579 BOOL
03580 WINAPI
03581 SetupDiGetDeviceInstanceIdA(
03582     IN  HDEVINFO         DeviceInfoSet,
03583     IN  PSP_DEVINFO_DATA DeviceInfoData,
03584     OUT PSTR             DeviceInstanceId,
03585     IN  DWORD            DeviceInstanceIdSize,
03586     OUT PDWORD           RequiredSize          OPTIONAL
03587     );
03588 
03589 WINSETUPAPI
03590 BOOL
03591 WINAPI
03592 SetupDiGetDeviceInstanceIdW(
03593     IN  HDEVINFO         DeviceInfoSet,
03594     IN  PSP_DEVINFO_DATA DeviceInfoData,
03595     OUT PWSTR            DeviceInstanceId,
03596     IN  DWORD            DeviceInstanceIdSize,
03597     OUT PDWORD           RequiredSize          OPTIONAL
03598     );
03599 
03600 #ifdef UNICODE
03601 #define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdW
03602 #else
03603 #define SetupDiGetDeviceInstanceId SetupDiGetDeviceInstanceIdA
03604 #endif
03605 
03606 
03607 WINSETUPAPI
03608 BOOL
03609 WINAPI
03610 SetupDiDeleteDeviceInfo(
03611     IN HDEVINFO         DeviceInfoSet,
03612     IN PSP_DEVINFO_DATA DeviceInfoData
03613     );
03614 
03615 
03616 WINSETUPAPI
03617 BOOL
03618 WINAPI
03619 SetupDiEnumDeviceInfo(
03620     IN  HDEVINFO         DeviceInfoSet,
03621     IN  DWORD            MemberIndex,
03622     OUT PSP_DEVINFO_DATA DeviceInfoData
03623     );
03624 
03625 
03626 WINSETUPAPI
03627 BOOL
03628 WINAPI
03629 SetupDiDestroyDeviceInfoList(
03630     IN HDEVINFO DeviceInfoSet
03631     );
03632 
03633 
03634 WINSETUPAPI
03635 BOOL
03636 WINAPI
03637 SetupDiEnumDeviceInterfaces(
03638     IN  HDEVINFO                  DeviceInfoSet,
03639     IN  PSP_DEVINFO_DATA          DeviceInfoData,     OPTIONAL
03640     IN  LPGUID                    InterfaceClassGuid,
03641     IN  DWORD                     MemberIndex,
03642     OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
03643     );
03644 
03645 //
03646 // Backward compatibility--do not use
03647 //
03648 #define SetupDiEnumInterfaceDevice SetupDiEnumDeviceInterfaces
03649 
03650 
03651 WINSETUPAPI
03652 BOOL
03653 WINAPI
03654 SetupDiCreateDeviceInterfaceA(
03655     IN  HDEVINFO                  DeviceInfoSet,
03656     IN  PSP_DEVINFO_DATA          DeviceInfoData,
03657     IN  LPGUID                    InterfaceClassGuid,
03658     IN  PCSTR                     ReferenceString,    OPTIONAL
03659     IN  DWORD                     CreationFlags,
03660     OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL
03661     );
03662 
03663 WINSETUPAPI
03664 BOOL
03665 WINAPI
03666 SetupDiCreateDeviceInterfaceW(
03667     IN  HDEVINFO                  DeviceInfoSet,
03668     IN  PSP_DEVINFO_DATA          DeviceInfoData,
03669     IN  LPGUID                    InterfaceClassGuid,
03670     IN  PCWSTR                    ReferenceString,    OPTIONAL
03671     IN  DWORD                     CreationFlags,
03672     OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL
03673     );
03674 
03675 #ifdef UNICODE
03676 #define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceW
03677 #else
03678 #define SetupDiCreateDeviceInterface SetupDiCreateDeviceInterfaceA
03679 #endif
03680 
03681 //
03682 // Backward compatibility--do not use.
03683 //
03684 #define SetupDiCreateInterfaceDeviceW SetupDiCreateDeviceInterfaceW
03685 #define SetupDiCreateInterfaceDeviceA SetupDiCreateDeviceInterfaceA
03686 #ifdef UNICODE
03687 #define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceW
03688 #else
03689 #define SetupDiCreateInterfaceDevice SetupDiCreateDeviceInterfaceA
03690 #endif
03691 
03692 
03693 WINSETUPAPI
03694 BOOL
03695 WINAPI
03696 SetupDiOpenDeviceInterfaceA(
03697     IN  HDEVINFO                  DeviceInfoSet,
03698     IN  PCSTR                     DevicePath,
03699     IN  DWORD                     OpenFlags,
03700     OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL
03701     );
03702 
03703 WINSETUPAPI
03704 BOOL
03705 WINAPI
03706 SetupDiOpenDeviceInterfaceW(
03707     IN  HDEVINFO                  DeviceInfoSet,
03708     IN  PCWSTR                    DevicePath,
03709     IN  DWORD                     OpenFlags,
03710     OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData OPTIONAL
03711     );
03712 
03713 #ifdef UNICODE
03714 #define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceW
03715 #else
03716 #define SetupDiOpenDeviceInterface SetupDiOpenDeviceInterfaceA
03717 #endif
03718 
03719 //
03720 // Backward compatibility--do not use
03721 //
03722 #define SetupDiOpenInterfaceDeviceW SetupDiOpenDeviceInterfaceW
03723 #define SetupDiOpenInterfaceDeviceA SetupDiOpenDeviceInterfaceA
03724 #ifdef UNICODE
03725 #define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceW
03726 #else
03727 #define SetupDiOpenInterfaceDevice SetupDiOpenDeviceInterfaceA
03728 #endif
03729 
03730 
03731 WINSETUPAPI
03732 BOOL
03733 WINAPI
03734 SetupDiGetDeviceInterfaceAlias(
03735     IN  HDEVINFO                  DeviceInfoSet,
03736     IN  PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
03737     IN  LPGUID                    AliasInterfaceClassGuid,
03738     OUT PSP_DEVICE_INTERFACE_DATA AliasDeviceInterfaceData
03739     );
03740 
03741 //
03742 // Backward compatibility--do not use.
03743 //
03744 #define SetupDiGetInterfaceDeviceAlias SetupDiGetDeviceInterfaceAlias
03745 
03746 
03747 WINSETUPAPI
03748 BOOL
03749 WINAPI
03750 SetupDiDeleteDeviceInterfaceData(
03751     IN HDEVINFO                  DeviceInfoSet,
03752     IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
03753     );
03754 
03755 //
03756 // Backward compatibility--do not use.
03757 //
03758 #define SetupDiDeleteInterfaceDeviceData SetupDiDeleteDeviceInterfaceData
03759 
03760 
03761 WINSETUPAPI
03762 BOOL
03763 WINAPI
03764 SetupDiRemoveDeviceInterface(
03765     IN     HDEVINFO                  DeviceInfoSet,
03766     IN OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
03767     );
03768 
03769 //
03770 // Backward compatibility--do not use.
03771 //
03772 #define SetupDiRemoveInterfaceDevice SetupDiRemoveDeviceInterface
03773 
03774 
03775 WINSETUPAPI
03776 BOOL
03777 WINAPI
03778 SetupDiGetDeviceInterfaceDetailA(
03779     IN  HDEVINFO                           DeviceInfoSet,
03780     IN  PSP_DEVICE_INTERFACE_DATA          DeviceInterfaceData,
03781     OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_A DeviceInterfaceDetailData,     OPTIONAL
03782     IN  DWORD                              DeviceInterfaceDetailDataSize,
03783     OUT PDWORD                             RequiredSize,                  OPTIONAL
03784     OUT PSP_DEVINFO_DATA                   DeviceInfoData                 OPTIONAL
03785     );
03786 
03787 WINSETUPAPI
03788 BOOL
03789 WINAPI
03790 SetupDiGetDeviceInterfaceDetailW(
03791     IN  HDEVINFO                           DeviceInfoSet,
03792     IN  PSP_DEVICE_INTERFACE_DATA          DeviceInterfaceData,
03793     OUT PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData,     OPTIONAL
03794     IN  DWORD                              DeviceInterfaceDetailDataSize,
03795     OUT PDWORD                             RequiredSize,                  OPTIONAL
03796     OUT PSP_DEVINFO_DATA                   DeviceInfoData                 OPTIONAL
03797     );
03798 
03799 #ifdef UNICODE
03800 #define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailW
03801 #else
03802 #define SetupDiGetDeviceInterfaceDetail SetupDiGetDeviceInterfaceDetailA
03803 #endif
03804 
03805 //
03806 // Backward compatibility--do not use.
03807 //
03808 #define SetupDiGetInterfaceDeviceDetailW SetupDiGetDeviceInterfaceDetailW
03809 #define SetupDiGetInterfaceDeviceDetailA SetupDiGetDeviceInterfaceDetailA
03810 #ifdef UNICODE
03811 #define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailW
03812 #else
03813 #define SetupDiGetInterfaceDeviceDetail SetupDiGetDeviceInterfaceDetailA
03814 #endif
03815 
03816 
03817 //
03818 // Default install handler for DIF_INSTALLINTERFACES.
03819 //
03820 WINSETUPAPI
03821 BOOL
03822 WINAPI
03823 SetupDiInstallDeviceInterfaces(
03824     IN HDEVINFO         DeviceInfoSet,
03825     IN PSP_DEVINFO_DATA DeviceInfoData
03826     );
03827 
03828 //
03829 // Backward compatibility--do not use.
03830 //
03831 #define SetupDiInstallInterfaceDevices SetupDiInstallDeviceInterfaces
03832 
03833 
03834 //
03835 // Default install handler for DIF_REGISTERDEVICE
03836 //
03837 
03838 //
03839 // Flags for SetupDiRegisterDeviceInfo
03840 //
03841 #define SPRDI_FIND_DUPS        0x00000001
03842 
03843 WINSETUPAPI
03844 BOOL
03845 WINAPI
03846 SetupDiRegisterDeviceInfo(
03847     IN     HDEVINFO           DeviceInfoSet,
03848     IN OUT PSP_DEVINFO_DATA   DeviceInfoData,
03849     IN     DWORD              Flags,
03850     IN     PSP_DETSIG_CMPPROC CompareProc,      OPTIONAL
03851     IN     PVOID              CompareContext,   OPTIONAL
03852     OUT    PSP_DEVINFO_DATA   DupDeviceInfoData OPTIONAL
03853     );
03854 
03855 
03856 //
03857 // Ordinal values distinguishing between class drivers and
03858 // device drivers.
03859 // (Passed in 'DriverType' parameter of driver information list APIs)
03860 //
03861 #define SPDIT_NODRIVER           0x00000000
03862 #define SPDIT_CLASSDRIVER        0x00000001
03863 #define SPDIT_COMPATDRIVER       0x00000002
03864 
03865 WINSETUPAPI
03866 BOOL
03867 WINAPI
03868 SetupDiBuildDriverInfoList(
03869     IN     HDEVINFO         DeviceInfoSet,
03870     IN OUT PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
03871     IN     DWORD            DriverType
03872     );
03873 
03874 
03875 WINSETUPAPI
03876 BOOL
03877 WINAPI
03878 SetupDiCancelDriverInfoSearch(
03879     IN HDEVINFO DeviceInfoSet
03880     );
03881 
03882 
03883 WINSETUPAPI
03884 BOOL
03885 WINAPI
03886 SetupDiEnumDriverInfoA(
03887     IN  HDEVINFO           DeviceInfoSet,
03888     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
03889     IN  DWORD              DriverType,
03890     IN  DWORD              MemberIndex,
03891     OUT PSP_DRVINFO_DATA_A DriverInfoData
03892     );
03893 
03894 WINSETUPAPI
03895 BOOL
03896 WINAPI
03897 SetupDiEnumDriverInfoW(
03898     IN  HDEVINFO           DeviceInfoSet,
03899     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
03900     IN  DWORD              DriverType,
03901     IN  DWORD              MemberIndex,
03902     OUT PSP_DRVINFO_DATA_W DriverInfoData
03903     );
03904 
03905 #ifdef UNICODE
03906 #define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW
03907 #else
03908 #define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA
03909 #endif
03910 
03911 
03912 WINSETUPAPI
03913 BOOL
03914 WINAPI
03915 SetupDiGetSelectedDriverA(
03916     IN  HDEVINFO           DeviceInfoSet,
03917     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
03918     OUT PSP_DRVINFO_DATA_A DriverInfoData
03919     );
03920 
03921 WINSETUPAPI
03922 BOOL
03923 WINAPI
03924 SetupDiGetSelectedDriverW(
03925     IN  HDEVINFO           DeviceInfoSet,
03926     IN  PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
03927     OUT PSP_DRVINFO_DATA_W DriverInfoData
03928     );
03929 
03930 #ifdef UNICODE
03931 #define SetupDiGetSelectedDriver SetupDiGetSelectedDriverW
03932 #else
03933 #define SetupDiGetSelectedDriver SetupDiGetSelectedDriverA
03934 #endif
03935 
03936 
03937 WINSETUPAPI
03938 BOOL
03939 WINAPI
03940 SetupDiSetSelectedDriverA(
03941     IN     HDEVINFO           DeviceInfoSet,
03942     IN     PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
03943     IN OUT PSP_DRVINFO_DATA_A DriverInfoData  OPTIONAL
03944     );
03945 
03946 WINSETUPAPI
03947 BOOL
03948 WINAPI
03949 SetupDiSetSelectedDriverW(
03950     IN     HDEVINFO           DeviceInfoSet,
03951     IN     PSP_DEVINFO_DATA   DeviceInfoData, OPTIONAL
03952     IN OUT PSP_DRVINFO_DATA_W DriverInfoData  OPTIONAL
03953     );
03954 
03955 #ifdef UNICODE
03956 #define SetupDiSetSelectedDriver SetupDiSetSelectedDriverW
03957 #else
03958 #define SetupDiSetSelectedDriver SetupDiSetSelectedDriverA
03959 #endif
03960 
03961 
03962 WINSETUPAPI
03963 BOOL
03964 WINAPI
03965 SetupDiGetDriverInfoDetailA(
03966     IN  HDEVINFO                  DeviceInfoSet,
03967     IN  PSP_DEVINFO_DATA          DeviceInfoData,           OPTIONAL
03968     IN  PSP_DRVINFO_DATA_A        DriverInfoData,
03969     OUT PSP_DRVINFO_DETAIL_DATA_A DriverInfoDetailData,     OPTIONAL
03970     IN  DWORD                     DriverInfoDetailDataSize,
03971     OUT PDWORD                    RequiredSize              OPTIONAL
03972     );
03973 
03974 WINSETUPAPI
03975 BOOL
03976 WINAPI
03977 SetupDiGetDriverInfoDetailW(
03978     IN  HDEVINFO                  DeviceInfoSet,
03979     IN  PSP_DEVINFO_DATA          DeviceInfoData,           OPTIONAL
03980     IN  PSP_DRVINFO_DATA_W        DriverInfoData,
03981     OUT PSP_DRVINFO_DETAIL_DATA_W DriverInfoDetailData,     OPTIONAL
03982     IN  DWORD                     DriverInfoDetailDataSize,
03983     OUT PDWORD                    RequiredSize              OPTIONAL
03984     );
03985 
03986 #ifdef UNICODE
03987 #define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailW
03988 #else
03989 #define SetupDiGetDriverInfoDetail SetupDiGetDriverInfoDetailA
03990 #endif
03991 
03992 
03993 WINSETUPAPI
03994 BOOL
03995 WINAPI
03996 SetupDiDestroyDriverInfoList(
03997     IN HDEVINFO         DeviceInfoSet,
03998     IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL
03999     IN DWORD            DriverType
04000     );
04001 
04002 
04003 //
04004 // Flags controlling what is included in the device information set built
04005 // by SetupDiGetClassDevs
04006 //
04007 #define DIGCF_DEFAULT           0x00000001  // only valid with DIGCF_DEVICEINTERFACE
04008 #define DIGCF_PRESENT           0x00000002
04009 #define DIGCF_ALLCLASSES        0x00000004
04010 #define DIGCF_PROFILE           0x00000008
04011 #define DIGCF_DEVICEINTERFACE   0x00000010
04012 
04013 //
04014 // Backward compatibility--do not use.
04015 //
04016 #define DIGCF_INTERFACEDEVICE DIGCF_DEVICEINTERFACE
04017 
04018 
04019 WINSETUPAPI
04020 HDEVINFO
04021 WINAPI
04022 SetupDiGetClassDevsA(
04023     IN LPGUID ClassGuid,  OPTIONAL
04024     IN PCSTR  Enumerator, OPTIONAL
04025     IN HWND   hwndParent, OPTIONAL
04026     IN DWORD  Flags
04027     );
04028 
04029 WINSETUPAPI
04030 HDEVINFO
04031 WINAPI
04032 SetupDiGetClassDevsW(
04033     IN LPGUID ClassGuid,  OPTIONAL
04034     IN PCWSTR Enumerator, OPTIONAL
04035     IN HWND   hwndParent, OPTIONAL
04036     IN DWORD  Flags
04037     );
04038 
04039 #ifdef UNICODE
04040 #define SetupDiGetClassDevs SetupDiGetClassDevsW
04041 #else
04042 #define SetupDiGetClassDevs SetupDiGetClassDevsA
04043 #endif
04044 
04045 
04046 WINSETUPAPI
04047 HDEVINFO
04048 WINAPI
04049 SetupDiGetClassDevsExA(
04050     IN LPGUID ClassGuid,   OPTIONAL
04051     IN PCSTR  Enumerator,  OPTIONAL
04052     IN HWND   hwndParent,  OPTIONAL
04053     IN DWORD  Flags,
04054     IN PCSTR  MachineName, OPTIONAL
04055     IN PVOID  Reserved
04056     );
04057 
04058 WINSETUPAPI
04059 HDEVINFO
04060 WINAPI
04061 SetupDiGetClassDevsExW(
04062     IN LPGUID ClassGuid,   OPTIONAL
04063     IN PCWSTR Enumerator,  OPTIONAL
04064     IN HWND   hwndParent,  OPTIONAL
04065     IN DWORD  Flags,
04066     IN PCWSTR MachineName, OPTIONAL
04067     IN PVOID  Reserved
04068     );
04069 
04070 #ifdef UNICODE
04071 #define SetupDiGetClassDevsEx SetupDiGetClassDevsExW
04072 #else
04073 #define SetupDiGetClassDevsEx SetupDiGetClassDevsExA
04074 #endif
04075 
04076 
04077 WINSETUPAPI
04078 BOOL
04079 WINAPI
04080 SetupDiGetINFClassA(
04081     IN  PCSTR  InfName,
04082     OUT LPGUID ClassGuid,
04083     OUT PSTR   ClassName,
04084     IN  DWORD  ClassNameSize,
04085     OUT PDWORD RequiredSize   OPTIONAL
04086     );
04087 
04088 WINSETUPAPI
04089 BOOL
04090 WINAPI
04091 SetupDiGetINFClassW(
04092     IN  PCWSTR InfName,
04093     OUT LPGUID ClassGuid,
04094     OUT PWSTR  ClassName,
04095     IN  DWORD  ClassNameSize,
04096     OUT PDWORD RequiredSize   OPTIONAL
04097     );
04098 
04099 #ifdef UNICODE
04100 #define SetupDiGetINFClass SetupDiGetINFClassW
04101 #else
04102 #define SetupDiGetINFClass SetupDiGetINFClassA
04103 #endif
04104 
04105 
04106 //
04107 // Flags controlling exclusion from the class information list built
04108 // by SetupDiBuildClassInfoList(Ex)
04109 //
04110 #define DIBCI_NOINSTALLCLASS   0x00000001
04111 #define DIBCI_NODISPLAYCLASS   0x00000002
04112 
04113 WINSETUPAPI
04114 BOOL
04115 WINAPI
04116 SetupDiBuildClassInfoList(
04117     IN  DWORD  Flags,
04118     OUT LPGUID ClassGuidList,
04119     IN  DWORD  ClassGuidListSize,
04120     OUT PDWORD RequiredSize
04121     );
04122 
04123 
04124 WINSETUPAPI
04125 BOOL
04126 WINAPI
04127 SetupDiBuildClassInfoListExA(
04128     IN  DWORD  Flags,
04129     OUT LPGUID ClassGuidList,
04130     IN  DWORD  ClassGuidListSize,
04131     OUT PDWORD RequiredSize,
04132     IN  PCSTR  MachineName,       OPTIONAL
04133     IN  PVOID  Reserved
04134     );
04135 
04136 WINSETUPAPI
04137 BOOL
04138 WINAPI
04139 SetupDiBuildClassInfoListExW(
04140     IN  DWORD  Flags,
04141     OUT LPGUID ClassGuidList,
04142     IN  DWORD  ClassGuidListSize,
04143     OUT PDWORD RequiredSize,
04144     IN  PCWSTR MachineName,       OPTIONAL
04145     IN  PVOID  Reserved
04146     );
04147 
04148 #ifdef UNICODE
04149 #define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExW
04150 #else
04151 #define SetupDiBuildClassInfoListEx SetupDiBuildClassInfoListExA
04152 #endif
04153 
04154 
04155 WINSETUPAPI
04156 BOOL
04157 WINAPI
04158 SetupDiGetClassDescriptionA(
04159     IN  LPGUID ClassGuid,
04160     OUT PSTR   ClassDescription,
04161     IN  DWORD  ClassDescriptionSize,
04162     OUT PDWORD RequiredSize          OPTIONAL
04163     );
04164 
04165 WINSETUPAPI
04166 BOOL
04167 WINAPI
04168 SetupDiGetClassDescriptionW(
04169     IN  LPGUID ClassGuid,
04170     OUT PWSTR  ClassDescription,
04171     IN  DWORD  ClassDescriptionSize,
04172     OUT PDWORD RequiredSize          OPTIONAL
04173     );
04174 
04175 #ifdef UNICODE
04176 #define SetupDiGetClassDescription SetupDiGetClassDescriptionW
04177 #else
04178 #define SetupDiGetClassDescription SetupDiGetClassDescriptionA
04179 #endif
04180 
04181 
04182 WINSETUPAPI
04183 BOOL
04184 WINAPI
04185 SetupDiGetClassDescriptionExA(
04186     IN  LPGUID ClassGuid,
04187     OUT PSTR   ClassDescription,
04188     IN  DWORD  ClassDescriptionSize,
04189     OUT PDWORD RequiredSize,         OPTIONAL
04190     IN  PCSTR  MachineName,          OPTIONAL
04191     IN  PVOID  Reserved
04192     );
04193 
04194 WINSETUPAPI
04195 BOOL
04196 WINAPI
04197 SetupDiGetClassDescriptionExW(
04198     IN  LPGUID ClassGuid,
04199     OUT PWSTR  ClassDescription,
04200     IN  DWORD  ClassDescriptionSize,
04201     OUT PDWORD RequiredSize,         OPTIONAL
04202     IN  PCWSTR MachineName,          OPTIONAL
04203     IN  PVOID  Reserved
04204     );
04205 
04206 #ifdef UNICODE
04207 #define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExW
04208 #else
04209 #define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExA
04210 #endif
04211 
04212 
04213 WINSETUPAPI
04214 BOOL
04215 WINAPI
04216 SetupDiCallClassInstaller(
04217     IN DI_FUNCTION      InstallFunction,
04218     IN HDEVINFO         DeviceInfoSet,
04219     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
04220     );
04221 
04222 
04223 //
04224 // Default install handler for DIF_SELECTDEVICE
04225 //
04226 WINSETUPAPI
04227 BOOL
04228 WINAPI
04229 SetupDiSelectDevice(
04230     IN     HDEVINFO         DeviceInfoSet,
04231     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
04232     );
04233 
04234 
04235 //
04236 // Default install handler for DIF_SELECTBESTCOMPATDRV
04237 //
04238 WINSETUPAPI
04239 BOOL
04240 WINAPI
04241 SetupDiSelectBestCompatDrv(
04242     IN     HDEVINFO         DeviceInfoSet,
04243     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
04244     );
04245 
04246 
04247 //
04248 // Default install handler for DIF_INSTALLDEVICE
04249 //
04250 WINSETUPAPI
04251 BOOL
04252 WINAPI
04253 SetupDiInstallDevice(
04254     IN     HDEVINFO         DeviceInfoSet,
04255     IN OUT PSP_DEVINFO_DATA DeviceInfoData
04256     );
04257 
04258 
04259 //
04260 // Default install handler for DIF_INSTALLDEVICEFILES
04261 //
04262 WINSETUPAPI
04263 BOOL
04264 WINAPI
04265 SetupDiInstallDriverFiles(
04266     IN HDEVINFO         DeviceInfoSet,
04267     IN PSP_DEVINFO_DATA DeviceInfoData
04268     );
04269 
04270 
04271 //
04272 // Default install handler for DIF_REGISTER_COINSTALLERS
04273 //
04274 WINSETUPAPI
04275 BOOL
04276 WINAPI
04277 SetupDiRegisterCoDeviceInstallers(
04278     IN HDEVINFO         DeviceInfoSet,
04279     IN PSP_DEVINFO_DATA DeviceInfoData
04280     );
04281 
04282 
04283 //
04284 // Default install handler for DIF_REMOVE
04285 //
04286 WINSETUPAPI
04287 BOOL
04288 WINAPI
04289 SetupDiRemoveDevice(
04290     IN     HDEVINFO         DeviceInfoSet,
04291     IN OUT PSP_DEVINFO_DATA DeviceInfoData
04292     );
04293 
04294 
04295 //
04296 // Default install handler for DIF_UNREMOVE
04297 //
04298 WINSETUPAPI
04299 BOOL
04300 WINAPI
04301 SetupDiUnremoveDevice(
04302     IN     HDEVINFO         DeviceInfoSet,
04303     IN OUT PSP_DEVINFO_DATA DeviceInfoData
04304     );
04305 
04306 
04307 //
04308 // Default install handler for DIF_MOVEDEVICE
04309 //
04310 WINSETUPAPI
04311 BOOL
04312 WINAPI
04313 SetupDiMoveDuplicateDevice(
04314     IN HDEVINFO         DeviceInfoSet,
04315     IN PSP_DEVINFO_DATA DestinationDeviceInfoData
04316     );
04317 
04318 
04319 //
04320 // Default install handler for DIF_PROPERTYCHANGE
04321 //
04322 WINSETUPAPI
04323 BOOL
04324 WINAPI
04325 SetupDiChangeState(
04326     IN     HDEVINFO         DeviceInfoSet,
04327     IN OUT PSP_DEVINFO_DATA DeviceInfoData
04328     );
04329 
04330 
04331 WINSETUPAPI
04332 BOOL
04333 WINAPI
04334 SetupDiInstallClassA(
04335     IN HWND     hwndParent,  OPTIONAL
04336     IN PCSTR    InfFileName,
04337     IN DWORD    Flags,
04338     IN HSPFILEQ FileQueue    OPTIONAL
04339     );
04340 
04341 WINSETUPAPI
04342 BOOL
04343 WINAPI
04344 SetupDiInstallClassW(
04345     IN HWND     hwndParent,  OPTIONAL
04346     IN PCWSTR   InfFileName,
04347     IN DWORD    Flags,
04348     IN HSPFILEQ FileQueue    OPTIONAL
04349     );
04350 
04351 #ifdef UNICODE
04352 #define SetupDiInstallClass SetupDiInstallClassW
04353 #else
04354 #define SetupDiInstallClass SetupDiInstallClassA
04355 #endif
04356 
04357 
04358 WINSETUPAPI
04359 BOOL
04360 WINAPI
04361 SetupDiInstallClassExA(
04362     IN HWND     hwndParent,         OPTIONAL
04363     IN PCSTR    InfFileName,        OPTIONAL
04364     IN DWORD    Flags,
04365     IN HSPFILEQ FileQueue,          OPTIONAL
04366     IN LPGUID   InterfaceClassGuid, OPTIONAL
04367     IN PVOID    Reserved1,
04368     IN PVOID    Reserved2
04369     );
04370 
04371 WINSETUPAPI
04372 BOOL
04373 WINAPI
04374 SetupDiInstallClassExW(
04375     IN HWND     hwndParent,         OPTIONAL
04376     IN PCWSTR   InfFileName,        OPTIONAL
04377     IN DWORD    Flags,
04378     IN HSPFILEQ FileQueue,          OPTIONAL
04379     IN LPGUID   InterfaceClassGuid, OPTIONAL
04380     IN PVOID    Reserved1,
04381     IN PVOID    Reserved2
04382     );
04383 
04384 #ifdef UNICODE
04385 #define SetupDiInstallClassEx SetupDiInstallClassExW
04386 #else
04387 #define SetupDiInstallClassEx SetupDiInstallClassExA
04388 #endif
04389 
04390 
04391 WINSETUPAPI
04392 HKEY
04393 WINAPI
04394 SetupDiOpenClassRegKey(
04395     IN LPGUID ClassGuid, OPTIONAL
04396     IN REGSAM samDesired
04397     );
04398 
04399 
04400 //
04401 // Flags for SetupDiOpenClassRegKeyEx
04402 //
04403 #define DIOCR_INSTALLER   0x00000001    // class installer registry branch
04404 #define DIOCR_INTERFACE   0x00000002    // interface class registry branch
04405 
04406 WINSETUPAPI
04407 HKEY
04408 WINAPI
04409 SetupDiOpenClassRegKeyExA(
04410     IN LPGUID ClassGuid,   OPTIONAL
04411     IN REGSAM samDesired,
04412     IN DWORD  Flags,
04413     IN PCSTR  MachineName, OPTIONAL
04414     IN PVOID  Reserved
04415     );
04416 
04417 WINSETUPAPI
04418 HKEY
04419 WINAPI
04420 SetupDiOpenClassRegKeyExW(
04421     IN LPGUID ClassGuid,   OPTIONAL
04422     IN REGSAM samDesired,
04423     IN DWORD  Flags,
04424     IN PCWSTR MachineName, OPTIONAL
04425     IN PVOID  Reserved
04426     );
04427 
04428 #ifdef UNICODE
04429 #define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExW
04430 #else
04431 #define SetupDiOpenClassRegKeyEx SetupDiOpenClassRegKeyExA
04432 #endif
04433 
04434 
04435 WINSETUPAPI
04436 HKEY
04437 WINAPI
04438 SetupDiCreateDeviceInterfaceRegKeyA(
04439     IN HDEVINFO                  DeviceInfoSet,
04440     IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
04441     IN DWORD                     Reserved,
04442     IN REGSAM                    samDesired,
04443     IN HINF                      InfHandle,           OPTIONAL
04444     IN PCSTR                     InfSectionName       OPTIONAL
04445     );
04446 
04447 WINSETUPAPI
04448 HKEY
04449 WINAPI
04450 SetupDiCreateDeviceInterfaceRegKeyW(
04451     IN HDEVINFO                  DeviceInfoSet,
04452     IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
04453     IN DWORD                     Reserved,
04454     IN REGSAM                    samDesired,
04455     IN HINF                      InfHandle,           OPTIONAL
04456     IN PCWSTR                    InfSectionName       OPTIONAL
04457     );
04458 
04459 #ifdef UNICODE
04460 #define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyW
04461 #else
04462 #define SetupDiCreateDeviceInterfaceRegKey SetupDiCreateDeviceInterfaceRegKeyA
04463 #endif
04464 
04465 //
04466 // Backward compatibility--do not use.
04467 //
04468 #define SetupDiCreateInterfaceDeviceRegKeyW SetupDiCreateDeviceInterfaceRegKeyW
04469 #define SetupDiCreateInterfaceDeviceRegKeyA SetupDiCreateDeviceInterfaceRegKeyA
04470 #ifdef UNICODE
04471 #define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyW
04472 #else
04473 #define SetupDiCreateInterfaceDeviceRegKey SetupDiCreateDeviceInterfaceRegKeyA
04474 #endif
04475 
04476 
04477 WINSETUPAPI
04478 HKEY
04479 WINAPI
04480 SetupDiOpenDeviceInterfaceRegKey(
04481     IN HDEVINFO                  DeviceInfoSet,
04482     IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
04483     IN DWORD                     Reserved,
04484     IN REGSAM                    samDesired
04485     );
04486 
04487 //
04488 // Backward compatibility--do not use.
04489 //
04490 #define SetupDiOpenInterfaceDeviceRegKey SetupDiOpenDeviceInterfaceRegKey
04491 
04492 
04493 WINSETUPAPI
04494 BOOL
04495 WINAPI
04496 SetupDiDeleteDeviceInterfaceRegKey(
04497     IN HDEVINFO                  DeviceInfoSet,
04498     IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,
04499     IN DWORD                     Reserved
04500     );
04501 
04502 //
04503 // Backward compatibility--do not use.
04504 //
04505 #define SetupDiDeleteInterfaceDeviceRegKey SetupDiDeleteDeviceInterfaceRegKey
04506 
04507 
04508 //
04509 // KeyType values for SetupDiCreateDevRegKey, SetupDiOpenDevRegKey, and
04510 // SetupDiDeleteDevRegKey.
04511 //
04512 #define DIREG_DEV       0x00000001          // Open/Create/Delete device key
04513 #define DIREG_DRV       0x00000002          // Open/Create/Delete driver key
04514 #define DIREG_BOTH      0x00000004          // Delete both driver and Device key
04515 
04516 WINSETUPAPI
04517 HKEY
04518 WINAPI
04519 SetupDiCreateDevRegKeyA(
04520     IN HDEVINFO         DeviceInfoSet,
04521     IN PSP_DEVINFO_DATA DeviceInfoData,
04522     IN DWORD            Scope,
04523     IN DWORD            HwProfile,
04524     IN DWORD            KeyType,
04525     IN HINF             InfHandle,      OPTIONAL
04526     IN PCSTR            InfSectionName  OPTIONAL
04527     );
04528 
04529 WINSETUPAPI
04530 HKEY
04531 WINAPI
04532 SetupDiCreateDevRegKeyW(
04533     IN HDEVINFO         DeviceInfoSet,
04534     IN PSP_DEVINFO_DATA DeviceInfoData,
04535     IN DWORD            Scope,
04536     IN DWORD            HwProfile,
04537     IN DWORD            KeyType,
04538     IN HINF             InfHandle,      OPTIONAL
04539     IN PCWSTR           InfSectionName  OPTIONAL
04540     );
04541 
04542 #ifdef UNICODE
04543 #define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW
04544 #else
04545 #define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyA
04546 #endif
04547 
04548 
04549 WINSETUPAPI
04550 HKEY
04551 WINAPI
04552 SetupDiOpenDevRegKey(
04553     IN HDEVINFO         DeviceInfoSet,
04554     IN PSP_DEVINFO_DATA DeviceInfoData,
04555     IN DWORD            Scope,
04556     IN DWORD            HwProfile,
04557     IN DWORD            KeyType,
04558     IN REGSAM           samDesired
04559     );
04560 
04561 
04562 WINSETUPAPI
04563 BOOL
04564 WINAPI
04565 SetupDiDeleteDevRegKey(
04566     IN HDEVINFO         DeviceInfoSet,
04567     IN PSP_DEVINFO_DATA DeviceInfoData,
04568     IN DWORD            Scope,
04569     IN DWORD            HwProfile,
04570     IN DWORD            KeyType
04571     );
04572 
04573 
04574 WINSETUPAPI
04575 BOOL
04576 WINAPI
04577 SetupDiGetHwProfileList(
04578     OUT PDWORD HwProfileList,
04579     IN  DWORD  HwProfileListSize,
04580     OUT PDWORD RequiredSize,
04581     OUT PDWORD CurrentlyActiveIndex OPTIONAL
04582     );
04583 
04584 
04585 WINSETUPAPI
04586 BOOL
04587 WINAPI
04588 SetupDiGetHwProfileListExA(
04589     OUT PDWORD HwProfileList,
04590     IN  DWORD  HwProfileListSize,
04591     OUT PDWORD RequiredSize,
04592     OUT PDWORD CurrentlyActiveIndex, OPTIONAL
04593     IN  PCSTR  MachineName,          OPTIONAL
04594     IN  PVOID  Reserved
04595     );
04596 
04597 WINSETUPAPI
04598 BOOL
04599 WINAPI
04600 SetupDiGetHwProfileListExW(
04601     OUT PDWORD HwProfileList,
04602     IN  DWORD  HwProfileListSize,
04603     OUT PDWORD RequiredSize,
04604     OUT PDWORD CurrentlyActiveIndex, OPTIONAL
04605     IN  PCWSTR MachineName,          OPTIONAL
04606     IN  PVOID  Reserved
04607     );
04608 
04609 #ifdef UNICODE
04610 #define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExW
04611 #else
04612 #define SetupDiGetHwProfileListEx SetupDiGetHwProfileListExA
04613 #endif
04614 
04615 
04616 //
04617 // Device registry property codes
04618 // (Codes marked as read-only (R) may only be used for
04619 // SetupDiGetDeviceRegistryProperty)
04620 //
04621 // These values should cover the same set of registry properties
04622 // as defined by the CM_DRP codes in cfgmgr32.h.
04623 //
04624 #define SPDRP_DEVICEDESC                  (0x00000000)  // DeviceDesc (R/W)
04625 #define SPDRP_HARDWAREID                  (0x00000001)  // HardwareID (R/W)
04626 #define SPDRP_COMPATIBLEIDS               (0x00000002)  // CompatibleIDs (R/W)
04627 #define SPDRP_NTDEVICEPATHS               (0x00000003)  // Unsupported, DO NOT USE
04628 #define SPDRP_SERVICE                     (0x00000004)  // Service (R/W)
04629 #define SPDRP_CONFIGURATION               (0x00000005)  // Configuration (R)
04630 #define SPDRP_CONFIGURATIONVECTOR         (0x00000006)  // ConfigurationVector (R)
04631 #define SPDRP_CLASS                       (0x00000007)  // Class (R--tied to ClassGUID)
04632 #define SPDRP_CLASSGUID                   (0x00000008)  // ClassGUID (R/W)
04633 #define SPDRP_DRIVER                      (0x00000009)  // Driver (R/W)
04634 #define SPDRP_CONFIGFLAGS                 (0x0000000A)  // ConfigFlags (R/W)
04635 #define SPDRP_MFG                         (0x0000000B)  // Mfg (R/W)
04636 #define SPDRP_FRIENDLYNAME                (0x0000000C)  // FriendlyName (R/W)
04637 #define SPDRP_LOCATION_INFORMATION        (0x0000000D)  // LocationInformation (R/W)
04638 #define SPDRP_PHYSICAL_DEVICE_OBJECT_NAME (0x0000000E)  // PhysicalDeviceObjectName (R)
04639 #define SPDRP_CAPABILITIES                (0x0000000F)  // Capabilities (R)
04640 #define SPDRP_UI_NUMBER                   (0x00000010)  // UiNumber (R)
04641 #define SPDRP_UPPERFILTERS                (0x00000011)  // UpperFilters (R/W)
04642 #define SPDRP_LOWERFILTERS                (0x00000012)  // LowerFilters (R/W)
04643 #define SPDRP_MAXIMUM_PROPERTY            (0x00000013)  // Upper bound on ordinals
04644 
04645 WINSETUPAPI
04646 BOOL
04647 WINAPI
04648 SetupDiGetDeviceRegistryPropertyA(
04649     IN  HDEVINFO         DeviceInfoSet,
04650     IN  PSP_DEVINFO_DATA DeviceInfoData,
04651     IN  DWORD            Property,
04652     OUT PDWORD           PropertyRegDataType, OPTIONAL
04653     OUT PBYTE            PropertyBuffer,
04654     IN  DWORD            PropertyBufferSize,
04655     OUT PDWORD           RequiredSize         OPTIONAL
04656     );
04657 
04658 WINSETUPAPI
04659 BOOL
04660 WINAPI
04661 SetupDiGetDeviceRegistryPropertyW(
04662     IN  HDEVINFO         DeviceInfoSet,
04663     IN  PSP_DEVINFO_DATA DeviceInfoData,
04664     IN  DWORD            Property,
04665     OUT PDWORD           PropertyRegDataType, OPTIONAL
04666     OUT PBYTE            PropertyBuffer,
04667     IN  DWORD            PropertyBufferSize,
04668     OUT PDWORD           RequiredSize         OPTIONAL
04669     );
04670 
04671 #ifdef UNICODE
04672 #define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyW
04673 #else
04674 #define SetupDiGetDeviceRegistryProperty SetupDiGetDeviceRegistryPropertyA
04675 #endif
04676 
04677 
04678 WINSETUPAPI
04679 BOOL
04680 WINAPI
04681 SetupDiSetDeviceRegistryPropertyA(
04682     IN     HDEVINFO         DeviceInfoSet,
04683     IN OUT PSP_DEVINFO_DATA DeviceInfoData,
04684     IN     DWORD            Property,
04685     IN     CONST BYTE*      PropertyBuffer,
04686     IN     DWORD            PropertyBufferSize
04687     );
04688 
04689 WINSETUPAPI
04690 BOOL
04691 WINAPI
04692 SetupDiSetDeviceRegistryPropertyW(
04693     IN     HDEVINFO         DeviceInfoSet,
04694     IN OUT PSP_DEVINFO_DATA DeviceInfoData,
04695     IN     DWORD            Property,
04696     IN     CONST BYTE*      PropertyBuffer,
04697     IN     DWORD            PropertyBufferSize
04698     );
04699 
04700 #ifdef UNICODE
04701 #define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyW
04702 #else
04703 #define SetupDiSetDeviceRegistryProperty SetupDiSetDeviceRegistryPropertyA
04704 #endif
04705 
04706 
04707 WINSETUPAPI
04708 BOOL
04709 WINAPI
04710 SetupDiGetDeviceInstallParamsA(
04711     IN  HDEVINFO                DeviceInfoSet,
04712     IN  PSP_DEVINFO_DATA        DeviceInfoData,          OPTIONAL
04713     OUT PSP_DEVINSTALL_PARAMS_A DeviceInstallParams
04714     );
04715 
04716 WINSETUPAPI
04717 BOOL
04718 WINAPI
04719 SetupDiGetDeviceInstallParamsW(
04720     IN  HDEVINFO                DeviceInfoSet,
04721     IN  PSP_DEVINFO_DATA        DeviceInfoData,          OPTIONAL
04722     OUT PSP_DEVINSTALL_PARAMS_W DeviceInstallParams
04723     );
04724 
04725 #ifdef UNICODE
04726 #define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsW
04727 #else
04728 #define SetupDiGetDeviceInstallParams SetupDiGetDeviceInstallParamsA
04729 #endif
04730 
04731 
04732 WINSETUPAPI
04733 BOOL
04734 WINAPI
04735 SetupDiGetClassInstallParamsA(
04736     IN  HDEVINFO                DeviceInfoSet,
04737     IN  PSP_DEVINFO_DATA        DeviceInfoData,         OPTIONAL
04738     OUT PSP_CLASSINSTALL_HEADER ClassInstallParams,     OPTIONAL
04739     IN  DWORD                   ClassInstallParamsSize,
04740     OUT PDWORD                  RequiredSize            OPTIONAL
04741     );
04742 
04743 WINSETUPAPI
04744 BOOL
04745 WINAPI
04746 SetupDiGetClassInstallParamsW(
04747     IN  HDEVINFO                DeviceInfoSet,
04748     IN  PSP_DEVINFO_DATA        DeviceInfoData,         OPTIONAL
04749     OUT PSP_CLASSINSTALL_HEADER ClassInstallParams,     OPTIONAL
04750     IN  DWORD                   ClassInstallParamsSize,
04751     OUT PDWORD                  RequiredSize            OPTIONAL
04752     );
04753 
04754 #ifdef UNICODE
04755 #define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsW
04756 #else
04757 #define SetupDiGetClassInstallParams SetupDiGetClassInstallParamsA
04758 #endif
04759 
04760 
04761 WINSETUPAPI
04762 BOOL
04763 WINAPI
04764 SetupDiSetDeviceInstallParamsA(
04765     IN HDEVINFO                DeviceInfoSet,
04766     IN PSP_DEVINFO_DATA        DeviceInfoData,     OPTIONAL
04767     IN PSP_DEVINSTALL_PARAMS_A DeviceInstallParams
04768     );
04769 
04770 WINSETUPAPI
04771 BOOL
04772 WINAPI
04773 SetupDiSetDeviceInstallParamsW(
04774     IN HDEVINFO                DeviceInfoSet,
04775     IN PSP_DEVINFO_DATA        DeviceInfoData,     OPTIONAL
04776     IN PSP_DEVINSTALL_PARAMS_W DeviceInstallParams
04777     );
04778 
04779 #ifdef UNICODE
04780 #define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsW
04781 #else
04782 #define SetupDiSetDeviceInstallParams SetupDiSetDeviceInstallParamsA
04783 #endif
04784 
04785 
04786 WINSETUPAPI
04787 BOOL
04788 WINAPI
04789 SetupDiSetClassInstallParamsA(
04790     IN HDEVINFO                DeviceInfoSet,
04791     IN PSP_DEVINFO_DATA        DeviceInfoData,        OPTIONAL
04792     IN PSP_CLASSINSTALL_HEADER ClassInstallParams,    OPTIONAL
04793     IN DWORD                   ClassInstallParamsSize
04794     );
04795 
04796 WINSETUPAPI
04797 BOOL
04798 WINAPI
04799 SetupDiSetClassInstallParamsW(
04800     IN HDEVINFO                DeviceInfoSet,
04801     IN PSP_DEVINFO_DATA        DeviceInfoData,        OPTIONAL
04802     IN PSP_CLASSINSTALL_HEADER ClassInstallParams,    OPTIONAL
04803     IN DWORD                   ClassInstallParamsSize
04804     );
04805 
04806 #ifdef UNICODE
04807 #define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsW
04808 #else
04809 #define SetupDiSetClassInstallParams SetupDiSetClassInstallParamsA
04810 #endif
04811 
04812 
04813 WINSETUPAPI
04814 BOOL
04815 WINAPI
04816 SetupDiGetDriverInstallParamsA(
04817     IN  HDEVINFO              DeviceInfoSet,
04818     IN  PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
04819     IN  PSP_DRVINFO_DATA_A    DriverInfoData,
04820     OUT PSP_DRVINSTALL_PARAMS DriverInstallParams
04821     );
04822 
04823 WINSETUPAPI
04824 BOOL
04825 WINAPI
04826 SetupDiGetDriverInstallParamsW(
04827     IN  HDEVINFO              DeviceInfoSet,
04828     IN  PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
04829     IN  PSP_DRVINFO_DATA_W    DriverInfoData,
04830     OUT PSP_DRVINSTALL_PARAMS DriverInstallParams
04831     );
04832 
04833 #ifdef UNICODE
04834 #define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsW
04835 #else
04836 #define SetupDiGetDriverInstallParams SetupDiGetDriverInstallParamsA
04837 #endif
04838 
04839 
04840 WINSETUPAPI
04841 BOOL
04842 WINAPI
04843 SetupDiSetDriverInstallParamsA(
04844     IN HDEVINFO              DeviceInfoSet,
04845     IN PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
04846     IN PSP_DRVINFO_DATA_A    DriverInfoData,
04847     IN PSP_DRVINSTALL_PARAMS DriverInstallParams
04848     );
04849 
04850 WINSETUPAPI
04851 BOOL
04852 WINAPI
04853 SetupDiSetDriverInstallParamsW(
04854     IN HDEVINFO              DeviceInfoSet,
04855     IN PSP_DEVINFO_DATA      DeviceInfoData,     OPTIONAL
04856     IN PSP_DRVINFO_DATA_W    DriverInfoData,
04857     IN PSP_DRVINSTALL_PARAMS DriverInstallParams
04858     );
04859 
04860 #ifdef UNICODE
04861 #define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsW
04862 #else
04863 #define SetupDiSetDriverInstallParams SetupDiSetDriverInstallParamsA
04864 #endif
04865 
04866 
04867 WINSETUPAPI
04868 BOOL
04869 WINAPI
04870 SetupDiLoadClassIcon(
04871     IN  LPGUID  ClassGuid,
04872     OUT HICON  *LargeIcon,    OPTIONAL
04873     OUT PINT    MiniIconIndex OPTIONAL
04874     );
04875 
04876 
04877 //
04878 // Flags controlling the drawing of mini-icons
04879 //
04880 #define DMI_MASK      0x00000001
04881 #define DMI_BKCOLOR   0x00000002
04882 #define DMI_USERECT   0x00000004
04883 
04884 WINSETUPAPI
04885 INT
04886 WINAPI
04887 SetupDiDrawMiniIcon(
04888     IN HDC   hdc,
04889     IN RECT  rc,
04890     IN INT   MiniIconIndex,
04891     IN DWORD Flags
04892     );
04893 
04894 
04895 WINSETUPAPI
04896 BOOL
04897 WINAPI
04898 SetupDiGetClassBitmapIndex(
04899     IN  LPGUID ClassGuid,    OPTIONAL
04900     OUT PINT   MiniIconIndex
04901     );
04902 
04903 
04904 WINSETUPAPI
04905 BOOL
04906 WINAPI
04907 SetupDiGetClassImageList(
04908     OUT PSP_CLASSIMAGELIST_DATA ClassImageListData
04909     );
04910 
04911 
04912 WINSETUPAPI
04913 BOOL
04914 WINAPI
04915 SetupDiGetClassImageListExA(
04916     OUT PSP_CLASSIMAGELIST_DATA ClassImageListData,
04917     IN  PCSTR                   MachineName,        OPTIONAL
04918     IN  PVOID                   Reserved
04919     );
04920 
04921 WINSETUPAPI
04922 BOOL
04923 WINAPI
04924 SetupDiGetClassImageListExW(
04925     OUT PSP_CLASSIMAGELIST_DATA ClassImageListData,
04926     IN  PCWSTR                  MachineName,        OPTIONAL
04927     IN  PVOID                   Reserved
04928     );
04929 
04930 #ifdef UNICODE
04931 #define SetupDiGetClassImageListEx SetupDiGetClassImageListExW
04932 #else
04933 #define SetupDiGetClassImageListEx SetupDiGetClassImageListExA
04934 #endif
04935 
04936 
04937 WINSETUPAPI
04938 BOOL
04939 WINAPI
04940 SetupDiGetClassImageIndex(
04941     IN  PSP_CLASSIMAGELIST_DATA ClassImageListData,
04942     IN  LPGUID                  ClassGuid,
04943     OUT PINT                    ImageIndex
04944     );
04945 
04946 
04947 WINSETUPAPI
04948 BOOL
04949 WINAPI
04950 SetupDiDestroyClassImageList(
04951     IN PSP_CLASSIMAGELIST_DATA ClassImageListData
04952     );
04953 
04954 
04955 //
04956 // PropertySheetType values for the SetupDiGetClassDevPropertySheets API
04957 //
04958 #define DIGCDP_FLAG_BASIC           0x00000001
04959 #define DIGCDP_FLAG_ADVANCED        0x00000002
04960 
04961 WINSETUPAPI
04962 BOOL
04963 WINAPI
04964 SetupDiGetClassDevPropertySheetsA(
04965     IN  HDEVINFO           DeviceInfoSet,
04966     IN  PSP_DEVINFO_DATA   DeviceInfoData,                  OPTIONAL
04967     IN  LPPROPSHEETHEADERA PropertySheetHeader,
04968     IN  DWORD              PropertySheetHeaderPageListSize,
04969     OUT PDWORD             RequiredSize,                    OPTIONAL
04970     IN  DWORD              PropertySheetType
04971     );
04972 
04973 WINSETUPAPI
04974 BOOL
04975 WINAPI
04976 SetupDiGetClassDevPropertySheetsW(
04977     IN  HDEVINFO           DeviceInfoSet,
04978     IN  PSP_DEVINFO_DATA   DeviceInfoData,                  OPTIONAL
04979     IN  LPPROPSHEETHEADERW PropertySheetHeader,
04980     IN  DWORD              PropertySheetHeaderPageListSize,
04981     OUT PDWORD             RequiredSize,                    OPTIONAL
04982     IN  DWORD              PropertySheetType
04983     );
04984 
04985 #ifdef UNICODE
04986 #define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW
04987 #else
04988 #define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA
04989 #endif
04990 
04991 
04992 //
04993 // Define ICON IDs publicly exposed from setupapi.
04994 //
04995 #define IDI_RESOURCEFIRST           159
04996 #define IDI_RESOURCE                159
04997 #define IDI_NOCFGDATA               160
04998 #define IDI_RESOURCELAST            161
04999 #define IDI_RESOURCEOVERLAYFIRST    161
05000 #define IDI_RESOURCEOVERLAYLAST     161
05001 #define IDI_CONFLICT                161
05002 
05003 #define IDI_CLASSICON_OVERLAYFIRST  500
05004 #define IDI_CLASSICON_OVERLAYLAST   502
05005 #define IDI_PROBLEM_OVL             500
05006 #define IDI_DISABLED_OVL            501
05007 #define IDI_FORCED_OVL              502
05008 
05009 
05010 WINSETUPAPI
05011 BOOL
05012 WINAPI
05013 SetupDiAskForOEMDisk(
05014     IN HDEVINFO         DeviceInfoSet,
05015     IN PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
05016     );
05017 
05018 
05019 WINSETUPAPI
05020 BOOL
05021 WINAPI
05022 SetupDiSelectOEMDrv(
05023     IN     HWND             hwndParent,    OPTIONAL
05024     IN     HDEVINFO         DeviceInfoSet,
05025     IN OUT PSP_DEVINFO_DATA DeviceInfoData OPTIONAL
05026     );
05027 
05028 
05029 WINSETUPAPI
05030 BOOL
05031 WINAPI
05032 SetupDiClassNameFromGuidA(
05033     IN  LPGUID ClassGuid,
05034     OUT PSTR   ClassName,
05035     IN  DWORD  ClassNameSize,
05036     OUT PDWORD RequiredSize   OPTIONAL
05037     );
05038 
05039 WINSETUPAPI
05040 BOOL
05041 WINAPI
05042 SetupDiClassNameFromGuidW(
05043     IN  LPGUID ClassGuid,
05044     OUT PWSTR  ClassName,
05045     IN  DWORD  ClassNameSize,
05046     OUT PDWORD RequiredSize   OPTIONAL
05047     );
05048 
05049 #ifdef UNICODE
05050 #define SetupDiClassNameFromGuid SetupDiClassNameFromGuidW
05051 #else
05052 #define SetupDiClassNameFromGuid SetupDiClassNameFromGuidA
05053 #endif
05054 
05055 
05056 WINSETUPAPI
05057 BOOL
05058 WINAPI
05059 SetupDiClassNameFromGuidExA(
05060     IN  LPGUID ClassGuid,
05061     OUT PSTR   ClassName,
05062     IN  DWORD  ClassNameSize,
05063     OUT PDWORD RequiredSize,  OPTIONAL
05064     IN  PCSTR  MachineName,   OPTIONAL
05065     IN  PVOID  Reserved
05066     );
05067 
05068 WINSETUPAPI
05069 BOOL
05070 WINAPI
05071 SetupDiClassNameFromGuidExW(
05072     IN  LPGUID ClassGuid,
05073     OUT PWSTR  ClassName,
05074     IN  DWORD  ClassNameSize,
05075     OUT PDWORD RequiredSize,  OPTIONAL
05076     IN  PCWSTR MachineName,   OPTIONAL
05077     IN  PVOID  Reserved
05078     );
05079 
05080 #ifdef UNICODE
05081 #define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExW
05082 #else
05083 #define SetupDiClassNameFromGuidEx SetupDiClassNameFromGuidExA
05084 #endif
05085 
05086 
05087 WINSETUPAPI
05088 BOOL
05089 WINAPI
05090 SetupDiClassGuidsFromNameA(
05091     IN  PCSTR  ClassName,
05092     OUT LPGUID ClassGuidList,
05093     IN  DWORD  ClassGuidListSize,
05094     OUT PDWORD RequiredSize
05095     );
05096 
05097 WINSETUPAPI
05098 BOOL
05099 WINAPI
05100 SetupDiClassGuidsFromNameW(
05101     IN  PCWSTR ClassName,
05102     OUT LPGUID ClassGuidList,
05103     IN  DWORD  ClassGuidListSize,
05104     OUT PDWORD RequiredSize
05105     );
05106 
05107 #ifdef UNICODE
05108 #define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameW
05109 #else
05110 #define SetupDiClassGuidsFromName SetupDiClassGuidsFromNameA
05111 #endif
05112 
05113 
05114 WINSETUPAPI
05115 BOOL
05116 WINAPI
05117 SetupDiClassGuidsFromNameExA(
05118     IN  PCSTR  ClassName,
05119     OUT LPGUID ClassGuidList,
05120     IN  DWORD  ClassGuidListSize,
05121     OUT PDWORD RequiredSize,
05122     IN  PCSTR  MachineName,       OPTIONAL
05123     IN  PVOID  Reserved
05124     );
05125 
05126 WINSETUPAPI
05127 BOOL
05128 WINAPI
05129 SetupDiClassGuidsFromNameExW(
05130     IN  PCWSTR ClassName,
05131     OUT LPGUID ClassGuidList,
05132     IN  DWORD  ClassGuidListSize,
05133     OUT PDWORD RequiredSize,
05134     IN  PCWSTR MachineName,       OPTIONAL
05135     IN  PVOID  Reserved
05136     );
05137 
05138 #ifdef UNICODE
05139 #define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExW
05140 #else
05141 #define SetupDiClassGuidsFromNameEx SetupDiClassGuidsFromNameExA
05142 #endif
05143 
05144 
05145 WINSETUPAPI
05146 BOOL
05147 WINAPI
05148 SetupDiGetHwProfileFriendlyNameA(
05149     IN  DWORD  HwProfile,
05150     OUT PSTR   FriendlyName,
05151     IN  DWORD  FriendlyNameSize,
05152     OUT PDWORD RequiredSize      OPTIONAL
05153     );
05154 
05155 WINSETUPAPI
05156 BOOL
05157 WINAPI
05158 SetupDiGetHwProfileFriendlyNameW(
05159     IN  DWORD  HwProfile,
05160     OUT PWSTR  FriendlyName,
05161     IN  DWORD  FriendlyNameSize,
05162     OUT PDWORD RequiredSize      OPTIONAL
05163     );
05164 
05165 #ifdef UNICODE
05166 #define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameW
05167 #else
05168 #define SetupDiGetHwProfileFriendlyName SetupDiGetHwProfileFriendlyNameA
05169 #endif
05170 
05171 
05172 WINSETUPAPI
05173 BOOL
05174 WINAPI
05175 SetupDiGetHwProfileFriendlyNameExA(
05176     IN  DWORD  HwProfile,
05177     OUT PSTR   FriendlyName,
05178     IN  DWORD  FriendlyNameSize,
05179     OUT PDWORD RequiredSize,     OPTIONAL
05180     IN  PCSTR  MachineName,      OPTIONAL
05181     IN  PVOID  Reserved
05182     );
05183 
05184 WINSETUPAPI
05185 BOOL
05186 WINAPI
05187 SetupDiGetHwProfileFriendlyNameExW(
05188     IN  DWORD  HwProfile,
05189     OUT PWSTR  FriendlyName,
05190     IN  DWORD  FriendlyNameSize,
05191     OUT PDWORD RequiredSize,     OPTIONAL
05192     IN  PCWSTR MachineName,      OPTIONAL
05193     IN  PVOID  Reserved
05194     );
05195 
05196 #ifdef UNICODE
05197 #define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExW
05198 #else
05199 #define SetupDiGetHwProfileFriendlyNameEx SetupDiGetHwProfileFriendlyNameExA
05200 #endif
05201 
05202 
05203 //
05204 // PageType values for SetupDiGetWizardPage API
05205 //
05206 #define SPWPT_SELECTDEVICE      0x00000001
05207 
05208 //
05209 // Flags for SetupDiGetWizardPage API
05210 //
05211 #define SPWP_USE_DEVINFO_DATA   0x00000001
05212 
05213 WINSETUPAPI
05214 HPROPSHEETPAGE
05215 WINAPI
05216 SetupDiGetWizardPage(
05217     IN HDEVINFO               DeviceInfoSet,
05218     IN PSP_DEVINFO_DATA       DeviceInfoData,    OPTIONAL
05219     IN PSP_INSTALLWIZARD_DATA InstallWizardData,
05220     IN DWORD                  PageType,
05221     IN DWORD                  Flags
05222     );
05223 
05224 
05225 WINSETUPAPI
05226 BOOL
05227 WINAPI
05228 SetupDiGetSelectedDevice(
05229     IN  HDEVINFO         DeviceInfoSet,
05230     OUT PSP_DEVINFO_DATA DeviceInfoData
05231     );
05232 
05233 
05234 WINSETUPAPI
05235 BOOL
05236 WINAPI
05237 SetupDiSetSelectedDevice(
05238     IN HDEVINFO         DeviceInfoSet,
05239     IN PSP_DEVINFO_DATA DeviceInfoData
05240     );
05241 
05242 
05243 WINSETUPAPI
05244 BOOL
05245 WINAPI
05246 SetupDiGetActualSectionToInstallA(
05247     IN  HINF    InfHandle,
05248     IN  PCSTR   InfSectionName,
05249     OUT PSTR    InfSectionWithExt,     OPTIONAL
05250     IN  DWORD   InfSectionWithExtSize,
05251     OUT PDWORD  RequiredSize,          OPTIONAL
05252     OUT PSTR   *Extension              OPTIONAL
05253     );
05254 
05255 WINSETUPAPI
05256 BOOL
05257 WINAPI
05258 SetupDiGetActualSectionToInstallW(
05259     IN  HINF    InfHandle,
05260     IN  PCWSTR  InfSectionName,
05261     OUT PWSTR   InfSectionWithExt,     OPTIONAL
05262     IN  DWORD   InfSectionWithExtSize,
05263     OUT PDWORD  RequiredSize,          OPTIONAL
05264     OUT PWSTR  *Extension              OPTIONAL
05265     );
05266 
05267 #ifdef UNICODE
05268 #define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW
05269 #else
05270 #define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA
05271 #endif
05272 
05273 
05274 #ifdef __cplusplus
05275 }
05276 #endif
05277 
05278 #include <poppack.h>
05279 
05280 #endif // _INC_SETUPAPI
05281