extern "C" {
#endif
+#ifndef _SETUPAPI_
#define WINSETUPAPI DECLSPEC_IMPORT
+#else
+#define WINSETUPAPI
+#endif
#define LINE_LEN 256
#define MAX_INF_STRING_LENGTH 4096
#define DI_FLAGSEX_RESERVED1 0x00400000
#define DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS 0x00800000
#define DI_FLAGSEX_POWERPAGE_ADDED 0x01000000
+#if (_SETUPAPI_VER >= 0x0501)
+#define DI_FLAGSEX_FILTERSIMILARDRIVERS 0x02000000
+#define DI_FLAGSEX_INSTALLEDDRIVER 0x04000000
+#define DI_FLAGSEX_NO_CLASSLIST_NODE_MERGE 0x08000000
+#define DI_FLAGSEX_ALTPLATFORM_DRVSEARCH 0x10000000
+#define DI_FLAGSEX_RESTART_DEVICE_ONLY 0x20000000
+#endif
#define DIBCI_NOINSTALLCLASS 0x00000001
#define DIBCI_NODISPLAYCLASS 0x00000002
#define DICD_GENERATE_ID 0x00000001
#define DICS_START 4
#define DICS_FLAG_CONFIGGENERAL 4
#define DICS_STOP 5
-#define DIF_SELECTDEVICE 1
-#define DIF_INSTALLDEVICE 2
-#define DIF_ASSIGNRESOURCES 3
-#define DIF_PROPERTIES 4
-#define DIF_REMOVE 5
-#define DIF_FIRSTTIMESETUP 6
-#define DIF_FOUNDDEVICE 7
-#define DIF_SELECTCLASSDRIVERS 8
-#define DIF_VALIDATECLASSDRIVERS 9
-#define DIF_INSTALLCLASSDRIVERS 10
-#define DIF_CALCDISKSPACE 11
-#define DIF_DESTROYPRIVATEDATA 12
-#define DIF_VALIDATEDRIVER 13
-#define DIF_MOVEDEVICE 14
-#define DIF_DETECT 15
-#define DIF_INSTALLWIZARD 16
-#define DIF_DESTROYWIZARDDATA 17
-#define DIF_PROPERTYCHANGE 18
-#define DIF_ENABLECLASS 19
-#define DIF_DETECTVERIFY 20
-#define DIF_INSTALLDEVICEFILES 21
-#define DIF_UNREMOVE 22
-#define DIF_SELECTBESTCOMPATDRV 23
-#define DIF_ALLOW_INSTALL 24
-#define DIF_REGISTERDEVICE 25
-#define DIF_NEWDEVICEWIZARD_PRESELECT 26
-#define DIF_NEWDEVICEWIZARD_SELECT 27
-#define DIF_NEWDEVICEWIZARD_PREANALYZE 28
-#define DIF_NEWDEVICEWIZARD_POSTANALYZE 29
-#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 30
-#define DIF_UNUSED1 31
-#define DIF_INSTALLINTERFACES 32
-#define DIF_DETECTCANCEL 33
-#define DIF_REGISTER_COINSTALLERS 34
-#define DIF_ADDPROPERTYPAGE_ADVANCED 35
-#define DIF_ADDPROPERTYPAGE_BASIC 36
-#define DIF_RESERVED1 37
-#define DIF_TROUBLESHOOTER 38
-#define DIF_POWERMESSAGEWAKE 39
-#define DIGCF_DEFAULT 0x00000001
+#define DIF_SELECTDEVICE 1
+#define DIF_INSTALLDEVICE 2
+#define DIF_ASSIGNRESOURCES 3
+#define DIF_PROPERTIES 4
+#define DIF_REMOVE 5
+#define DIF_FIRSTTIMESETUP 6
+#define DIF_FOUNDDEVICE 7
+#define DIF_SELECTCLASSDRIVERS 8
+#define DIF_VALIDATECLASSDRIVERS 9
+#define DIF_INSTALLCLASSDRIVERS 10
+#define DIF_CALCDISKSPACE 11
+#define DIF_DESTROYPRIVATEDATA 12
+#define DIF_VALIDATEDRIVER 13
+#define DIF_MOVEDEVICE 14
+#define DIF_DETECT 15
+#define DIF_INSTALLWIZARD 16
+#define DIF_DESTROYWIZARDDATA 17
+#define DIF_PROPERTYCHANGE 18
+#define DIF_ENABLECLASS 19
+#define DIF_DETECTVERIFY 20
+#define DIF_INSTALLDEVICEFILES 21
+#define DIF_UNREMOVE 22
+#define DIF_SELECTBESTCOMPATDRV 23
+#define DIF_ALLOW_INSTALL 24
+#define DIF_REGISTERDEVICE 25
+#define DIF_NEWDEVICEWIZARD_PRESELECT 26
+#define DIF_NEWDEVICEWIZARD_SELECT 27
+#define DIF_NEWDEVICEWIZARD_PREANALYZE 28
+#define DIF_NEWDEVICEWIZARD_POSTANALYZE 29
+#define DIF_NEWDEVICEWIZARD_FINISHINSTALL 30
+#define DIF_UNUSED1 31
+#define DIF_INSTALLINTERFACES 32
+#define DIF_DETECTCANCEL 33
+#define DIF_REGISTER_COINSTALLERS 34
+#define DIF_ADDPROPERTYPAGE_ADVANCED 35
+#define DIF_ADDPROPERTYPAGE_BASIC 36
+#define DIF_RESERVED1 37
+#define DIF_TROUBLESHOOTER 38
+#define DIF_POWERMESSAGEWAKE 39
+#define DIF_ADDREMOTEPROPERTYPAGE_ADVANCED 40
+#define DIF_UPDATEDRIVER_UI 41
+#define DIF_RESERVED2 42
#define DIGCDP_FLAG_BASIC 0x00000001
-#define DIGCF_PRESENT 0x00000002
#define DIGCDP_FLAG_ADVANCED 0x00000002
+#if (_SETUPAPI_VER >= 0x0501)
+#define DIGCDP_FLAG_REMOTE_BASIC 0x00000003
+#define DIGCDP_FLAG_REMOTE_ADVANCED 0x00000004
+#endif
+#define DIGCF_DEFAULT 0x00000001
+#define DIGCF_PRESENT 0x00000002
#define DIGCF_ALLCLASSES 0x00000004
#define DIGCF_PROFILE 0x00000008
#define DIGCF_DEVICEINTERFACE 0x00000010
#define DMI_MASK 0x00000001
#define DMI_BKCOLOR 0x00000002
#define DMI_USERECT 0x00000004
+#define DN_ROOT_ENUMERATED 0x00000001
+#define DN_DRIVER_LOADED 0x00000002
+#define DN_ENUM_LOADED 0x00000004
+#define DN_STARTED 0x00000008
+#define DN_MANUAL 0x00000010
+#define DN_NEED_TO_ENUM 0x00000020
+#define DN_NOT_FIRST_TIME 0x00000040
+#define DN_HARDWARE_ENUM 0x00000080
+#define DN_LIAR 0x00000100
+#define DN_HAS_MARK 0x00000200
+#define DN_HAS_PROBLEM 0x00000400
+#define DN_FILTERED 0x00000800
+#define DN_MOVED 0x00001000
+#define DN_DISABLEABLE 0x00002000
+#define DN_REMOVABLE 0x00004000
+#define DN_PRIVATE_PROBLEM 0x00008000
+#define DN_MF_PARENT 0x00010000
+#define DN_MF_CHILD 0x00020000
+#define DN_WILL_BE_REMOVED 0x00040000
+#define DN_NOT_FIRST_TIMEE 0x00080000
+#define DN_STOP_FREE_RES 0x00100000
+#define DN_REBAL_CANDIDATE 0x00200000
+#define DN_BAD_PARTIAL 0x00400000
+#define DN_NT_ENUMERATOR 0x00800000
+#define DN_NT_DRIVER 0x01000000
+#define DN_NEEDS_LOCKING 0x02000000
+#define DN_ARM_WAKEUP 0x04000000
+#define DN_APM_ENUMERATOR 0x08000000
+#define DN_APM_DRIVER 0x10000000
+#define DN_SILENT_INSTALL 0x20000000
+#define DN_NO_SHOW_IN_DM 0x40000000
+#define DN_BOOT_LOG_PROB 0x80000000
#define DNF_DUPDESC 0x00000001
#define DNF_OLDDRIVER 0x00000002
#define DNF_EXCLUDEFROMLIST 0x00000004
#define SPFILENOTIFY_BACKUPERROR 22
#define SPFILENOTIFY_ENDBACKUP 23
#define SPFILENOTIFY_QUEUESCAN_EX 24
+#define SPFILENOTIFY_STARTREGISTRATION 25
+#define SPFILENOTIFY_ENDREGISTRATION 26
#define SPFILENOTIFY_LANGMISMATCH 0x00010000
#define SPFILENOTIFY_TARGETEXISTS 0x00020000
#define SPFILENOTIFY_TARGETNEWER 0x00040000
#define SPINST_SINGLESECTION 0x00010000
#define SPINST_LOGCONFIG_IS_FORCED 0x00020000
#define SPINST_LOGCONFIGS_ARE_OVERRIDES 0x00040000
+#if (_SETUPAPI_VER >= 0x0501)
+#define SPINST_REGISTERCALLBACKAWARE 0x00080000
+#endif
#define SPOST_NONE 0
#define SPOST_PATH 1
#define SPOST_URL 2
#define SRCLIST_SUBDIRS 0x00000100
#define SRCLIST_APPEND 0x00000200
#define SRCLIST_NOSTRIPPLATFORM 0x00000400
+#define SPREG_SUCCESS 0x00000000
+#define SPREG_LOADLIBRARY 0x00000001
+#define SPREG_GETPROCADDR 0x00000002
+#define SPREG_REGSVR 0x00000003
+#define SPREG_DLLINSTALL 0x00000004
+#define SPREG_TIMEOUT 0x00000005
+#define SPREG_UNKNOWN 0xFFFFFFFF
+
+/* Flags for StringTableAddString and StringTableLookUpString */
+#define ST_CASE_SENSITIVE_COMPARE 0x00000001
#ifndef RC_INVOKED
typedef PVOID HINF;
typedef PVOID HSPFILELOG;
typedef UINT DI_FUNCTION;
+typedef PVOID HSTRING_TABLE;
+
typedef enum {
SetupFileLogSourceFilename,
SetupFileLogChecksum,
WCHAR ListLabel[MAX_LABEL_LEN];
WCHAR SubTitle[MAX_SUBTITLE_LEN];
} SP_SELECTDEVICE_PARAMS_W, *PSP_SELECTDEVICE_PARAMS_W;
+typedef struct _SP_REGISTER_CONTROL_STATUSA {
+ DWORD cbSize;
+ PCSTR FileName;
+ DWORD Win32Error;
+ DWORD FailureCode;
+} SP_REGISTER_CONTROL_STATUSA, *PSP_REGISTER_CONTROL_STATUSA;
+typedef struct _SP_REGISTER_CONTROL_STATUSW {
+ DWORD cbSize;
+ PCWSTR FileName;
+ DWORD Win32Error;
+ DWORD FailureCode;
+} SP_REGISTER_CONTROL_STATUSW, *PSP_REGISTER_CONTROL_STATUSW;
typedef BOOL (CALLBACK* PDETECT_PROGRESS_NOTIFY)(PVOID,DWORD);
typedef struct _SP_DETECTDEVICE_PARAMS {
*PSP_DRVINFO_DETAIL_DATA;
typedef SP_BACKUP_QUEUE_PARAMS_W SP_BACKUP_QUEUE_PARAMS,
*PSP_BACKUP_QUEUE_PARAMS;
+typedef SP_REGISTER_CONTROL_STATUSW SP_REGISTER_CONTROL_STATUS, *PSP_REGISTER_CONTROL_STATUS;
#else
typedef SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO, *PSP_ORIGINAL_FILE_INFO;
typedef FILEPATHS_A FILEPATHS, *PFILEPATHS;
*PSP_DRVINFO_DETAIL_DATA;
typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS,
*PSP_BACKUP_QUEUE_PARAMS;
+typedef SP_REGISTER_CONTROL_STATUSA SP_REGISTER_CONTROL_STATUS, *PSP_REGISTER_CONTROL_STATUS;
#endif /* UNICODE */
+
+WINSETUPAPI LONG WINAPI AddTagToGroupOrderList(PCWSTR, DWORD, DWORD);
+WINSETUPAPI VOID WINAPI AssertFail(LPSTR, UINT, LPSTR);
+WINSETUPAPI DWORD WINAPI CaptureAndConvertAnsiArg(PCSTR, PWSTR*);
+WINSETUPAPI DWORD WINAPI CaptureStringArg(PCWSTR, PWSTR*);
+WINSETUPAPI VOID WINAPI CenterWindowRelativeToParent(HWND);
+WINSETUPAPI BOOL WINAPI ConcatenatePaths(LPWSTR, LPCWSTR, DWORD, LPDWORD);
+WINSETUPAPI BOOL WINAPI DelayedMove(PCWSTR, PCWSTR);
+WINSETUPAPI BOOL WINAPI DoesUserHavePrivilege(PCWSTR);
+WINSETUPAPI PWSTR WINAPI DuplicateString(PCWSTR);
+WINSETUPAPI BOOL WINAPI EnablePrivilege(PCWSTR, BOOL);
+WINSETUPAPI BOOL WINAPI FileExists(PCWSTR, PWIN32_FIND_DATAW);
+WINSETUPAPI DWORD WINAPI GetSetFileTimestamp(PCWSTR, PFILETIME, PFILETIME, PFILETIME, BOOLEAN);
+WINSETUPAPI BOOL WINAPI GetVersionInfoFromImage(LPWSTR, PULARGE_INTEGER, LPWORD);
+WINSETUPAPI BOOL WINAPI IsUserAdmin(VOID);
+WINSETUPAPI PWSTR WINAPI MultiByteToUnicode(PCSTR, UINT);
+WINSETUPAPI VOID WINAPI MyFree(PVOID);
+WINSETUPAPI PWSTR WINAPI MyGetFileTitle(PCWSTR);
+WINSETUPAPI PVOID WINAPI MyMalloc(DWORD);
+WINSETUPAPI PVOID WINAPI MyRealloc(PVOID, DWORD);
+WINSETUPAPI DWORD WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID*);
+WINSETUPAPI LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE*, PDWORD, PDWORD);
+WINSETUPAPI DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR*);
+
WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT);
WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT);
WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT);
WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_A);
WINSETUPAPI BOOL WINAPI SetupDiEnumDriverInfoW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_W);
WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallA(HINF,PCSTR,PSTR,DWORD,PDWORD,PSTR*);
+WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallExA(HINF,PCSTR,PSP_ALTPLATFORM_INFO,PSTR,DWORD,PDWORD,PSTR*,PVOID);
+WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallExW(HINF,PCWSTR,PSP_ALTPLATFORM_INFO,PWSTR,DWORD,PDWORD,PWSTR*,PVOID);
WINSETUPAPI BOOL WINAPI SetupDiGetActualSectionToInstallW(HINF,PCWSTR,PWSTR,DWORD,PDWORD,PWSTR*);
WINSETUPAPI BOOL WINAPI SetupDiGetClassBitmapIndex(CONST GUID*,PINT);
WINSETUPAPI BOOL WINAPI SetupDiGetClassDescriptionA(CONST GUID*,PSTR,DWORD,PDWORD);
WINSETUPAPI VOID WINAPI SetupTermDefaultQueueCallback(PVOID);
WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(HSPFILELOG);
+WINSETUPAPI DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR);
+
+WINSETUPAPI DWORD WINAPI StringTableAddString(HSTRING_TABLE, LPWSTR, DWORD);
+WINSETUPAPI DWORD WINAPI StringTableAddStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD);
+WINSETUPAPI VOID WINAPI StringTableDestroy(HSTRING_TABLE);
+WINSETUPAPI HSTRING_TABLE WINAPI StringTableDuplicate(HSTRING_TABLE);
+WINSETUPAPI BOOL WINAPI StringTableGetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD);
+WINSETUPAPI HSTRING_TABLE WINAPI StringTableInitialize(VOID);
+WINSETUPAPI HSTRING_TABLE WINAPI StringTableInitializeEx(DWORD, DWORD);
+WINSETUPAPI DWORD WINAPI StringTableLookUpString(HSTRING_TABLE, LPWSTR, DWORD);
+WINSETUPAPI DWORD WINAPI StringTableLookUpStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, LPDWORD);
+WINSETUPAPI BOOL WINAPI StringTableSetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD);
+WINSETUPAPI LPWSTR WINAPI StringTableStringFromId(HSTRING_TABLE, DWORD);
+WINSETUPAPI BOOL WINAPI StringTableStringFromIdEx(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD);
+WINSETUPAPI VOID WINAPI StringTableTrim(HSTRING_TABLE);
+
+WINSETUPAPI DWORD WINAPI TakeOwnershipOfFile(PCWSTR);
+WINSETUPAPI PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage);
+WINSETUPAPI BOOL WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID);
+
+
/* for backward compatability */
#define SetupDiCreateInterfaceDeviceW SetupDiCreateDeviceInterfaceW
#define SetupDiCreateInterfaceDeviceRegKeyW SetupDiCreateDeviceInterfaceRegKeyW
#define SetupDiOpenInterfaceDeviceA SetupDiOpenDeviceInterfaceA
#define SetupDiGetInterfaceDeviceDetailA SetupDiGetDeviceInterfaceDetailA
-#ifdef UNICODE
+#ifdef UNICODE
#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_W
#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListW
#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListW
#define SetupDiCreateDevRegKey SetupDiCreateDevRegKeyW
#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoW
#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallW
+#define SetupDiGetActualSectionToInstallEx SetupDiGetActualSectionToInstallExW
#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExW
#define SetupDiGetClassDescription SetupDiGetClassDescriptionW
#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsW
#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformW
#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideW
#define SetupSetSourceList SetupSetSourceListW
-#else
+#else
#define PSP_FILE_CALLBACK PSP_FILE_CALLBACK_A
#define SetupAddInstallSectionToDiskSpaceList SetupAddInstallSectionToDiskSpaceListA
#define SetupAddSectionToDiskSpaceList SetupAddSectionToDiskSpaceListA
#define SetupDiDeleteInterfaceDeviceData SetupDiDeleteDeviceInterfaceData
#define SetupDiEnumDriverInfo SetupDiEnumDriverInfoA
#define SetupDiGetActualSectionToInstall SetupDiGetActualSectionToInstallA
+#define SetupDiGetActualSectionToInstallEx SetupDiGetActualSectionToInstallExA
#define SetupDiGetClassDescription SetupDiGetClassDescriptionA
#define SetupDiGetClassDescriptionEx SetupDiGetClassDescriptionExA
#define SetupDiGetClassDevPropertySheets SetupDiGetClassDevPropertySheetsA
#define SetupSetFileQueueAlternatePlatform SetupSetFileQueueAlternatePlatformA
#define SetupSetPlatformPathOverride SetupSetPlatformPathOverrideA
#define SetupSetSourceList SetupSetSourceListA
-#endif /* UNICODE */
+#endif /* UNICODE */
#endif /* RC_INVOKED */