96 FIXME(
"( %ld %ld %p %p) : stub!\n",
i,
j, p1, p2);
200 if (
len > buffer_length)
213 if (buffer_length > (
mode - 1))
218 *(
buffer+buffer_length-1) =
'\0';
228 ERR(
"transferring wide to narrow\n");
237 ERR(
"measuring wide to narrow\n");
302 HKEY hkey, hkeydriver;
335 ERR(
"Failed to write registry installed key\n");
422 TRACE(
"Calling ConfigDSN\n");
424 ret = pConfigDSN(
hwnd, mapped_request, driverA,
attr);
429 ERR(
"Failed to find ConfigDSN/W\n");
484 TRACE(
"Calling ConfigDSN\n");
493 TRACE(
"Calling ConfigDSNW\n");
619 FIXME(
"%s %p %d %p\n",
debugstr_w(lpszInfFile), lpszBuf, cbBufMax, pcbBufOut);
628 FIXME(
"%s %p %d %p\n",
debugstr_a(lpszInfFile), lpszBuf, cbBufMax, pcbBufOut);
636 TRACE(
"%p\n", pwConfigMode);
748 HKEY hkey, hkeyfilename, hkeysection;
762 return ret ?
NULL : hkeysection;
783 if (!defvalue || !
buff)
807 ret = (
size /
sizeof(*buff)) - 1;
899 ret = (
size /
sizeof(*buff)) - 1;
946 pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption);
957 pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption);
969 debugstr_w(lpszDriver), lpszPath, cbPathMax, pcbPathOut);
985 debugstr_a(lpszDriver), lpszPath, cbPathMax, pcbPathOut);
997 HKEY hkey, hkeydriver;
1004 ERR(
"Failed to write registry installed key\n");
1013 DWORD usagecount = 0;
1026 size =
sizeof(usagecount);
1028 TRACE(
"Usage count %ld\n", usagecount);
1057 ERR(
"Out of memory\n");
1062 if (pathlen &&
path[pathlen - 1] !=
'\\')
1071 ERR(
"Out of memory\n");
1099 ERR(
"Failed to write registry UsageCount key\n");
1102 *usage_count = usagecount;
1120 debugstr_w(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1121 fRequest, lpdwUsageCount);
1130 if (lpszPathOut && cbPathOutMax >
len)
1149 debugstr_a(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1150 fRequest, lpdwUsageCount);
1156 fRequest, lpdwUsageCount);
1164 *pcbPathOut =
len - 1;
1166 if (!lpszPathOut || cbPathOutMax <
len)
1188 TRACE(
"(%p %d %p)\n", lpszPath, cbPathMax, pcbPathOut);
1200 if (lpszPath && cbPathMax >
len)
1215 TRACE(
"(%p %d %p)\n", lpszPath, cbPathMax, pcbPathOut);
1230 *pcbPathOut =
len - 1;
1232 if (!lpszPath || cbPathMax <
len)
1265 TRACE(
"%d %p %p %d %p\n", iError, pfErrorCode, lpszErrorMsg,
1266 cbErrorMsgMax, pcbErrorMsg);
1285 if (cbErrorMsgMax <
len)
1287 len = cbErrorMsgMax;
1290 if (lpszErrorMsg &&
len)
1315 if (lpszErrorMsg && cbErrorMsgMax > 0)
1316 *lpszErrorMsg =
'\0';
1327 TRACE(
"%d %p %p %d %p\n", iError, pfErrorCode, lpszErrorMsg,
1328 cbErrorMsgMax, pcbErrorMsg);
1331 if (lpszErrorMsg && cbErrorMsgMax)
1344 *pcbErrorMsg = cbBuf-1;
1358 debugstr_w(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1359 fRequest, lpdwUsageCount);
1368 if (lpszPathOut && cbPathOutMax >
len)
1381 LPWSTR translator, pathin;
1388 debugstr_a(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1389 fRequest, lpdwUsageCount);
1398 &cbOut, fRequest, lpdwUsageCount);
1406 *pcbPathOut =
len - 1;
1408 if (!lpszPathOut || cbPathOutMax <
len)
1431 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1437 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1447 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1453 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1511 DWORD usagecount = 1;
1525 size =
sizeof(usagecount);
1527 TRACE(
"Usage count %ld\n", usagecount);
1528 count = usagecount - 1;
1532 ERR(
"Failed to write registry UsageCount key\n");
1544 ERR(
"Failed to delete registry key: %s\n",
debugstr_w(drivername));
1549 ERR(
"Failed to delete registry value: %s\n",
debugstr_w(drivername));
1558 *usage_count = usagecount;
1570 TRACE(
"%s %d %p\n",
debugstr_a(lpszDriver), fRemoveDSN, lpdwUsageCount);
1583 FIXME(
"%p\n", pdwUsageCount);
1584 if (pdwUsageCount) *pdwUsageCount = 1;
1612 wcscpy(regpath,
L"Software\\ODBC\\ODBC.INI\\");
1613 wcscat(regpath, lpszDSN);
1663 DWORD usagecount = 1;
1678 size =
sizeof(usagecount);
1680 TRACE(
"Usage count %ld\n", usagecount);
1681 count = usagecount - 1;
1685 ERR(
"Failed to write registry UsageCount key\n");
1699 WARN(
"Failed to delete registry key: %s\n",
debugstr_w(translator));
1708 WARN(
"Failed to delete registry key: %s\n",
debugstr_w(translator));
1719 if (
ret && usage_count)
1720 *usage_count = usagecount;
1743 TRACE(
"%u\n", wConfigMode);
1772 static const char *invalid =
"[]{}(),;?*=!@\\";
1825 wcscpy(regpath,
L"Software\\ODBC\\ODBC.INI\\");
1826 wcscat(regpath, lpszDSN);
1914 if(!lpszFilename || !*lpszFilename)
1927 wcscpy(regpath,
L"Software\\ODBC\\");
1928 wcscat(regpath, lpszFilename);
1930 wcscat(regpath, lpszSection);
1967 TRACE(
"%s %s %s %s\n", lpszSection, lpszEntry, lpszString, lpszFilename);
std::map< E_MODULE, HMODULE > mod
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
LSTATUS WINAPI RegDeleteTreeW(_In_ HKEY, _In_opt_ LPCWSTR)
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI RegEnumValueA(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpdwReserved, _Out_opt_ LPDWORD lpdwType, _Out_opt_ LPBYTE lpData, _Inout_opt_ LPDWORD lpcbData)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LSTATUS WINAPI RegGetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
#define ERROR_CALL_NOT_IMPLEMENTED
#define GetProcAddress(x, y)
#define ERROR_NO_MORE_ITEMS
#define WideCharToMultiByte
#define MultiByteToWideChar
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
_ACRTIMP wchar_t *__cdecl wcspbrk(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP char *__cdecl strpbrk(const char *, const char *)
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizeiptr const GLvoid GLenum usage
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
static NTSTATUS *static PWSTR CURDIR *static HMODULE hmod
static const WCHAR filenameW[]
#define ODBC_INSTALL_COMPLETE
#define ODBC_ERROR_REQUEST_FAILED
#define ODBC_REMOVE_SYS_DSN
#define ODBC_CONFIG_DRIVER
#define ODBC_ERROR_INVALID_PARAM_SEQUENCE
#define ODBC_ERROR_INVALID_DSN
#define ODBC_ERROR_INVALID_STR
#define ODBC_ERROR_LOAD_LIB_FAILED
#define ODBC_ERROR_COMPONENT_NOT_FOUND
#define ODBC_CONFIG_SYS_DSN
#define ODBC_ERROR_GENERAL_ERR
#define ODBC_ERROR_INVALID_BUFF_LEN
#define ODBC_ERROR_OUT_OF_MEM
#define ODBC_ERROR_INVALID_KEYWORD_VALUE
static HANDLE ACCESS_MASK ULONG attributes
static const WCHAR driverW[]
static const char *static const char const char DWORD void DWORD *static const char const char DWORD void DWORD *static const char DWORD DWORD void DWORD * buff_len
static const char *static const char const char DWORD void DWORD *static const char const char DWORD void DWORD *static const char DWORD DWORD void * buff
#define SQL_SUCCESS_WITH_INFO
#define SQL_MAX_DSN_LENGTH
#define INVALID_FILE_ATTRIBUTES
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
BOOL WINAPI SQLWriteFileDSN(LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPCSTR lpszString)
BOOL WINAPI SQLSetConfigMode(UWORD wConfigMode)
BOOL WINAPI SQLInstallTranslatorW(LPCWSTR lpszInfFile, LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
int WINAPI SQLGetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR defvalue, LPWSTR buff, int buff_len, LPCWSTR filename)
BOOL WINAPI SQLRemoveTranslator(LPCSTR lpszTranslator, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLGetInstalledDriversW(WCHAR *buf, WORD size, WORD *sizeout)
BOOL WINAPI ODBCCPlApplet(LONG i, LONG j, LONG *p1, LONG *p2)
BOOL WINAPI SQLWriteFileDSNW(LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPCWSTR lpszString)
BOOL WINAPI SQLGetAvailableDriversW(LPCWSTR lpszInfFile, LPWSTR lpszBuf, WORD cbBufMax, WORD *pcbBufOut)
BOOL WINAPI SQLInstallTranslator(LPCSTR lpszInfFile, LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLConfigDataSourceW(HWND hwnd, WORD request, LPCWSTR driver, LPCWSTR attributes)
BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
BOOL WINAPI SQLInstallDriverExW(LPCWSTR lpszDriver, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLReadFileDSNW(LPCWSTR lpszFileName, LPCWSTR lpszAppName, LPCWSTR lpszKeyName, LPWSTR lpszString, WORD cbString, WORD *pcbString)
BOOL WINAPI SQLReadFileDSN(LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPSTR lpszString, WORD cbString, WORD *pcbString)
BOOL WINAPI SQLCreateDataSourceW(HWND hwnd, LPCWSTR lpszDS)
BOOL WINAPI SQLRemoveDriverW(LPCWSTR drivername, BOOL remove_dsn, LPDWORD usage_count)
SQLRETURN WINAPI SQLInstallerError(WORD iError, DWORD *pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
BOOL WINAPI SQLConfigDriverW(HWND hwnd, WORD request, LPCWSTR driver, LPCWSTR args, LPWSTR msg, WORD msgmax, WORD *msgout)
BOOL WINAPI SQLValidDSNW(LPCWSTR lpszDSN)
BOOL WINAPI SQLInstallDriver(LPCSTR lpszInfFile, LPCSTR lpszDriver, LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
BOOL WINAPI SQLInstallDriverManager(LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
BOOL WINAPI SQLManageDataSources(HWND hwnd)
BOOL WINAPI SQLGetAvailableDrivers(LPCSTR lpszInfFile, LPSTR lpszBuf, WORD cbBufMax, WORD *pcbBufOut)
BOOL WINAPI SQLRemoveDefaultDataSource(void)
static void clear_errors(void)
BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver, LPCSTR args, LPSTR msg, WORD msgmax, WORD *msgout)
BOOL WINAPI SQLGetConfigMode(UWORD *pwConfigMode)
BOOL WINAPI SQLCreateDataSource(HWND hwnd, LPCSTR lpszDS)
static BOOL SQLInstall_narrow(int mode, LPSTR buffer, LPCWSTR str, WORD str_length, WORD buffer_length, WORD *returned_length)
static void push_error(int code, LPCWSTR msg)
static WORD const char const char * attr
BOOL WINAPI SQLInstallDriverEx(LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static BOOL write_config_value(const WCHAR *driver, const WCHAR *args)
BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR attributes)
BOOL WINAPI SQLWriteDSNToIniW(LPCWSTR lpszDSN, LPCWSTR lpszDriver)
static LPSTR SQLInstall_strdup_multiWtoA(LPCWSTR str)
BOOL WINAPI SQLInstallODBC(HWND hwndParent, LPCSTR lpszInfFile, LPCSTR lpszSrcPath, LPCSTR lpszDrivers)
static LPWSTR SQLInstall_strdup(LPCSTR str)
BOOL WINAPI SQLGetTranslator(HWND hwndParent, LPSTR lpszName, WORD cbNameMax, WORD *pcbNameOut, LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut, DWORD *pvOption)
static WORD const char * driver
static char * strdupWtoA(const WCHAR *str)
BOOL WINAPI SQLRemoveTranslatorW(const WCHAR *translator, DWORD *usage_count)
int WINAPI SQLGetPrivateProfileString(LPCSTR section, LPCSTR entry, LPCSTR defvalue, LPSTR buff, int buff_len, LPCSTR filename)
BOOL WINAPI SQLInstallDriverW(LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
BOOL WINAPI SQLWriteDSNToIni(LPCSTR lpszDSN, LPCSTR lpszDriver)
BOOL WINAPI SQLGetTranslatorW(HWND hwndParent, LPWSTR lpszName, WORD cbNameMax, WORD *pcbNameOut, LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut, DWORD *pvOption)
static void write_registry_values(const WCHAR *regkey, const WCHAR *driver, const WCHAR *path_in, WCHAR *path, DWORD *usage_count)
BOOL WINAPI SQLInstallDriverManagerW(LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
BOOL WINAPI SQLValidDSN(LPCSTR lpszDSN)
BOOL WINAPI SQLWritePrivateProfileString(LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename)
BOOL WINAPI SQLInstallODBCW(HWND hwndParent, LPCWSTR lpszInfFile, LPCWSTR lpszSrcPath, LPCWSTR lpszDrivers)
BOOL WINAPI SQLRemoveDriver(LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount)
static WCHAR * strdupAtoW(const char *str)
SQLRETURN WINAPI SQLPostInstallerErrorW(DWORD fErrorCode, LPCWSTR szErrorMsg)
static HKEY get_privateprofile_sectionkey(HKEY root, const WCHAR *section, const WCHAR *filename)
static HMODULE load_config_driver(const WCHAR *driver)
SQLRETURN WINAPI SQLPostInstallerError(DWORD fErrorCode, LPCSTR szErrorMsg)
BOOL WINAPI SQLInstallTranslatorEx(LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static WORD map_request(WORD request)
BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename)
static UWORD get_config_mode(WORD request)
SQLRETURN WINAPI SQLInstallerErrorW(WORD iError, DWORD *pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR lpszDSN)
static const WCHAR * error_msg[8]
BOOL WINAPI SQLRemoveDriverManager(LPDWORD pdwUsageCount)
BOOL WINAPI SQLInstallTranslatorExW(LPCWSTR lpszTranslator, LPCWSTR lpszPathIn, LPWSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static LPWSTR SQLInstall_strdup_multi(LPCSTR str)
#define success(from, fromstr, to, tostr)
#define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR
#define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER