diff --git a/rostests/apitests/ntdll/CMakeLists.txt b/rostests/apitests/ntdll/CMakeLists.txt index aee65bc4053..cfa5025dbaf 100644 --- a/rostests/apitests/ntdll/CMakeLists.txt +++ b/rostests/apitests/ntdll/CMakeLists.txt @@ -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 index 00000000000..c200f02a90c --- /dev/null +++ b/rostests/apitests/ntdll/RtlDosApplyFileIsolationRedirection_Ustr.c @@ -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 + +#define WIN32_NO_STATUS +#include + +#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 diff --git a/rostests/apitests/ntdll/testlist.c b/rostests/apitests/ntdll/testlist.c index 3ddca775df1..290e9ed9f77 100644 --- a/rostests/apitests/ntdll/testlist.c +++ b/rostests/apitests/ntdll/testlist.c @@ -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 },