Mark Jansen : kernel32/tests: Parameter validation tests for FindActCtxSectionString.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 17 11:01:59 CDT 2015


Module: wine
Branch: master
Commit: f091ff5851d2d1e2a9088c59eabba7b17152c5d4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f091ff5851d2d1e2a9088c59eabba7b17152c5d4

Author: Mark Jansen <learn0more at gmail.com>
Date:   Sun Mar 15 23:39:09 2015 +0100

kernel32/tests: Parameter validation tests for FindActCtxSectionString.

---

 dlls/kernel32/tests/actctx.c | 150 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 148 insertions(+), 2 deletions(-)

diff --git a/dlls/kernel32/tests/actctx.c b/dlls/kernel32/tests/actctx.c
index 60763b1..887c6b0 100644
--- a/dlls/kernel32/tests/actctx.c
+++ b/dlls/kernel32/tests/actctx.c
@@ -16,6 +16,8 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
 #include "wine/test.h"
 #include <winbase.h>
 #include <windef.h>
@@ -39,6 +41,10 @@ static BOOL   (WINAPI *pQueryActCtxW)(DWORD,HANDLE,PVOID,ULONG,PVOID,SIZE_T,SIZE
 static VOID   (WINAPI *pReleaseActCtx)(HANDLE);
 static BOOL   (WINAPI *pFindActCtxSectionGuid)(DWORD,const GUID*,ULONG,const GUID*,PACTCTX_SECTION_KEYED_DATA);
 
+static NTSTATUS(NTAPI *pRtlFindActivationContextSectionString)(DWORD,const GUID *,ULONG,PUNICODE_STRING,PACTCTX_SECTION_KEYED_DATA);
+static BOOLEAN (NTAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, PCSZ);
+static VOID    (NTAPI *pRtlFreeUnicodeString)(PUNICODE_STRING);
+
 static const char* strw(LPCWSTR x)
 {
     static char buffer[1024];
@@ -2048,6 +2054,140 @@ static void test_app_manifest(void)
     }
 }
 
+static HANDLE create_manifest(const char *filename, const char *data, int line)
+{
+    HANDLE handle;
+    create_manifest_file(filename, data, -1, NULL, NULL);
+
+    handle = test_create(filename);
+    ok_(__FILE__, line)(handle != INVALID_HANDLE_VALUE,
+        "handle == INVALID_HANDLE_VALUE, error %u\n", GetLastError());
+
+    DeleteFileA(filename);
+    return handle;
+}
+
+static void kernel32_find(ULONG section, const char *string_to_find, BOOL should_find, BOOL todo, int line)
+{
+    UNICODE_STRING string_to_findW;
+    ACTCTX_SECTION_KEYED_DATA data;
+    BOOL ret;
+    DWORD err;
+
+    pRtlCreateUnicodeStringFromAsciiz(&string_to_findW, string_to_find);
+
+    memset(&data, 0xfe, sizeof(data));
+    data.cbSize = sizeof(data);
+
+    SetLastError(0);
+    ret = pFindActCtxSectionStringA(0, NULL, section, string_to_find, &data);
+    err = GetLastError();
+    ok_(__FILE__, line)(ret == should_find,
+        "FindActCtxSectionStringA: expected ret = %u, got %u\n", should_find, ret);
+    if (todo)
+        todo_wine
+        ok_(__FILE__, line)(err == (should_find ? ERROR_SUCCESS : ERROR_SXS_KEY_NOT_FOUND),
+            "FindActCtxSectionStringA: unexpected error %u\n", err);
+    else
+        ok_(__FILE__, line)(err == (should_find ? ERROR_SUCCESS : ERROR_SXS_KEY_NOT_FOUND),
+            "FindActCtxSectionStringA: unexpected error %u\n", err);
+
+    memset(&data, 0xfe, sizeof(data));
+    data.cbSize = sizeof(data);
+
+    SetLastError(0);
+    ret = pFindActCtxSectionStringW(0, NULL, section, string_to_findW.Buffer, &data);
+    err = GetLastError();
+    ok_(__FILE__, line)(ret == should_find,
+        "FindActCtxSectionStringW: expected ret = %u, got %u\n", should_find, ret);
+    if (todo)
+        todo_wine
+        ok_(__FILE__, line)(err == (should_find ? ERROR_SUCCESS : ERROR_SXS_KEY_NOT_FOUND),
+            "FindActCtxSectionStringW: unexpected error %u\n", err);
+    else
+        ok_(__FILE__, line)(err == (should_find ? ERROR_SUCCESS : ERROR_SXS_KEY_NOT_FOUND),
+            "FindActCtxSectionStringW: unexpected error %u\n", err);
+
+    SetLastError(0);
+    ret = pFindActCtxSectionStringA(0, NULL, section, string_to_find, NULL);
+    err = GetLastError();
+    ok_(__FILE__, line)(!ret,
+        "FindActCtxSectionStringA: expected failure, got %u\n", ret);
+    ok_(__FILE__, line)(err == ERROR_INVALID_PARAMETER,
+        "FindActCtxSectionStringA: unexpected error %u\n", err);
+
+    SetLastError(0);
+    ret = pFindActCtxSectionStringW(0, NULL, section, string_to_findW.Buffer, NULL);
+    err = GetLastError();
+    ok_(__FILE__, line)(!ret,
+        "FindActCtxSectionStringW: expected failure, got %u\n", ret);
+    ok_(__FILE__, line)(err == ERROR_INVALID_PARAMETER,
+        "FindActCtxSectionStringW: unexpected error %u\n", err);
+
+    pRtlFreeUnicodeString(&string_to_findW);
+}
+
+static void ntdll_find(ULONG section, const char *string_to_find, BOOL should_find, BOOL todo, int line)
+{
+    UNICODE_STRING string_to_findW;
+    ACTCTX_SECTION_KEYED_DATA data;
+    NTSTATUS ret;
+
+    pRtlCreateUnicodeStringFromAsciiz(&string_to_findW, string_to_find);
+
+    memset(&data, 0xfe, sizeof(data));
+    data.cbSize = sizeof(data);
+
+    ret = pRtlFindActivationContextSectionString(0, NULL, section, &string_to_findW, &data);
+    if (todo)
+        todo_wine
+        ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND),
+            "RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
+    else
+        ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND),
+            "RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
+
+    ret = pRtlFindActivationContextSectionString(0, NULL, section, &string_to_findW, NULL);
+    todo_wine
+    ok_(__FILE__, line)(ret == (should_find ? STATUS_SUCCESS : STATUS_SXS_KEY_NOT_FOUND),
+        "RtlFindActivationContextSectionString: unexpected status 0x%x\n", ret);
+
+    pRtlFreeUnicodeString(&string_to_findW);
+}
+
+static void test_findsectionstring(void)
+{
+    HANDLE handle;
+    BOOL ret;
+    ULONG_PTR cookie;
+
+    handle = create_manifest("test.manifest", testdep_manifest3, __LINE__);
+    ret = pActivateActCtx(handle, &cookie);
+    ok(ret, "ActivateActCtx failed: %u\n", GetLastError());
+
+    /* first we show the parameter validation from kernel32 */
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION, "testdep", FALSE, TRUE, __LINE__);
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, "testlib.dll", TRUE, FALSE, __LINE__);
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, "testlib2.dll", TRUE, FALSE, __LINE__);
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, "testlib3.dll", FALSE, FALSE, __LINE__);
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass", TRUE, FALSE, __LINE__);
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass2", TRUE, FALSE, __LINE__);
+    kernel32_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass3", FALSE, FALSE, __LINE__);
+
+    /* then we show that ntdll plays by different rules */
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION, "testdep", FALSE, TRUE, __LINE__);
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, "testlib.dll", TRUE, FALSE, __LINE__);
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, "testlib2.dll", TRUE, FALSE, __LINE__);
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, "testlib3.dll", FALSE, FALSE, __LINE__);
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass", TRUE, FALSE, __LINE__);
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass2", TRUE, FALSE, __LINE__);
+    ntdll_find(ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, "wndClass3", FALSE, FALSE, __LINE__);
+
+    ret = pDeactivateActCtx(0, cookie);
+    ok(ret, "DeactivateActCtx failed: %u\n", GetLastError());
+    pReleaseActCtx(handle);
+}
+
 static void run_child_process(void)
 {
     char cmdline[MAX_PATH];
@@ -2263,9 +2403,9 @@ todo_wine
 
 static BOOL init_funcs(void)
 {
-    HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
+    HMODULE hLibrary = GetModuleHandleA("kernel32.dll");
 
-#define X(f) if (!(p##f = (void*)GetProcAddress(hKernel32, #f))) return FALSE;
+#define X(f) if (!(p##f = (void*)GetProcAddress(hLibrary, #f))) return FALSE;
     X(ActivateActCtx);
     X(CreateActCtxA);
     X(CreateActCtxW);
@@ -2277,6 +2417,11 @@ static BOOL init_funcs(void)
     X(QueryActCtxW);
     X(ReleaseActCtx);
     X(FindActCtxSectionGuid);
+
+    hLibrary = GetModuleHandleA("ntdll.dll");
+    X(RtlFindActivationContextSectionString);
+    X(RtlCreateUnicodeStringFromAsciiz);
+    X(RtlFreeUnicodeString);
 #undef X
 
     return TRUE;
@@ -2303,5 +2448,6 @@ START_TEST(actctx)
 
     test_actctx();
     test_CreateActCtx();
+    test_findsectionstring();
     run_child_process();
 }




More information about the wine-cvs mailing list