#include <wine/test.h>
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "odbcinst.h"
Go to the source code of this file.
◆ check_error
◆ check_dsn_exists()
Definition at line 879 of file misc.c.
880{
884
887
891
893}
#define RegCloseKey(hKey)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Referenced by test_SQLWriteDSNToIni().
◆ check_error_()
Definition at line 30 of file misc.c.
31{
37}
#define SQL_SUCCESS_WITH_INFO
SQLRETURN WINAPI SQLInstallerError(WORD iError, DWORD *pfErrorCode, LPSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
◆ START_TEST()
Definition at line 1037 of file misc.c.
1038{
1052}
static void test_SQLGetPrivateProfileStringW(void)
static void test_SQLValidDSN(void)
static void test_SQLInstallTranslatorEx(void)
static void test_SQLValidDSNW(void)
static void test_SQLGetPrivateProfileString(void)
static void test_SQLInstallDriverEx(void)
static void test_SQLWritePrivateProfileString(void)
static void test_SQLGetInstalledDrivers(void)
static void test_SQLConfigDataSource(void)
static void test_SQLWriteDSNToIni(void)
static void test_SQLConfigMode(void)
static void test_SQLInstallDriverManager(void)
static void test_SQLInstallerError(void)
◆ test_SQLConfigDataSource()
| static void test_SQLConfigDataSource |
( |
void |
| ) |
|
|
static |
Definition at line 854 of file misc.c.
855{
857
860
863
866 {
872 }
873
877}
#define ODBC_ERROR_INVALID_DSN
#define ODBC_ERROR_COMPONENT_NOT_FOUND
BOOL WINAPI SQLConfigDataSource(HWND hwnd, WORD request, LPCSTR driver, LPCSTR attributes)
Referenced by START_TEST().
◆ test_SQLConfigMode()
Definition at line 40 of file misc.c.
41{
47
49
52
53
57
59 {
62 ok(bool_ret &&
config_mode ==
i,
"Failed to confirm SQLSetConfigMode.\n");
63 }
64
65}
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
#define ODBC_ERROR_INVALID_PARAM_SEQUENCE
BOOL WINAPI SQLSetConfigMode(UWORD wConfigMode)
BOOL WINAPI SQLGetConfigMode(UWORD *pwConfigMode)
SQLRETURN WINAPI SQLInstallerErrorW(WORD iError, DWORD *pfErrorCode, LPWSTR lpszErrorMsg, WORD cbErrorMsgMax, WORD *pcbErrorMsg)
Referenced by START_TEST().
◆ test_SQLGetInstalledDrivers()
| static void test_SQLGetInstalledDrivers |
( |
void |
| ) |
|
|
static |
Definition at line 720 of file misc.c.
721{
726 int found = 0;
727
730 ok(
ret,
"SQLInstallDriverEx failed: %d\n",
ret);
733 {
734 skip(
"not enough privileges\n");
735 return;
736 }
737
741
745
749 ok(!
buffer[9],
"buffer not doubly null-terminated\n");
750
754 ok(written == 10,
"got written %d\n", written);
755 ok(!
buffer[9],
"buffer not doubly null-terminated\n");
756
759 ok(!
buffer[written-1] && !
buffer[written-2],
"buffer not doubly null-terminated\n");
761
763 {
765 found = 1;
766 }
767 ok(found,
"installed driver not found\n");
768
772 ok(written ==
len,
"expected written %d, got %d\n",
len, written);
773 ok(!
buffer[
len-1],
"buffer not doubly null-terminated\n");
774
778 ok(written ==
len+1,
"expected written %d, got %d\n",
len+1, written);
779 ok(!
buffer[
len],
"buffer not doubly null-terminated\n");
780
784 ok(written ==
len+2,
"expected written %d, got %d\n",
len+2, written);
785 ok(!
buffer[
len+1],
"buffer not doubly null-terminated\n");
786
788}
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
int WINAPI lstrlenA(LPCSTR lpString)
#define ODBC_INSTALL_COMPLETE
#define ODBC_ERROR_WRITING_SYSINFO_FAILED
#define ODBC_ERROR_INVALID_BUFF_LEN
BOOL WINAPI SQLGetInstalledDrivers(char *buf, WORD size, WORD *sizeout)
BOOL WINAPI SQLInstallDriverEx(LPCSTR lpszDriver, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLRemoveDriver(LPCSTR lpszDriver, BOOL fRemoveDSN, LPDWORD lpdwUsageCount)
Referenced by START_TEST().
◆ test_SQLGetPrivateProfileString()
| static void test_SQLGetPrivateProfileString |
( |
void |
| ) |
|
|
static |
Definition at line 210 of file misc.c.
211{
215
218 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
220
223 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
225
228 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
230
232 ok(
ret ==
strlen(
"defaultX"),
"SQLGetPrivateProfileString returned %d\n",
ret);
234
236 ok(
ret ==
strlen(
"def"),
"SQLGetPrivateProfileString returned %d\n",
ret);
238
240 ok(
ret ==
strlen(
"default"),
"SQLGetPrivateProfileString returned %d\n",
ret);
242
244 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
245
248 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
250
252 ok(
ret,
"SQLWritePrivateProfileString failed\n");
254 {
256
258 ok(
ret ==
strlen(
"value0123456789"),
"SQLGetPrivateProfileString returned %d\n",
ret);
260
262 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
263
265 ok(
ret == 6,
"SQLGetPrivateProfileString returned %d\n",
ret);
266
269 ok(
ret == (
strlen(
"testing")+1),
"SQLGetPrivateProfileString returned %d\n",
ret);
271
273 ok(
ret,
"SQLWritePrivateProfileString failed\n");
274
277 ok(
ret == (
strlen(
"testing") +
strlen(
"value")+2),
"SQLGetPrivateProfileString returned %d\n",
ret);
279 {
281 }
282
285 ok(
ret == (
strlen(
"testing")+1),
"SQLGetPrivateProfileString returned %d\n",
ret);
287 {
289
291 }
292
295 ok(
ret == 0,
"SQLGetPrivateProfileString returned %d\n",
ret);
296
300 {
303
305 }
306
307
310 }
311}
LONG WINAPI RegDeleteKeyW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static const WCHAR abcdini_key[]
static const WCHAR abcd_key[]
int WINAPI SQLGetPrivateProfileString(LPCSTR section, LPCSTR entry, LPCSTR defvalue, LPSTR buff, int buff_len, LPCSTR filename)
BOOL WINAPI SQLWritePrivateProfileString(LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszString, LPCSTR lpszFilename)
#define HKEY_CURRENT_USER
Referenced by START_TEST().
◆ test_SQLGetPrivateProfileStringW()
| static void test_SQLGetPrivateProfileStringW |
( |
void |
| ) |
|
|
static |
Definition at line 313 of file misc.c.
314{
319
322 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
324
327 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
329
332 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
334
336 ok(
ret ==
lstrlenW(
L"default"),
"SQLGetPrivateProfileStringW returned %d\n",
ret);
338
342
344 ok(
ret ==
lstrlenW(
L"default"),
"SQLGetPrivateProfileStringW returned %d\n",
ret);
346
348 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
349
352 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
354
356 ok(
ret,
"SQLWritePrivateProfileString failed\n");
358 {
360
362 ok(
ret ==
lstrlenW(
L"value0123456789"),
"SQLGetPrivateProfileStringW returned %d\n",
ret);
364
366 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
367
369 ok(
ret == 6,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
370
373 ok(
ret ==
lstrlenW(
L"testing") + 1,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
375
377 ok(
ret,
"SQLWritePrivateProfileString failed\n");
378
383 {
386 }
387
390 ok(
ret ==
lstrlenW(
L"testing") + 1,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
392 {
394 }
395
398 ok(
ret == 0,
"SQLGetPrivateProfileStringW returned %d\n",
ret);
399
403 {
406
408 }
409
410
413 }
414
416 ok(
ret,
"SQLGetConfigMode failed\n");
417
419 ok(
ret,
"SQLSetConfigMode failed\n");
420
423 {
427 {
428 win_skip(
"not enough privileges\n");
430 return;
431 }
432 }
433 ok(
ret,
"SQLWritePrivateProfileString failed\n");
434
436 ok(
ret,
"SQLWritePrivateProfileString failed\n");
437
439 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
440
442 ok(
ret,
"SQLSetConfigMode failed\n");
443
445 ok(!
ret,
"SQLGetPrivateProfileStringW succeeded\n");
446
448 ok(
ret,
"SQLWritePrivateProfileString failed\n");
449
451 ok(
ret,
"SQLSetConfigMode failed\n");
452
454 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
455
458
459
461 ok(
ret,
"SQLWritePrivateProfileString failed\n");
462
464 ok(
ret,
"SQLSetConfigMode failed\n");
465
467 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
469
472
475
477 ok(
ret,
"SQLSetConfigMode failed\n");
478
479
481 ok(
ret,
"SQLWritePrivateProfileString failed\n");
482
484 ok(
ret,
"SQLSetConfigMode failed\n");
485
487 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
489
492
494 ok(
ret,
"SQLSetConfigMode failed\n");
495
497 ok(
ret,
"SQLWritePrivateProfileString failed\n");
498
500 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
501
503 ok(
ret,
"SQLWritePrivateProfileString failed\n");
504
506 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
507
510
512 ok(
ret,
"SQLSetConfigMode failed\n");
513
515 ok(!
ret,
"SQLGetPrivateProfileStringW succeeded\n");
516
518 ok(
ret,
"SQLSetConfigMode failed\n");
519
521 ok(
ret,
"SQLGetPrivateProfileStringW failed\n");
522
525
527 ok(
ret,
"SQLSetConfigMode failed\n");
528}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
int WINAPI SQLGetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR defvalue, LPWSTR buff, int buff_len, LPCWSTR filename)
BOOL WINAPI SQLWritePrivateProfileStringW(LPCWSTR lpszSection, LPCWSTR lpszEntry, LPCWSTR lpszString, LPCWSTR lpszFilename)
#define HKEY_LOCAL_MACHINE
Referenced by START_TEST().
◆ test_SQLInstallDriverEx()
| static void test_SQLInstallDriverEx |
( |
void |
| ) |
|
|
static |
Definition at line 530 of file misc.c.
531{
540
542
544 ok(!
ret,
"SQLConfigDriver returned %d\n",
ret);
547
550 ok(
ret,
"SQLInstallDriverEx failed\n");
553 {
554 win_skip(
"not enough privileges\n");
555 return;
556 }
559
560 sql_ret = 0;
562 ok(!
ret,
"SQLConfigDriver failed '%s'\n",
error);
563
565 ok(
ret,
"SQLConfigDriver failed\n");
568
570 ok(
ret,
"SQLInstallDriverEx failed\n");
574
576 ok(!
ret,
"SQLConfigDriver successful\n");
579
581 ok(
ret,
"SQLConfigDriver failed\n");
584
586 {
588
592 {
594
595 strcpy(driverpath, syspath);
596 strcat(driverpath,
"\\sample.dll");
597
604
610
613
615 }
616
620 {
627
631 }
632 }
633
636 ok(
ret,
"SQLRemoveDriver failed\n");
637 ok(
cnt == 0,
"SQLRemoveDriver failed %ld\n",
cnt);
638
641 ok(
ret,
"SQLRemoveDriver failed\n");
642 ok(
cnt == 0,
"SQLRemoveDriver failed %ld\n",
cnt);
643}
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegQueryValueExA(_In_ HKEY hkeyorg, _In_ LPCSTR name, _In_ LPDWORD reserved, _Out_opt_ LPDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ LPDWORD count)
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
GLuint GLuint GLsizei GLenum type
#define ERROR_FILE_NOT_FOUND
#define ODBC_CONFIG_DRIVER
#define ODBC_ERROR_INVALID_KEYWORD_VALUE
BOOL WINAPI SQLConfigDriver(HWND hwnd, WORD request, LPCSTR driver, LPCSTR args, LPSTR msg, WORD msgmax, WORD *msgout)
Referenced by START_TEST().
◆ test_SQLInstallDriverManager()
| static void test_SQLInstallDriverManager |
( |
void |
| ) |
|
|
static |
Definition at line 91 of file misc.c.
92{
98
99
102 ok(!bool_ret,
"SQLInstallDriverManager unexpectedly succeeded\n");
104 "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n");
105
106
109 ok(!bool_ret,
"SQLInstallDriverManager unexpectedly succeeded\n");
111 "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n");
112
113 path_out = 0xcafe;
116 ok(!bool_ret,
"SQLInstallDriverManager unexpectedly succeeded\n");
118 "Expected SQLInstallDriverManager to fail with ODBC_ERROR_INVALID_BUFF_LEN\n");
119 ok(path_out == 0xcafe,
"Expected path_out to not have changed\n");
120
121
125 {
126 win_skip(
"not enough privileges\n");
127 return;
128 }
129 ok(bool_ret,
"SQLInstallDriverManager unexpectedly failed: %ld\n",
131 if (bool_ret)
132 ok(sql_ret ==
SQL_NO_DATA,
"Expected SQL_NO_DATA, got %d\n", sql_ret);
133 else
135 "Expected SQL_SUCCESS_WITH_INFO, got %d\n", sql_ret);
136
137 path_out = 0xcafe;
140 ok(bool_ret,
"SQLInstallDriverManager unexpectedly failed: %ld\n",
142 if (bool_ret)
143 ok(sql_ret ==
SQL_NO_DATA,
"Expected SQL_NO_DATA, got %d\n", sql_ret);
144 else
146 "Expected SQL_SUCCESS_WITH_INFO, got %d\n", sql_ret);
147
148 ok(path_out != 0xcafe,
"Expected path_out to show the correct amount of bytes\n");
149}
BOOL WINAPI SQLInstallDriverManager(LPSTR lpszPath, WORD cbPathMax, WORD *pcbPathOut)
Referenced by START_TEST().
◆ test_SQLInstallerError()
| static void test_SQLInstallerError |
( |
void |
| ) |
|
|
static |
Definition at line 67 of file misc.c.
68{
70
71
73 ok(sql_ret ==
SQL_ERROR,
"SQLInstallerError(0...) failed with %d instead of SQL_ERROR\n", sql_ret);
74
75
76
77
79 ok(sql_ret ==
SQL_NO_DATA,
"SQLInstallerError(>8...) failed with %d instead of SQL_NO_DATA\n", sql_ret);
80
81
84 ok(sql_ret ==
SQL_NO_DATA,
"Too many errors when forcing an error for testing\n");
85
86
88 ok(sql_ret ==
SQL_SUCCESS_WITH_INFO,
"SQLInstallerError(null addresses) failed with %d instead of SQL_SUCCESS_WITH_INFO\n", sql_ret);
89}
Referenced by START_TEST().
◆ test_SQLInstallTranslatorEx()
| static void test_SQLInstallTranslatorEx |
( |
void |
| ) |
|
|
static |
Definition at line 645 of file misc.c.
646{
654
656
661 {
662 win_skip(
"not enough privileges\n");
663 return;
664 }
668
675
677 {
682 {
685
686 strcpy(driverpath, syspath);
687 strcat(driverpath,
"\\sample.dll");
688
695
697 }
698 }
699
702 ok(
ret,
"SQLRemoveTranslator failed\n");
703 ok(
cnt == 0,
"SQLRemoveTranslator failed %ld\n",
cnt);
704
707 ok(
ret,
"SQLRemoveTranslator failed\n");
708 ok(
cnt == 0,
"SQLRemoveTranslator failed %ld\n",
cnt);
709
712 ok(!
ret,
"SQLRemoveTranslator succeeded\n");
713 ok(
cnt == 100,
"SQLRemoveTranslator succeeded %ld\n",
cnt);
716 "SQLInstallTranslatorEx failed %d, %lu\n", sql_ret,
error_code);
717
718}
BOOL WINAPI SQLRemoveTranslator(LPCSTR lpszTranslator, LPDWORD lpdwUsageCount)
BOOL WINAPI SQLInstallTranslatorEx(LPCSTR lpszTranslator, LPCSTR lpszPathIn, LPSTR lpszPathOut, WORD cbPathOutMax, WORD *pcbPathOut, WORD fRequest, LPDWORD lpdwUsageCount)
Referenced by START_TEST().
◆ test_SQLValidDSN()
Definition at line 790 of file misc.c.
791{
792 static const char *
invalid =
"[]{}(),;?*=!@\\";
796
799
802 {
806 }
807
808
811
812
815
816
819
822}
BOOL WINAPI SQLValidDSN(LPCSTR lpszDSN)
Referenced by START_TEST().
◆ test_SQLValidDSNW()
Definition at line 824 of file misc.c.
825{
829
832
835 {
836 str[4] =
L"[]{}(),;?*=!@\\"[
i];
839 }
840
843
846
849
852}
BOOL WINAPI SQLValidDSNW(LPCWSTR lpszDSN)
Referenced by START_TEST().
◆ test_SQLWriteDSNToIni()
| static void test_SQLWriteDSNToIni |
( |
void |
| ) |
|
|
static |
Definition at line 895 of file misc.c.
896{
901
903
906
909
911 ok(!
ret,
"Found registry key\n");
912
915 {
916 win_skip(
"Doesn't have permission to write a System DSN\n");
917 return;
918 }
919
921 ok(
ret,
"Failed to find registry key\n");
922
926
928 ok(
ret,
"Failed to find registry key\n");
929
931
933 {
936
941 {
944
950
952 }
953
955
956
959
961 ok(!
ret,
"Found registry key\n");
962
964 ok(
ret,
"Failed to find registry key\n");
965
970 {
973
978
980
982 }
983
985
988 }
989
990
994 {
997
1002 {
1005
1011
1013 }
1014
1019 {
1022
1028
1030 }
1031
1034 }
1035}
static BOOL check_dsn_exists(HKEY key, const WCHAR *dsn)
BOOL WINAPI SQLRemoveDSNFromIni(LPCSTR lpszDSN)
BOOL WINAPI SQLWriteDSNToIni(LPCSTR lpszDSN, LPCSTR lpszDriver)
BOOL WINAPI SQLRemoveDSNFromIniW(LPCWSTR lpszDSN)
Referenced by START_TEST().
◆ test_SQLWritePrivateProfileString()
| static void test_SQLWritePrivateProfileString |
( |
void |
| ) |
|
|
static |
Definition at line 151 of file misc.c.
152{
153 static const WCHAR odbc_key[] =
L"Software\\ODBC\\ODBC.INI\\wineodbc";
157
159 ok(!
ret,
"SQLWritePrivateProfileString passed\n");
162
164 ok(!
ret,
"SQLWritePrivateProfileString passed\n");
167
169 ok(
ret,
"SQLWritePrivateProfileString failed\n");
171 {
173
175 ok(
ret,
"SQLWritePrivateProfileString failed\n");
176
180 {
183
185 }
186 }
187
189 ok(
ret,
"SQLWritePrivateProfileString failed\n");
191 {
193
197 {
200
202 }
203
204
207 }
208}
#define ODBC_ERROR_INVALID_STR
Referenced by START_TEST().
◆ abcd_key
| const WCHAR abcd_key[] = L"Software\\ODBC\\abcd.INI\\wineodbc" |
|
static |
◆ abcdini_key
| const WCHAR abcdini_key[] = L"Software\\ODBC\\abcd.INI" |
|
static |