mirror of https://github.com/vxunderground/VX-API
182 lines
3.8 KiB
C++
182 lines
3.8 KiB
C++
#include "Win32Helper.h"
|
|
|
|
PVOID UserDefinedCallbackRoutineA(LPCSTR Path)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
BOOL UnusedSubroutineRecursiveFindFileMainA(LPCSTR Path, LPCSTR Pattern)
|
|
{
|
|
HANDLE HeapHandle = GetProcessHeapFromTeb();
|
|
CHAR szFullPattern[MAX_PATH] = { 0 };
|
|
WIN32_FIND_DATAA FindData = { 0 };
|
|
HANDLE FindHandle = INVALID_HANDLE_VALUE;
|
|
|
|
if (PathCombineA(szFullPattern, Path, "*") == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
FindHandle = FindFirstFileA(szFullPattern, &FindData);
|
|
if (FindHandle == INVALID_HANDLE_VALUE)
|
|
goto EXIT_ROUTINE;
|
|
|
|
do
|
|
{
|
|
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
{
|
|
if (FindData.cFileName[0] == '.')
|
|
continue;
|
|
|
|
if (FindData.cFileName[0] == '$')
|
|
continue;
|
|
|
|
ZeroMemoryEx(szFullPattern, MAX_PATH);
|
|
if (PathCombineA(szFullPattern, Path, FindData.cFileName) == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
UnusedSubroutineRecursiveFindFileMainA(szFullPattern, Pattern);
|
|
}
|
|
|
|
} while (FindNextFileA(FindHandle, &FindData));
|
|
|
|
if (FindHandle)
|
|
FindClose(FindHandle);
|
|
|
|
if (PathCombineA(szFullPattern, Path, Pattern) == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
FindHandle = FindFirstFileA(szFullPattern, &FindData);
|
|
if (FindHandle == INVALID_HANDLE_VALUE)
|
|
goto EXIT_ROUTINE;
|
|
|
|
do
|
|
{
|
|
ZeroMemoryEx(szFullPattern, MAX_PATH);
|
|
if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
|
{
|
|
if (PathCombineA(szFullPattern, Path, FindData.cFileName) == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (IsPathValidA(szFullPattern))
|
|
{
|
|
UserDefinedCallbackRoutineA(szFullPattern);
|
|
}
|
|
}
|
|
|
|
} while (FindNextFileA(FindHandle, &FindData));
|
|
|
|
|
|
if (FindHandle)
|
|
FindClose(FindHandle);
|
|
|
|
return TRUE;
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
if (FindHandle)
|
|
FindClose(FindHandle);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL RecursiveFindFileA(_In_ LPCSTR Path, _In_ LPCSTR Pattern)
|
|
{
|
|
return UnusedSubroutineRecursiveFindFileMainA(Path, Pattern);
|
|
}
|
|
|
|
PVOID UserDefinedCallbackRoutineW(LPCWSTR Path)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
BOOL UnusedSubroutineRecursiveFindFileMainW(LPCWSTR Path, LPCWSTR Pattern)
|
|
{
|
|
HANDLE HeapHandle = GetProcessHeapFromTeb();
|
|
WCHAR szFullPattern[MAX_PATH] = { 0 };
|
|
WIN32_FIND_DATAW FindData = { 0 };
|
|
HANDLE FindHandle = INVALID_HANDLE_VALUE;
|
|
|
|
if (PathCombineW(szFullPattern, Path, L"*") == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
FindHandle = FindFirstFileW(szFullPattern, &FindData);
|
|
if (FindHandle == INVALID_HANDLE_VALUE)
|
|
goto EXIT_ROUTINE;
|
|
|
|
do
|
|
{
|
|
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
|
{
|
|
if (FindData.cFileName[0] == '.')
|
|
continue;
|
|
|
|
if (FindData.cFileName[0] == '$')
|
|
continue;
|
|
|
|
ZeroMemoryEx(szFullPattern, MAX_PATH);
|
|
if (PathCombineW(szFullPattern, Path, FindData.cFileName) == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
UnusedSubroutineRecursiveFindFileMainW(szFullPattern, Pattern);
|
|
}
|
|
|
|
} while (FindNextFileW(FindHandle, &FindData));
|
|
|
|
if (FindHandle)
|
|
FindClose(FindHandle);
|
|
|
|
if (PathCombineW(szFullPattern, Path, Pattern) == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
FindHandle = FindFirstFileW(szFullPattern, &FindData);
|
|
if (FindHandle == INVALID_HANDLE_VALUE)
|
|
goto EXIT_ROUTINE;
|
|
|
|
do
|
|
{
|
|
ZeroMemoryEx(szFullPattern, MAX_PATH);
|
|
if (!(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
|
|
{
|
|
if (PathCombineW(szFullPattern, Path, FindData.cFileName) == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (IsPathValidW(szFullPattern))
|
|
{
|
|
UserDefinedCallbackRoutineW(szFullPattern);
|
|
}
|
|
}
|
|
|
|
} while (FindNextFileW(FindHandle, &FindData));
|
|
|
|
|
|
if (FindHandle)
|
|
FindClose(FindHandle);
|
|
|
|
return TRUE;
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
if (FindHandle)
|
|
FindClose(FindHandle);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL RecursiveFindFileW(_In_ LPCWSTR Path, _In_ LPCWSTR Pattern)
|
|
{
|
|
HMODULE hShlwapi = NULL;
|
|
BOOL bIsNewlyLoaded = FALSE;
|
|
BOOL bFlag = FALSE;
|
|
|
|
hShlwapi = TryLoadDllMultiMethodW((PWCHAR)L"Shlwapi.dll");
|
|
if (hShlwapi == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
bFlag = UnusedSubroutineRecursiveFindFileMainW(Path, Pattern);
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
if (hShlwapi != NULL)
|
|
FreeLibrary(hShlwapi);
|
|
|
|
return bFlag;
|
|
} |