/* * PROJECT: ReactOS kernel-mode tests * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory * PURPOSE: Kernel-Mode Test Suite FsRtl Test * PROGRAMMER: Pierre Schweitzer */ /* TODO: most of these calls fail the Windows checked build's !islower assertion and others */ #include #define NDEBUG #include static VOID FsRtlIsNameInExpressionTest() { UNICODE_STRING Expression, Name; /* !Name->Length || !Expression->Length asserts */ if (!KmtIsCheckedBuild) { RtlInitUnicodeString(&Expression, L"*"); RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); } RtlInitUnicodeString(&Expression, L"**"); if (!KmtIsCheckedBuild) { RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitUnicodeString(&Name, L"a"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"ntdll.dll"); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"~1"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L".."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"ntdll.dll"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"smss.exe"); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"~1"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L".."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"ntdll.dll"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"NTDLL.dll"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"nt??krnl.???"); RtlInitUnicodeString(&Name, L"ntoskrnl.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"he*o"); RtlInitUnicodeString(&Name, L"hello"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"helo"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"hella"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"he*"); RtlInitUnicodeString(&Name, L"hello"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"helo"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"hella"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"*.cpl"); RtlInitUnicodeString(&Name, L"kdcom.dll"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"bootvid.dll"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"ntoskrnl.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"."); RtlInitUnicodeString(&Name, L"NTDLL.DLL"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"F0_*.*"); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L".."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"SETUP.EXE"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_."); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_001."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"f0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"F0_*."); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L".."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"SETUP.EXE"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_."); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"F0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_001"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_OO1."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"f0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"f0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"F0_001.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, TRUE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"*.TTF"); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L".."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"SETUP.INI"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"*"); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L".."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"SETUP.INI"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L".*"); RtlInitUnicodeString(&Name, L"1"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"01"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L" "); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"1.txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L" .txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L".txt"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"\"ntoskrnl.exe"); RtlInitUnicodeString(&Name, L"ntoskrnl.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"ntoskrnl\"exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"ntoskrn\".exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"ntoskrn\"\"exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"ntoskrnl.\"exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"ntoskrnl.exe\""); RtlInitUnicodeString(&Name, L"ntoskrnl.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"ntoskrnl.exe."); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"*.c.d"); RtlInitUnicodeString(&Name, L"a.b.c.d"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"*.?.c.d"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"*?"); if (!KmtIsCheckedBuild) { RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitUnicodeString(&Name, L"a"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"aa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"aaa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"?*?"); if (!KmtIsCheckedBuild) { RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitUnicodeString(&Name, L"a"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"aa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"aaa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"aaaa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); /* Tests from #5923 */ RtlInitUnicodeString(&Expression, L"C:\\ReactOS\\**"); RtlInitUnicodeString(&Name, L"C:\\ReactOS\\dings.bmp"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"C:\\ReactOS\\***"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"C:\\Windows\\*a*"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"C:\\ReactOS\\*.bmp"); RtlInitUnicodeString(&Name, L"C:\\Windows\\explorer.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"*.bmp;*.dib"); RtlInitUnicodeString(&Name, L"winhlp32.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); /* Backtracking tests */ RtlInitUnicodeString(&Expression, L"*.*.*.*"); RtlInitUnicodeString(&Name, L"127.0.0.1"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"*?*?*?*"); RtlInitUnicodeString(&Name, L"1.0.0.1"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"?*?*?*?"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"?.?.?.?"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Expression, L"*a*ab*abc"); RtlInitUnicodeString(&Name, L"aabaabcdadabdabc"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); /* Tests for extra wildcards */ RtlInitUnicodeString(&Expression, L"abc.exe"); RtlInitUnicodeString(&Name, L"abc.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE\n"); RtlInitUnicodeString(&Name, L"ac.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Expression, L"a>>>exe"); RtlInitUnicodeString(&Name, L"abc.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); RtlInitUnicodeString(&Name, L"ac.exe"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE\n"); } static VOID FsRtlIsDbcsInExpressionTest() { ANSI_STRING Expression, Name; if (!KmtIsCheckedBuild) { RtlInitAnsiString(&Expression, "*"); RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); } RtlInitAnsiString(&Expression, "**"); if (!KmtIsCheckedBuild) { RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitAnsiString(&Name, "a"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "ntdll.dll"); RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "~1"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, ".."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "ntdll.dll"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "smss.exe"); RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "~1"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, ".."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "ntdll.dll"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "NTDLL.dll"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "nt??krnl.???"); RtlInitAnsiString(&Name, "ntoskrnl.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "he*o"); RtlInitAnsiString(&Name, "hello"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "helo"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "hella"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "he*"); RtlInitAnsiString(&Name, "hello"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "helo"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "hella"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "*.cpl"); RtlInitAnsiString(&Name, "kdcom.dll"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "bootvid.dll"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "ntoskrnl.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "."); RtlInitAnsiString(&Name, "NTDLL.DLL"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "F0_*.*"); RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, ".."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "SETUP.EXE"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "f0_"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "f0_."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "F0_001"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "f0_001"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_001."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "f0_001.txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_001.txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "F0_*."); RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, ".."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "SETUP.EXE"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "f0_"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "f0_."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "F0_001"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "f0_001"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_OO1."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "f0_001.txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "F0_001.txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "*.TTF"); RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, ".."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "SETUP.INI"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "*"); RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, ".."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "SETUP.INI"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, ".*"); RtlInitAnsiString(&Name, "1"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "01"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, " "); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); if (!KmtIsCheckedBuild) { RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitAnsiString(&Name, "."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "1.txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, " .txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, ".txt"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "\"ntoskrnl.exe"); RtlInitAnsiString(&Name, "ntoskrnl.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "ntoskrnl\"exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "ntoskrn\".exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "ntoskrn\"\"exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "ntoskrnl.\"exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "ntoskrnl.exe\""); RtlInitAnsiString(&Name, "ntoskrnl.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "ntoskrnl.exe."); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "*.c.d"); RtlInitAnsiString(&Name, "a.b.c.d"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "*.?.c.d"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "*?"); if (!KmtIsCheckedBuild) { RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitAnsiString(&Name, "a"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "aa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "aaa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "?*?"); if (!KmtIsCheckedBuild) { RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); } RtlInitAnsiString(&Name, "a"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "aa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "aaa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "aaaa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); /* Tests from #5923 */ RtlInitAnsiString(&Expression, "C:\\ReactOS\\**"); RtlInitAnsiString(&Name, "C:\\ReactOS\\dings.bmp"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "C:\\ReactOS\\***"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "C:\\Windows\\*a*"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "C:\\ReactOS\\*.bmp"); RtlInitAnsiString(&Name, "C:\\Windows\\explorer.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "*.bmp;*.dib"); RtlInitAnsiString(&Name, "winhlp32.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); /* Backtracking tests */ RtlInitAnsiString(&Expression, "*.*.*.*"); RtlInitAnsiString(&Name, "127.0.0.1"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "*?*?*?*"); RtlInitAnsiString(&Name, "1.0.0.1"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "?*?*?*?"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "?.?.?.?"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Expression, "*a*ab*abc"); RtlInitAnsiString(&Name, "aabaabcdadabdabc"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); /* Tests for extra wildcards */ RtlInitAnsiString(&Expression, "abc.exe"); RtlInitAnsiString(&Name, "abc.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE\n"); RtlInitAnsiString(&Name, "ac.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Expression, "a>>>exe"); RtlInitAnsiString(&Name, "abc.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); RtlInitAnsiString(&Name, "ac.exe"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE\n"); } START_TEST(FsRtlExpression) { FsRtlIsNameInExpressionTest(); FsRtlIsDbcsInExpressionTest(); }