[1/4] kernel32/tests: Add tests for GetModuleHandleEx.
Hans Leidekker
hans at codeweavers.com
Thu Apr 5 04:15:28 CDT 2012
---
dlls/kernel32/tests/module.c | 185 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 184 insertions(+), 1 deletions(-)
diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c
index e86b63b..70940f5 100644
--- a/dlls/kernel32/tests/module.c
+++ b/dlls/kernel32/tests/module.c
@@ -23,8 +23,9 @@
static DWORD (WINAPI *pGetDllDirectoryA)(DWORD,LPSTR);
static DWORD (WINAPI *pGetDllDirectoryW)(DWORD,LPWSTR);
-
static BOOL (WINAPI *pSetDllDirectoryA)(LPCSTR);
+static BOOL (WINAPI *pGetModuleHandleExA)(DWORD,LPCSTR,HMODULE*);
+static BOOL (WINAPI *pGetModuleHandleExW)(DWORD,LPCWSTR,HMODULE*);
static BOOL is_unicode_enabled = TRUE;
@@ -495,9 +496,190 @@ static void init_pointers(void)
MAKEFUNC(GetDllDirectoryA);
MAKEFUNC(GetDllDirectoryW);
MAKEFUNC(SetDllDirectoryA);
+ MAKEFUNC(GetModuleHandleExA);
+ MAKEFUNC(GetModuleHandleExW);
#undef MAKEFUNC
}
+static void testGetModuleHandleEx(void)
+{
+ static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2',0};
+ static const WCHAR nosuchmodW[] = {'n','o','s','u','c','h','m','o','d',0};
+ BOOL ret;
+ DWORD error;
+ HMODULE mod, mod_kernel32;
+
+ if (!pGetModuleHandleExA || !pGetModuleHandleExW)
+ {
+ win_skip( "GetModuleHandleEx not available\n" );
+ return;
+ }
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExA( 0, NULL, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExA( 0, "kernel32", NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExA( 0, "kernel32", &mod );
+ ok( ret, "unexpected failure %u\n", GetLastError() );
+ ok( mod != (HMODULE)0xdeadbeef, "got %p\n", mod );
+ FreeLibrary( mod );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExA( 0, "nosuchmod", &mod );
+ error = GetLastError();
+ ok( !ret, "unexpected success\n" );
+ ok( error == ERROR_MOD_NOT_FOUND, "got %u\n", error );
+ todo_wine ok( mod == NULL, "got %p\n", mod );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExW( 0, NULL, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExW( 0, kernel32W, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExW( 0, kernel32W, &mod );
+ ok( ret, "unexpected failure %u\n", GetLastError() );
+ ok( mod != (HMODULE)0xdeadbeef, "got %p\n", mod );
+ FreeLibrary( mod );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExW( 0, nosuchmodW, &mod );
+ error = GetLastError();
+ ok( !ret, "unexpected success\n" );
+ ok( error == ERROR_MOD_NOT_FOUND, "got %u\n", error );
+ todo_wine ok( mod == NULL, "got %p\n", mod );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, "kernel32", NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, "kernel32", &mod );
+ ok( ret, "unexpected failure %u\n", GetLastError() );
+ ok( mod != (HMODULE)0xdeadbeef, "got %p\n", mod );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, "nosuchmod", &mod );
+ error = GetLastError();
+ ok( !ret, "unexpected success\n" );
+ ok( error == ERROR_MOD_NOT_FOUND, "got %u\n", error );
+ todo_wine ok( mod == NULL, "got %p\n", mod );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, NULL, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, kernel32W, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, kernel32W, &mod );
+ ok( ret, "unexpected failure %u\n", GetLastError() );
+ ok( mod != (HMODULE)0xdeadbeef, "got %p\n", mod );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, nosuchmodW, &mod );
+ error = GetLastError();
+ ok( !ret, "unexpected success\n" );
+ ok( error == ERROR_MOD_NOT_FOUND, "got %u\n", error );
+ todo_wine ok( mod == NULL, "got %p\n", mod );
+
+ mod_kernel32 = LoadLibraryA( "kernel32" );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, NULL, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCSTR)mod_kernel32, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCSTR)mod_kernel32, &mod );
+ ok( ret, "unexpected failure %u\n", GetLastError() );
+ ok( mod == mod_kernel32, "got %p\n", mod );
+ FreeLibrary( mod );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExA( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCSTR)0xbeefdead, &mod );
+ error = GetLastError();
+ ok( !ret, "unexpected success\n" );
+ ok( error == ERROR_MOD_NOT_FOUND, "got %u\n", error );
+ ok( mod == NULL, "got %p\n", mod );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, NULL, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)mod_kernel32, NULL );
+ error = GetLastError();
+ todo_wine ok( !ret, "unexpected success\n" );
+ todo_wine ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)mod_kernel32, &mod );
+ ok( ret, "unexpected failure %u\n", GetLastError() );
+ ok( mod == mod_kernel32, "got %p\n", mod );
+ FreeLibrary( mod );
+
+ SetLastError( 0xdeadbeef );
+ mod = (HMODULE)0xdeadbeef;
+ ret = pGetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)0xbeefdead, &mod );
+ error = GetLastError();
+ ok( !ret, "unexpected success\n" );
+ ok( error == ERROR_MOD_NOT_FOUND, "got %u\n", error );
+ ok( mod == NULL, "got %p\n", mod );
+
+ FreeLibrary( mod_kernel32 );
+}
+
START_TEST(module)
{
WCHAR filenameW[MAX_PATH];
@@ -525,4 +707,5 @@ START_TEST(module)
testLoadLibraryA_Wrong();
testGetProcAddress_Wrong();
testLoadLibraryEx();
+ testGetModuleHandleEx();
}
--
1.7.5.4
More information about the wine-patches
mailing list