#ifndef _INC_DIFXAPI_DYN_
#define _INC_DIFXAPI_DYN_
#if _MSC_VER > 1000
#pragma once
#endif
#if !defined(_DIFXAPI_DYN_)
#define WINDIFXAPI DECLSPEC_IMPORT
#else
#define WINDIFXAPI
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _DIFXAPI_DYN_VERSION_
#define _DIFXAPI_DYN_VERSION_ 0x0200
#endif
#define ERROR_DEPENDENT_APPLICATIONS_EXIST (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x300)
#define ERROR_NO_DEVICE_ID (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x301)
#define ERROR_DRIVER_PACKAGE_NOT_IN_STORE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x302)
#define ERROR_MISSING_FILE (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x303)
#define ERROR_INVALID_CATALOG_DATA (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x304)
#ifndef ERROR_NO_SUCH_DEVINST
#define ERROR_NO_SUCH_DEVINST 0xE000020B
#endif
#ifndef ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH
#define ERROR_SIGNATURE_OSATTRIBUTE_MISMATCH 0xE0000244
#endif
#define DRIVER_PACKAGE_REPAIR 0x00000001
#define DRIVER_PACKAGE_SILENT 0x00000002
#define DRIVER_PACKAGE_FORCE 0x00000004
#define DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT 0x00000008
#define DRIVER_PACKAGE_LEGACY_MODE 0x00000010
#define DRIVER_PACKAGE_DELETE_FILES 0x00000020
typedef DWORD WINAPI DriverPackagePreinstallW_t(
__in PCWSTR DriverPackageInfPath,
__in DWORD Flags
);
typedef DWORD WINAPI DriverPackagePreinstallA_t(
__in PCSTR DriverPackageInfPath,
__in DWORD Flags
);
#ifdef UNICODE
#define DriverPackagePreinstall DriverPackagePreinstallW
#else
#define DriverPackagePreinstall DriverPackagePreinstallA
#endif
typedef struct
{
PWSTR pApplicationId;
PWSTR pDisplayName;
PWSTR pProductName;
PWSTR pMfgName;
} INSTALLERINFO_W, * PINSTALLERINFO_W;
typedef const PINSTALLERINFO_W PCINSTALLERINFO_W;
typedef struct
{
PSTR pApplicationId;
PSTR pDisplayName;
PSTR pProductName;
PSTR pMfgName;
} INSTALLERINFO_A, * PINSTALLERINFO_A;
typedef const PINSTALLERINFO_A PCINSTALLERINFO_A;
#ifdef UNICODE
typedef INSTALLERINFO_W INSTALLERINFO;
typedef PINSTALLERINFO_W PINSTALLERINFO;
typedef PCINSTALLERINFO_W PCINSTALLERINFO;
#else
typedef INSTALLERINFO_A INSTALLERINFO;
typedef PINSTALLERINFO_A PINSTALLERINFO;
typedef PCINSTALLERINFO_A PCINSTALLERINFO;
#endif
typedef DWORD WINAPI DriverPackageInstallW_t(
__in PCWSTR DriverPackageInfPath,
__in DWORD Flags,
__in_opt PCINSTALLERINFO_W pInstallerInfo,
__out BOOL* pNeedReboot
);
typedef DWORD WINAPI DriverPackageInstallA_t(
__in PCSTR DriverPackageInfPath,
__in DWORD Flags,
__in_opt PCINSTALLERINFO_A pInstallerInfo,
__out BOOL* pNeedReboot
);
#ifdef UNICODE
#define DriverPackageInstall DriverPackageInstallW
#else
#define DriverPackageInstall DriverPackageInstallA
#endif
typedef DWORD WINAPI DriverPackageUninstallW_t(
__in PCWSTR DriverPackageInfPath,
__in DWORD Flags,
__in_opt PCINSTALLERINFO_W pInstallerInfo,
__out BOOL* pNeedReboot
);
typedef DWORD WINAPI DriverPackageUninstallA_t(
__in PCSTR DriverPackageInfPath,
__in DWORD Flags,
__in_opt PCINSTALLERINFO_A pInstallerInfo,
__out BOOL* pNeedReboot
);
#ifdef UNICODE
#define DriverPackageUninstall DriverPackageUninstallW
#else
#define DriverPackageUninstall DriverPackageUninstallA
#endif
typedef DWORD WINAPI DriverPackageGetPathW_t(
__in PCWSTR DriverPackageInfPath,
__out_ecount_opt(*pNumOfChars) PWSTR pDestInfPath,
__inout DWORD* pNumOfChars
);
typedef DWORD WINAPI DriverPackageGetPathA_t(
__in PCSTR DriverPackageInfPath,
__out_ecount_opt(*pNumOfChars) PSTR pDestInfPath,
__inout DWORD* pNumOfChars
);
#ifdef UNICODE
#define DriverPackageGetPath DriverPackageGetPathW
#else
#define DriverPackageGetPath DriverPackageGetPathA
#endif
typedef enum
{
DIFXAPI_SUCCESS = 0, DIFXAPI_INFO = 1, DIFXAPI_WARNING = 2, DIFXAPI_ERROR = 3 } DIFXAPI_LOG;
typedef __callback void (WINAPI* DIFXLOGCALLBACK_W)(DIFXAPI_LOG Event, DWORD Error, PCWSTR EventDescription, PVOID CallbackContext);
typedef __callback void (WINAPI* DIFXLOGCALLBACK_A)(DIFXAPI_LOG Event, DWORD Error, PCSTR EventDescription, PVOID CallbackContext);
typedef VOID WINAPI SetDifxLogCallbackW_t(
__in DIFXLOGCALLBACK_W LogCallback,
__in PVOID CallbackContext
);
typedef VOID WINAPI SetDifxLogCallbackA_t(
__in DIFXLOGCALLBACK_A LogCallback,
__in PVOID CallbackContext
);
#ifdef UNICODE
#define DIFLOGCALLBACK DIFXLOGCALLBACK_W
#define SetDifxLogCallback SetDifxLogCallbackW
#else
#define DIFLOGCALLBACK DIFXLOGCALLBACK_A
#define SetDifxLogCallback SetDifxLogCallbackA
#endif
typedef __callback void (__cdecl* DIFXAPILOGCALLBACK_W)(DIFXAPI_LOG Event, DWORD Error, PCWSTR EventDescription, PVOID CallbackContext);
typedef __callback void (__cdecl* DIFXAPILOGCALLBACK_A)(DIFXAPI_LOG Event, DWORD Error, PCSTR EventDescription, PVOID CallbackContext);
typedef VOID WINAPI DIFXAPISetLogCallbackW_t(
__in_opt DIFXAPILOGCALLBACK_W LogCallback,
__in_opt PVOID CallbackContext
);
typedef VOID WINAPI DIFXAPISetLogCallbackA_t(
__in_opt DIFXAPILOGCALLBACK_A LogCallback,
__in_opt PVOID CallbackContext
);
#ifdef UNICODE
#define DIFXAPILOGCALLBACK DIFXAPILOGCALLBACK_W
#define DIFXAPISetLogCallback DIFXAPISetLogCallbackW
#else
#define DIFXAPILOGCALLBACK DIFXAPILOGCALLBACK_A
#define DIFXAPISetLogCallback DIFXAPISetLogCallbackA
#endif
#ifdef __cplusplus
}
#endif
extern DriverPackagePreinstallW_t* DriverPackagePreinstallW;
extern DriverPackagePreinstallA_t* DriverPackagePreinstallA;
extern DriverPackageInstallW_t* DriverPackageInstallW;
extern DriverPackageInstallA_t* DriverPackageInstallA;
extern DriverPackageUninstallW_t* DriverPackageUninstallW;
extern DriverPackageUninstallA_t* DriverPackageUninstallA;
extern DriverPackageGetPathW_t* DriverPackageGetPathW;
extern DriverPackageGetPathA_t* DriverPackageGetPathA;
extern SetDifxLogCallbackW_t* SetDifxLogCallbackW;
extern SetDifxLogCallbackA_t* SetDifxLogCallbackA;
extern DIFXAPISetLogCallbackW_t* DIFXAPISetLogCallbackW;
extern DIFXAPISetLogCallbackA_t* DIFXAPISetLogCallbackA;
BOOL DifK_Init(LPCTSTR LibFullPath);
VOID DifK_Free(void);
#endif