35static int (
WINAPI *pSHAnsiToAnsi)(
const char *,
char *,
int);
48#define REG_TEST_KEY "Software\\Wine\\Test"
49#define REG_CURRENT_VERSION "Software\\Microsoft\\Windows\\CurrentVersion\\explorer"
51static const char test_path1[] =
"%LONGSYSTEMVAR%\\subdir1";
55static const char *
test_envvar2 =
"ImARatherLongButIndeedNeededString";
64#define X(f) p##f = (void*)GetProcAddress(hshcore, #f)
88 IUnknown_AddRef(iface);
139 obj = (
void *)0xdeadbeef;
140 hr = pGetProcessReference(&
obj);
142 ok(
obj ==
NULL,
"Unexpected pointer.\n");
149 pSetProcessReference(&
test_unk2.IUnknown_iface);
153 hr = pGetProcessReference(&
obj);
154 ok(
hr ==
S_OK,
"Failed to get reference, hr %#lx.\n",
hr);
161 hr = pSHGetInstanceExplorer(&
obj);
162 ok(
hr ==
S_OK,
"Failed to get reference, hr %#lx.\n",
hr);
173 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
177 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
178 ok(
buff[0] == 0 &&
buff[1] ==
'b',
"Unexpected buffer contents.\n");
182 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
183 ok(
buff[0] == 1,
"Unexpected buffer contents.\n");
187 ret = pSHUnicodeToAnsi(
L"",
buff, 1);
188 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
189 ok(*
buff == 0,
"Unexpected buffer contents.\n");
192 ret = pSHUnicodeToAnsi(
L"test",
buff, 0);
193 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
194 ok(
buff[0] == 1,
"Unexpected buffer contents.\n");
197 ret = pSHUnicodeToAnsi(
L"test",
buff, 1);
198 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
199 ok(*
buff == 0,
"Unexpected buffer contents.\n");
201 ret = pSHUnicodeToAnsi(
L"test",
buff, 16);
202 ok(
ret == 5,
"Unexpected return value %d.\n",
ret);
203 ok(!
strcmp(
buff,
"test"),
"Unexpected buffer contents.\n");
205 ret = pSHUnicodeToAnsi(
L"test",
buff, 2);
206 ok(
ret == 2,
"Unexpected return value %d.\n",
ret);
207 ok(!
strcmp(
buff,
"t"),
"Unexpected buffer contents.\n");
216 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
220 ret = pSHAnsiToUnicode(
NULL, buffW, 2);
221 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
222 ok(buffW[0] == 0 && buffW[1] == 2,
"Unexpected buffer contents.\n");
225 ret = pSHAnsiToUnicode(
NULL, buffW, 0);
226 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
227 ok(buffW[0] == 1,
"Unexpected buffer contents.\n");
230 ret = pSHAnsiToUnicode(
"", buffW, 1);
231 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
232 ok(*buffW == 0,
"Unexpected buffer contents.\n");
235 ret = pSHAnsiToUnicode(
"test", buffW, 0);
236 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
237 ok(buffW[0] == 1,
"Unexpected buffer contents.\n");
240 ret = pSHAnsiToUnicode(
"test", buffW, 1);
241 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
242 ok(*buffW == 0,
"Unexpected buffer contents.\n");
244 ret = pSHAnsiToUnicode(
"test", buffW, 16);
245 ok(
ret == 5,
"Unexpected return value %d.\n",
ret);
246 ok(!
lstrcmpW(buffW,
L"test"),
"Unexpected buffer contents.\n");
248 ret = pSHAnsiToUnicode(
"test", buffW, 2);
249 ok(
ret == 2,
"Unexpected return value %d.\n",
ret);
250 ok(buffW[0] ==
't' && buffW[1] == 0,
"Unexpected buffer contents.\n");
259 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
262 ret = pSHAnsiToAnsi(
"test",
buff, 3);
263 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
264 ok(!
strcmp(
buff,
"te"),
"Unexpected buffer contents.\n");
265 ok(
buff[3] ==
'd',
"Unexpected buffer contents.\n");
268 ret = pSHAnsiToAnsi(
"",
buff, 3);
269 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
270 ok(!*
buff,
"Unexpected buffer contents.\n");
271 ok(
buff[3] ==
'd',
"Unexpected buffer contents.\n");
274 ret = pSHAnsiToAnsi(
"test",
buff, 4);
275 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
276 ok(!
strcmp(
buff,
"tes"),
"Unexpected buffer contents.\n");
277 ok(
buff[4] ==
'e',
"Unexpected buffer contents.\n");
280 ret = pSHAnsiToAnsi(
"test",
buff, 5);
281 ok(
ret == 5,
"Unexpected return value %d.\n",
ret);
282 ok(!
strcmp(
buff,
"test"),
"Unexpected buffer contents.\n");
283 ok(
buff[5] ==
'f',
"Unexpected buffer contents.\n");
286 ret = pSHAnsiToAnsi(
"test",
buff, 6);
287 ok(
ret == 5,
"Unexpected return value %d.\n",
ret);
288 ok(!
strcmp(
buff,
"test"),
"Unexpected buffer contents.\n");
289 ok(
buff[5] ==
'f',
"Unexpected buffer contents.\n");
298 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
301 ret = pSHUnicodeToUnicode(
L"test",
buff, 3);
302 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
304 ok(
buff[3] ==
'd',
"Unexpected buffer contents.\n");
307 ret = pSHUnicodeToUnicode(
L"",
buff, 3);
308 ok(
ret == 1,
"Unexpected return value %d.\n",
ret);
309 ok(!*
buff,
"Unexpected buffer contents.\n");
310 ok(
buff[3] ==
'd',
"Unexpected buffer contents.\n");
313 ret = pSHUnicodeToUnicode(
L"test",
buff, 4);
314 ok(
ret == 0,
"Unexpected return value %d.\n",
ret);
316 ok(
buff[4] ==
'e',
"Unexpected buffer contents.\n");
319 ret = pSHUnicodeToUnicode(
L"test",
buff, 5);
320 ok(
ret == 5,
"Unexpected return value %d.\n",
ret);
322 ok(
buff[5] ==
'f',
"Unexpected buffer contents.\n");
325 ret = pSHUnicodeToUnicode(
L"test",
buff, 6);
326 ok(
ret == 5,
"Unexpected return value %d.\n",
ret);
328 ok(
buff[5] ==
'f',
"Unexpected buffer contents.\n");
337 ok(!
ret,
"Failed to create test key, ret %ld.\n",
ret);
339 hkey2 = pSHRegDuplicateHKey(hkey);
340 ok(hkey2 !=
NULL && hkey2 != hkey,
"Unexpected duplicate key.\n");
354 ok(!
ret,
"Failed to create test key, %ld.\n",
ret);
357 ok(!
ret,
"Failed to create test key, %ld.\n",
ret);
364 ok(!
ret,
"Unexpected retval %lu.\n",
ret);
367 ok(!
ret,
"Unexpected retval %lu.\n",
ret);
374 DWORD nExpectedLen1, nExpectedLen2;
380 ok(!
ret,
"Unexpected retval %lu.\n",
ret);
415 ret = pSHDeleteKeyA( parentKey, keyname );
434 ok(!
ret,
"Failed to get value, ret %lu.\n",
ret);
443 ok(!
ret,
"Failed to get value, ret %lu.\n",
ret);
464 ok(!
ret,
"Unexpected retval %lu.\n",
ret);
478 ok(!
ret,
"Unexpected retval %lu.\n",
ret);
491 DWORD buffer_len1,buffer_len2;
499 ok(!
ret,
"Failed to open a key, ret %lu.\n",
ret);
510 ok(!
ret,
"Failed to query value, ret %lu.\n",
ret);
517 ok(!
ret,
"Failed to query value, ret %lu.\n",
ret);
522 ok(!
ret,
"Failed to query value, ret %lu.\n",
ret);
523 ok(
size == buffer_len1,
"Buffer sizes %lu and %lu are not equal\n",
size, buffer_len1);
530 ok(!
ret,
"Failed to query value, ret %lu.\n",
ret);
531 ok(
size >= buffer_len2,
"Buffer size %lu should be >= %lu.\n",
size, buffer_len2);
542 ok(
size == buffer_len1,
"Buffer sizes %lu and %lu are not equal\n",
size, buffer_len1);
555 ok(
size >= buffer_len2,
"Buffer size %lu should be >= %lu.\n",
size, buffer_len2);
572 ok(
size >= buffer_len2,
"Buffer size %lu should be >= %lu.\n",
size, buffer_len2);
588 "Expected empty or first part of the string \"%s\", got \"%s\"\n",
test_envvar2,
buf);
590 ok(
size >= buffer_len2,
"Buffer size %lu should be >= %lu.\n",
size, buffer_len2);
600 ok(!
ret,
"Failed to query value, ret %lu.\n",
ret);
601 ok(
size >= buffer_len2,
"Buffer size %lu should be >= %lu.\n",
size, buffer_len2);
606 delete_key(testkey,
"Software\\Wine",
"Test");
619 ok(!
ret,
"Failed to get path, ret %lu.\n",
ret);
627 HKEY hKeySrc, hKeyDst;
636 pSHDeleteKeyA(hKeyDst,
NULL);
642 ok(!
ret,
"Failed to create a test key, ret %ld.\n",
ret);
646 ok(!
ret,
"Failed to open a test key, ret %ld.\n",
ret);
648 ret = pSHCopyKeyA(hKeySrc,
NULL, hKeyDst, 0);
649 ok(!
ret,
"Copy failed, ret %lu.\n",
ret);
657 ok(!
ret,
"Failed to open a test key, ret %ld.\n",
ret);
660 ok(!pSHQueryValueExA(hKeyDst,
"Common AppData",
NULL,
NULL,
NULL,
NULL),
"SHQueryValueExA failed\n");
666#define CHECK_FILE_SIZE(filename,exp_size) _check_file_size(filename, exp_size, __LINE__)
677#define CHECK_STREAM_SIZE(obj,exp_size) _check_stream_size(obj, exp_size, __LINE__)
686 ok_(__FILE__,
line)(
stream_size.QuadPart == exp_size,
"Size(): got wrong size of stream: %s.\n",
688 hr = IStream_Stat(
obj, &
stat, STATFLAG_NONAME);
690 ok_(__FILE__,
line)(
stat.cbSize.QuadPart == exp_size,
"Stat(): got wrong size of stream: %s.\n",
694#define CHECK_STREAM_POS(obj,exp_pos) _check_stream_pos(obj, exp_pos, __LINE__)
701 pos.QuadPart = 0xdeadbeef;
702 hr = IStream_Seek(
obj, move, STREAM_SEEK_CUR, &
pos);
704 ok_(__FILE__,
line)(
pos.QuadPart == exp_pos,
"got wrong position: %s.\n",
710 static const byte test_data[] = {0x1,0x2,0x3,0x4,0x5,0x6};
721 ok(written ==
sizeof(
test_data),
"Failed to write data into file.\n");
774 IStream_Release(stream2);
786 win_skip(
"Shcore.dll is not available.\n");
#define InterlockedIncrement
#define InterlockedDecrement
#define RegCloseKey(hKey)
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
LONG WINAPI RegOpenKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD ulOptions, _In_ REGSAM samDesired, _Out_ PHKEY phkResult)
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define ERROR_ACCESS_DENIED
DWORD WINAPI ExpandEnvironmentStringsA(IN LPCSTR lpSrc, IN LPSTR lpDst, IN DWORD nSize)
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableA(IN LPCSTR lpName, IN LPCSTR lpValue)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
void WINAPI SetProcessReference(IUnknown *obj)
DWORD WINAPI SHCopyKeyA(HKEY hkey_src, const char *subkey, HKEY hkey_dst, DWORD reserved)
DWORD WINAPI SHUnicodeToUnicode(const WCHAR *src, WCHAR *dest, int dest_len)
HRESULT WINAPI IStream_Size(IStream *stream, ULARGE_INTEGER *size)
DWORD WINAPI SHDeleteKeyA(HKEY hkey, const char *subkey)
DWORD WINAPI SHRegGetPathA(HKEY hkey, const char *subkey, const char *value, char *path, DWORD flags)
DWORD WINAPI SHQueryValueExA(HKEY hkey, const char *name, DWORD *reserved, DWORD *type, void *buff, DWORD *buff_len)
HRESULT WINAPI SHCreateStreamOnFileA(const char *path, DWORD mode, IStream **stream)
DWORD WINAPI SHAnsiToUnicode(const char *src, WCHAR *dest, int dest_len)
DWORD WINAPI SHUnicodeToAnsi(const WCHAR *src, char *dest, int dest_len)
HRESULT WINAPI GetProcessReference(IUnknown **obj)
HKEY WINAPI SHRegDuplicateHKey(HKEY hKey)
DWORD WINAPI SHAnsiToAnsi(const char *src, char *dest, int dest_len)
DWORD WINAPI SHGetValueA(HKEY hkey, const char *subkey, const char *value, DWORD *type, void *data, DWORD *data_len)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
static NTSTATUS *static PWSTR CURDIR *static HMODULE hmod
static IUnknown test_unk2
#define IsEqualIID(riid1, riid2)
#define SRRF_RT_REG_EXPAND_SZ
#define SRRF_RT_REG_DWORD
#define SRRF_RT_REG_QWORD
#define delete_key(r, p, s)
static unsigned int file_size
int const char int stream_size
static void test_SHRegGetPath(void)
static void test_SHQueryValueEx(void)
static const char *static const char const char DWORD void DWORD *static const char const char SRRF
static void test_SHRegDuplicateHKey(void)
static void test_unk_init(struct test_unk *testunk)
#define CHECK_STREAM_SIZE(obj, exp_size)
static struct test_unk * impl_from_IUnknown(IUnknown *iface)
static void test_SHUnicodeToUnicode(void)
static void test_SHDeleteKey(void)
#define CHECK_STREAM_POS(obj, exp_pos)
static const char *static const char const char DWORD void DWORD *static LSTATUS(WINAPI *pSHRegGetValueA)(HKEY
static char test_exp_path2[MAX_PATH]
static void test_SHUnicodeToAnsi(void)
static void test_stream_size(void)
static void test_SHGetValue(void)
static void _check_stream_pos(IStream *obj, LONG exp_pos, int line)
static void test_SHCopyKey(void)
static void _check_file_size(const CHAR *filename, LONG exp_size, int line)
static void test_process_reference(void)
static DWORD IStream ** stream
static HKEY create_test_entries(void)
static const char * test_envvar1
static void test_SHAnsiToUnicode(void)
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 char test_exp_path1[MAX_PATH]
static ULONG WINAPI unk_Release(IUnknown *iface)
static void test_SHAnsiToAnsi(void)
static void _check_stream_size(IStream *obj, LONG exp_size, int line)
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 REG_CURRENT_VERSION
static const char const char char DWORD
static const char * initial_buffer
static ULONG WINAPI unk_AddRef(IUnknown *iface)
static const char test_path1[]
static const char * test_envvar2
static HRESULT WINAPI unk_QI(IUnknown *iface, REFIID riid, void **obj)
static ULARGE_INTEGER * size
static const char test_path2[]
#define CHECK_FILE_SIZE(filename, exp_size)
static const IUnknownVtbl testunkvtbl
static void test_SHRegGetValue(void)
#define CONTAINING_RECORD(address, type, field)
DWORD WINAPI GetLastError(void)
WINSHLWAPI LSTATUS WINAPI SHRegGetValueA(HKEY, LPCSTR, LPCSTR, SRRF, LPDWORD, LPVOID, LPDWORD)
#define ERROR_UNSUPPORTED_TYPE
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER