44static const WCHAR drivers_key[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'O',
'D',
'B',
'C',
'\\',
'O',
'D',
'B',
'C',
'I',
'N',
'S',
'T',
'.',
'I',
'N',
'I',
'\\',
'O',
'D',
'B',
'C',
' ',
'D',
'r',
'i',
'v',
'e',
'r',
's',0};
45static const WCHAR odbcW[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'O',
'D',
'B',
'C',0};
46static const WCHAR odbcini[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'O',
'D',
'B',
'C',
'\\',
'O',
'D',
'B',
'C',
'I',
'N',
'S',
'T',
'.',
'I',
'N',
'I',
'\\',0};
47static const WCHAR odbcdrivers[] = {
'O',
'D',
'B',
'C',
' ',
'D',
'r',
'i',
'v',
'e',
'r',
's',0};
48static const WCHAR odbctranslators[] = {
'O',
'D',
'B',
'C',
' ',
'T',
'r',
'a',
'n',
's',
'l',
'a',
't',
'o',
'r',
's',0};
63static const WCHAR odbc_error_general_err[] = {
'G',
'e',
'n',
'e',
'r',
'a',
'l',
' ',
'e',
'r',
'r',
'o',
'r',0};
64static const WCHAR odbc_error_invalid_buff_len[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'b',
'u',
'f',
'f',
'e',
'r',
' ',
'l',
'e',
'n',
'g',
't',
'h',0};
65static const WCHAR odbc_error_component_not_found[] = {
'C',
'o',
'm',
'p',
'o',
'n',
'e',
'n',
't',
' ',
'n',
'o',
't',
' ',
'f',
'o',
'u',
'n',
'd',0};
66static const WCHAR odbc_error_out_of_mem[] = {
'O',
'u',
't',
' ',
'o',
'f',
' ',
'm',
'e',
'm',
'o',
'r',
'y',0};
67static const WCHAR odbc_error_invalid_param_sequence[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'p',
'a',
'r',
'a',
'm',
'e',
't',
'e',
'r',
' ',
's',
'e',
'q',
'u',
'e',
'n',
'c',
'e',0};
68static const WCHAR odbc_error_invalid_param_string[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'p',
'a',
'r',
'a',
'm',
'e',
't',
'e',
'r',
' ',
's',
't',
'r',
'i',
'n',
'g',0};
69static const WCHAR odbc_error_invalid_dsn[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'D',
'S',
'N',0};
70static const WCHAR odbc_error_load_lib_failed[] = {
'L',
'o',
'a',
'd',
' ',
'L',
'i',
'b',
'r',
'a',
'r',
'y',
' ',
'F',
'a',
'i',
'l',
'e',
'd',0};
71static const WCHAR odbc_error_request_failed[] = {
'R',
'e',
'q',
'u',
'e',
's',
't',
' ',
'F',
'a',
'i',
'l',
'e',
'd',0};
72static const WCHAR odbc_error_invalid_keyword[] = {
'I',
'n',
'v',
'a',
'l',
'i',
'd',
' ',
'k',
'e',
'y',
'w',
'o',
'r',
'd',
' ',
'v',
'a',
'l',
'u',
'e',0};
111 FIXME(
"( %d %d %p %p) : stub!\n",
i,
j, p1, p2);
183 if (
len > buffer_length)
196 if (buffer_length > (
mode - 1))
201 *(
buffer+buffer_length-1) =
'\0';
211 ERR(
"transferring wide to narrow\n");
220 ERR(
"measuring wide to narrow\n");
310 HKEY hkey, hkeydriver;
343 ERR(
"Failed to write registry installed key\n");
471 FIXME(
"%s %p %d %p\n",
debugstr_w(lpszInfFile), lpszBuf, cbBufMax, pcbBufOut);
480 FIXME(
"%s %p %d %p\n",
debugstr_a(lpszInfFile), lpszBuf, cbBufMax, pcbBufOut);
488 TRACE(
"%p\n", pwConfigMode);
598 HKEY hkey, hkeyfilename, hkeysection;
612 return ret ?
NULL : hkeysection;
633 if (!defvalue || !
buff)
643 size = buff_len *
sizeof(*buff);
647 ret = (
size /
sizeof(*buff)) - 1;
723 size = buff_len *
sizeof(*buff);
727 ret = (
size /
sizeof(*buff)) - 1;
774 pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption);
785 pcbNameOut, lpszPath, cbPathMax, pcbPathOut, pvOption);
797 debugstr_w(lpszDriver), lpszPath, cbPathMax, pcbPathOut);
813 debugstr_a(lpszDriver), lpszPath, cbPathMax, pcbPathOut);
825 static const WCHAR installed[] = {
'I',
'n',
's',
't',
'a',
'l',
'l',
'e',
'd',0};
826 static const WCHAR slash[] = {
'\\', 0};
827 static const WCHAR driverW[] = {
'D',
'r',
'i',
'v',
'e',
'r',0};
828 static const WCHAR setupW[] = {
'S',
'e',
't',
'u',
'p',0};
829 static const WCHAR translator[] = {
'T',
'r',
'a',
'n',
's',
'l',
'a',
't',
'o',
'r',0};
830 HKEY hkey, hkeydriver;
837 ERR(
"Failed to write registry installed key\n");
846 DWORD usagecount = 0;
859 size =
sizeof(usagecount);
861 TRACE(
"Usage count %d\n", usagecount);
886 ERR(
"Out of memory\n");
916 ERR(
"Failed to write registry UsageCount key\n");
919 *usage_count = usagecount;
937 debugstr_w(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
938 fRequest, lpdwUsageCount);
947 if (lpszPathOut && cbPathOutMax >
len)
966 debugstr_a(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
967 fRequest, lpdwUsageCount);
973 fRequest, lpdwUsageCount);
981 *pcbPathOut =
len - 1;
983 if (!lpszPathOut || cbPathOutMax <
len)
1005 TRACE(
"(%p %d %p)\n", lpszPath, cbPathMax, pcbPathOut);
1017 if (lpszPath && cbPathMax >
len)
1032 TRACE(
"(%p %d %p)\n", lpszPath, cbPathMax, pcbPathOut);
1047 *pcbPathOut =
len - 1;
1049 if (!lpszPath || cbPathMax <
len)
1082 TRACE(
"%d %p %p %d %p\n", iError, pfErrorCode, lpszErrorMsg,
1083 cbErrorMsgMax, pcbErrorMsg);
1102 if (cbErrorMsgMax <
len)
1104 len = cbErrorMsgMax;
1107 if (lpszErrorMsg &&
len)
1132 if (lpszErrorMsg && cbErrorMsgMax > 0)
1133 *lpszErrorMsg =
'\0';
1144 TRACE(
"%d %p %p %d %p\n", iError, pfErrorCode, lpszErrorMsg,
1145 cbErrorMsgMax, pcbErrorMsg);
1148 if (lpszErrorMsg && cbErrorMsgMax)
1161 *pcbErrorMsg = cbBuf-1;
1175 debugstr_w(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1176 fRequest, lpdwUsageCount);
1185 if (lpszPathOut && cbPathOutMax >
len)
1198 LPWSTR translator, pathin;
1205 debugstr_a(lpszPathIn), lpszPathOut, cbPathOutMax, pcbPathOut,
1206 fRequest, lpdwUsageCount);
1215 &cbOut, fRequest, lpdwUsageCount);
1223 *pcbPathOut =
len - 1;
1225 if (!lpszPathOut || cbPathOutMax <
len)
1248 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1254 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1264 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1270 cbPathOutMax, pcbPathOut, fRequest, lpdwUsageCount);
1328 DWORD usagecount = 1;
1342 size =
sizeof(usagecount);
1344 TRACE(
"Usage count %d\n", usagecount);
1345 count = usagecount - 1;
1349 ERR(
"Failed to write registry UsageCount key\n");
1361 ERR(
"Failed to delete registry key: %s\n",
debugstr_w(drivername));
1366 ERR(
"Failed to delete registry value: %s\n",
debugstr_w(drivername));
1375 *usage_count = usagecount;
1387 TRACE(
"%s %d %p\n",
debugstr_a(lpszDriver), fRemoveDSN, lpdwUsageCount);
1400 FIXME(
"%p\n", pdwUsageCount);
1401 if (pdwUsageCount) *pdwUsageCount = 1;
1424 DWORD usagecount = 1;
1439 size =
sizeof(usagecount);
1441 TRACE(
"Usage count %d\n", usagecount);
1442 count = usagecount - 1;
1446 ERR(
"Failed to write registry UsageCount key\n");
1460 WARN(
"Failed to delete registry key: %s\n",
debugstr_w(translator));
1469 WARN(
"Failed to delete registry key: %s\n",
debugstr_w(translator));
1480 if (
ret && usage_count)
1481 *usage_count = usagecount;
1504 TRACE(
"%u\n", wConfigMode);
1520 static const WCHAR invalid[] = {
'[',
']',
'{',
'}',
'(',
')',
',',
';',
'?',
'*',
'=',
'!',
'@',
'\\',0};
1534 static const char *
invalid =
"[]{}(),;?*=!@\\";
1591 if(!lpszFilename || !*lpszFilename)
1629 TRACE(
"%s %s %s %s\n", lpszSection, lpszEntry, lpszString, lpszFilename);
ACPI_SIZE strlen(const char *String)
char * strpbrk(const char *String, const char *Delimiters)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
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)
static const WCHAR empty[]
#define ERROR_CALL_NOT_IMPLEMENTED
#define GetProcAddress(x, y)
#define ERROR_NO_MORE_ITEMS
#define HeapFree(x, y, z)
#define WideCharToMultiByte
#define MultiByteToWideChar
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
static unsigned char buff[32768]
GLuint GLuint GLsizei GLenum type
GLuint GLuint GLsizei count
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 PEXPLICIT_ACCESSW *static HMODULE hmod
static const WCHAR filenameW[]
static const WCHAR invalid[]
struct @1679::@1680 driver
#define ODBC_INSTALL_COMPLETE
#define ODBC_ERROR_REQUEST_FAILED
#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_ERROR_GENERAL_ERR
#define ODBC_ERROR_INVALID_BUFF_LEN
#define ODBC_ERROR_OUT_OF_MEM
#define ODBC_ERROR_INVALID_KEYWORD_VALUE
static const WCHAR driverW[]
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)
#define SQL_SUCCESS_WITH_INFO
#define SQL_MAX_DSN_LENGTH
BOOL WINAPI SQLWriteFileDSN(LPCSTR lpszFileName, LPCSTR lpszAppName, LPCSTR lpszKeyName, LPCSTR lpszString)
BOOL WINAPI SQLSetConfigMode(UWORD wConfigMode)
BOOL WINAPI SQLConfigDataSourceW(HWND hwndParent, WORD fRequest, LPCWSTR lpszDriver, LPCWSTR lpszAttributes)
static const WCHAR odbctranslators[]
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 SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
static WCHAR * heap_strdupAtoW(const char *str)
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)
static const WCHAR odbc_error_invalid_dsn[]
BOOL WINAPI SQLRemoveDefaultDataSource(void)
static void clear_errors(void)
static const WCHAR odbc_error_request_failed[]
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 const WCHAR odbc_error_invalid_param_string[]
static void push_error(int code, LPCWSTR msg)
BOOL WINAPI SQLInstallDriverEx(LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
static const WCHAR odbc_error_component_not_found[]
static BOOL write_config_value(const WCHAR *driver, const WCHAR *args)
BOOL WINAPI SQLConfigDataSource(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttributes)
BOOL WINAPI SQLWriteDSNToIniW(LPCWSTR lpszDSN, LPCWSTR lpszDriver)
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 const WCHAR odbcW[]
static const WCHAR odbc_error_invalid_buff_len[]
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)
static HKEY get_privateprofile_sectionkey(LPCWSTR section, LPCWSTR filename)
static const WCHAR odbc_error_invalid_keyword[]
BOOL WINAPI SQLInstallDriverW(LPCWSTR lpszInfFile, LPCWSTR lpszDriver, LPWSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
static const WCHAR odbc_error_invalid_param_sequence[]
BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
BOOL WINAPI SQLWriteDSNToIni(LPCSTR lpszDSN, LPCSTR lpszDriver)
static const WCHAR odbcini[]
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)
static const WCHAR odbc_error_load_lib_failed[]
BOOL WINAPI SQLRemoveDriver(LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount)
SQLRETURN WINAPI SQLPostInstallerErrorW(DWORD fErrorCode, LPCWSTR szErrorMsg)
static const WCHAR drivers_key[]
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)
BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename)
SQLRETURN WINAPI SQLInstallerErrorW(WORD iError, DWORD *pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
static const WCHAR odbc_error_out_of_mem[]
BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR lpszDSN)
static const WCHAR odbcdrivers[]
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)
static const WCHAR odbc_error_general_err[]
#define success(from, fromstr, to, tostr)
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER