1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 * PURPOSE: Test for SfcGetFiles 5 * COPYRIGHT: Copyright 2018 Mark Jansen (mark.jansen@reactos.org) 6 */ 7 8 #include <apitest.h> 9 #include <strsafe.h> 10 #include <ndk/umtypes.h> 11 12 typedef struct _PROTECT_FILE_ENTRY { 13 PWSTR SourceFileName; 14 PWSTR FileName; 15 PWSTR InfName; 16 } PROTECT_FILE_ENTRY, *PPROTECT_FILE_ENTRY; 17 18 NTSTATUS (WINAPI *SfcGetFiles)(PPROTECT_FILE_ENTRY* ProtFileData, PULONG FileCount); 19 20 PCWSTR wszEnvVars[] = 21 { 22 L"%systemroot%", 23 L"%commonprogramfiles%", 24 L"%ProgramFiles%", 25 L"%systemdrive%" 26 }; 27 28 static void Test_GetFiles() 29 { 30 PPROTECT_FILE_ENTRY FileData; 31 PCWSTR Ptr; 32 ULONG FileCount, n, j; 33 NTSTATUS Status; 34 35 Status = SfcGetFiles(&FileData, &FileCount); 36 ok(NT_SUCCESS(Status), "SfcGetFiles failed: 0x%lx\n", Status); 37 38 if (!NT_SUCCESS(Status)) 39 return; 40 41 for (n = 0; n < FileCount; ++n) 42 { 43 PPROTECT_FILE_ENTRY Entry = FileData + n; 44 45 ok(Entry->FileName != NULL, "Entry %lu without FileName!", n); 46 if (Entry->FileName) 47 { 48 Ptr = NULL; 49 for (j = 0; j < _countof(wszEnvVars); ++j) 50 { 51 Ptr = wcsstr(Entry->FileName, wszEnvVars[j]); 52 if (Ptr) 53 break; 54 } 55 ok(Ptr != NULL, "Expected to find one match from wszEnvVars in %s\n", wine_dbgstr_w(Entry->FileName)); 56 } 57 if (Entry->InfName) 58 { 59 Ptr = wcsstr(Entry->InfName, L".inf"); 60 ok(Ptr == (Entry->InfName + wcslen(Entry->InfName) - 4), 61 ".inf not found in %s\n", wine_dbgstr_w(Entry->InfName)); 62 } 63 } 64 } 65 66 START_TEST(SfcGetFiles) 67 { 68 HMODULE mod; 69 70 mod = LoadLibraryA("sfcfiles.dll"); 71 if (!mod) 72 { 73 skip("sfcfiles.dll not found\n"); 74 return; 75 } 76 77 SfcGetFiles = (void*)GetProcAddress(mod, "SfcGetFiles"); 78 ok(SfcGetFiles != NULL, "Function not exported!\n"); 79 if (!SfcGetFiles) 80 return; 81 82 Test_GetFiles(); 83 } 84