[NTDLL] -Add preliminary tests for RtlDosApplyFileIsolationRedirection_Ustr.
authorGiannis Adamopoulos <gadamopoulos@reactos.org>
Thu, 12 Jan 2017 11:21:04 +0000 (11:21 +0000)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Thu, 12 Jan 2017 11:21:04 +0000 (11:21 +0000)
svn path=/trunk/; revision=73526

rostests/apitests/ntdll/CMakeLists.txt
rostests/apitests/ntdll/RtlDosApplyFileIsolationRedirection_Ustr.c [new file with mode: 0644]
rostests/apitests/ntdll/testlist.c

index aee65bc..cfa5025 100644 (file)
@@ -28,6 +28,7 @@ list(APPEND SOURCE
     RtlDeleteAce.c
     RtlDetermineDosPathNameType.c
     RtlDoesFileExists.c
+    RtlDosApplyFileIsolationRedirection_Ustr.c
     RtlDosPathNameToNtPathName_U.c
     RtlDosSearchPath_U.c
     RtlDosSearchPath_Ustr.c
diff --git a/rostests/apitests/ntdll/RtlDosApplyFileIsolationRedirection_Ustr.c b/rostests/apitests/ntdll/RtlDosApplyFileIsolationRedirection_Ustr.c
new file mode 100644 (file)
index 0000000..c200f02
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * PROJECT:         ReactOS api tests
+ * LICENSE:         GPLv2+ - See COPYING in the top level directory
+ * PURPOSE:         Test for RtlDosApplyFileIsolationRedirection_Ustr
+ * PROGRAMMER:      Giannis Adamopoulos
+ */
+
+#include <apitest.h>
+
+#define WIN32_NO_STATUS
+#include <ndk/rtlfuncs.h>
+
+#define ok_eq_hex(value, expected) ok((value) == (expected), #value " = 0x%lx, expected 0x%lx\n", value, expected)
+#define ok_eq_pointer(value, expected) ok((value) == (expected), #value " = %p, expected %p\n", value, expected)
+
+UNICODE_STRING DotDll = RTL_CONSTANT_STRING(L".DLL");
+
+void TestDefaultSxsRedirection(void)
+{
+    UNICODE_STRING GdiPlusSXS = RTL_CONSTANT_STRING(L"\\WinSxS\\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.");
+    UNICODE_STRING Comctl32SXS = RTL_CONSTANT_STRING(L"\\WinSxS\\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82");
+    UNICODE_STRING Comctl32 = RTL_CONSTANT_STRING(L"COMCTL32.DLL");
+    UNICODE_STRING GdiPlus = RTL_CONSTANT_STRING(L"GDIPLUS.DLL");
+    UNICODE_STRING CallerBuffer;
+    UNICODE_STRING DynamicString;
+    PUNICODE_STRING FullNameOut;
+    USHORT Position;
+
+    NTSTATUS Status;
+
+    /* NOTE: in xp and 2k3 gdiplus does not exist in system32 */
+    RtlInitUnicodeString(&CallerBuffer, NULL);
+    RtlInitUnicodeString(&DynamicString, NULL);
+    FullNameOut = NULL;
+    Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE,
+                                                      &GdiPlus,
+                                                      &DotDll,
+                                                      &CallerBuffer,
+                                                      &DynamicString,
+                                                      &FullNameOut,
+                                                      NULL,
+                                                      NULL,
+                                                      NULL);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+    ok_eq_pointer(CallerBuffer.Buffer, NULL);
+    ok_eq_pointer(FullNameOut, &DynamicString);
+    Status = RtlFindCharInUnicodeString(RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE,
+                                        &GdiPlusSXS,
+                                        &DynamicString,
+                                        &Position);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+       
+    
+    RtlInitUnicodeString(&CallerBuffer, NULL);
+    RtlInitUnicodeString(&DynamicString, NULL);
+    FullNameOut = NULL;
+    Status = RtlDosApplyFileIsolationRedirection_Ustr(TRUE,
+                                                      &Comctl32,
+                                                      &DotDll,
+                                                      &CallerBuffer,
+                                                      &DynamicString,
+                                                      &FullNameOut,
+                                                      NULL,
+                                                      NULL,
+                                                      NULL);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+    ok_eq_pointer(CallerBuffer.Buffer, NULL);
+    ok_eq_pointer(FullNameOut, &DynamicString);
+    Status = RtlFindCharInUnicodeString(RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE,
+                                        &Comctl32SXS,
+                                        &DynamicString,
+                                        &Position);
+    ok_eq_hex(Status, STATUS_SUCCESS);
+}
+
+void TestDotLocal(void)
+{
+}
+
+START_TEST(RtlDosApplyFileIsolationRedirection_Ustr)
+{
+    TestDotLocal();
+    TestDefaultSxsRedirection();
+}
\ No newline at end of file
index 3ddca77..290e9ed 100644 (file)
@@ -31,6 +31,7 @@ extern void func_RtlBitmap(void);
 extern void func_RtlCopyMappedMemory(void);
 extern void func_RtlDeleteAce(void);
 extern void func_RtlDetermineDosPathNameType(void);
+extern void func_RtlDosApplyFileIsolationRedirection_Ustr(void);
 extern void func_RtlDoesFileExists(void);
 extern void func_RtlDosPathNameToNtPathName_U(void);
 extern void func_RtlDosSearchPath_U(void);
@@ -81,6 +82,7 @@ const struct test winetest_testlist[] =
     { "RtlCopyMappedMemory",            func_RtlCopyMappedMemory },
     { "RtlDeleteAce",                   func_RtlDeleteAce },
     { "RtlDetermineDosPathNameType",    func_RtlDetermineDosPathNameType },
+    { "RtlDosApplyFileIsolationRedirection_Ustr", func_RtlDosApplyFileIsolationRedirection_Ustr },
     { "RtlDoesFileExists",              func_RtlDoesFileExists },
     { "RtlDosPathNameToNtPathName_U",   func_RtlDosPathNameToNtPathName_U },
     { "RtlDosSearchPath_U",             func_RtlDosSearchPath_U },