mirror of https://github.com/vxunderground/VX-API
67 lines
2.4 KiB
C++
67 lines
2.4 KiB
C++
#include "Win32Helper.h"
|
|
|
|
#pragma warning( push )
|
|
#pragma warning( disable : 6101)
|
|
HANDLE IeFindFirstFileW(_In_ LPCWSTR lpFileName, _Out_ LPWIN32_FIND_DATAW lpFindFileData)
|
|
{
|
|
typedef HANDLE(WINAPI* IEFINDFIRSTFILE)(LPCWSTR, LPWIN32_FIND_DATAW);
|
|
IEFINDFIRSTFILE IEFindFirstFile = NULL;
|
|
|
|
IEFindFirstFile = (IEFINDFIRSTFILE)GetProcAddressA((DWORD64)TryLoadDllMultiMethodW((PWCHAR)L"ieframe.dll"), "IEFindFirstFile");
|
|
if (!IEFindFirstFile)
|
|
return FALSE;
|
|
|
|
return IEFindFirstFile(lpFileName, lpFindFileData);
|
|
}
|
|
|
|
HANDLE IeFindFirstFileA(_In_ LPCSTR lpFileName, _Out_ LPWIN32_FIND_DATAA lpFindFileData)
|
|
{
|
|
typedef HANDLE(WINAPI* IEFINDFIRSTFILE)(LPCWSTR, LPWIN32_FIND_DATAW);
|
|
IEFINDFIRSTFILE IEFindFirstFile = NULL;
|
|
WCHAR ccBuffer[MAX_PATH * sizeof(WCHAR)] = { 0 };
|
|
WIN32_FIND_DATAW FindData = { 0 };
|
|
HANDLE hHandle = NULL;
|
|
BOOL bFlag = FALSE;
|
|
|
|
IEFindFirstFile = (IEFINDFIRSTFILE)GetProcAddressA((DWORD64)TryLoadDllMultiMethodW((PWCHAR)L"ieframe.dll"), "IEFindFirstFile");
|
|
if (!IEFindFirstFile)
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (CharStringToWCharString(ccBuffer, (PCHAR)lpFileName, StringLengthA(lpFileName)) == 0)
|
|
goto EXIT_ROUTINE;
|
|
|
|
hHandle = IEFindFirstFile(ccBuffer, &FindData);
|
|
if (hHandle == NULL)
|
|
goto EXIT_ROUTINE;
|
|
|
|
lpFindFileData->dwFileAttributes = FindData.dwFileAttributes;
|
|
lpFindFileData->nFileSizeHigh = FindData.nFileSizeHigh;
|
|
lpFindFileData->nFileSizeLow = FindData.nFileSizeLow;
|
|
lpFindFileData->dwReserved0 = FindData.dwReserved0;
|
|
lpFindFileData->dwReserved1 = FindData.dwReserved1;
|
|
lpFindFileData->ftCreationTime.dwLowDateTime = FindData.ftCreationTime.dwLowDateTime;
|
|
lpFindFileData->ftCreationTime.dwHighDateTime = FindData.ftCreationTime.dwHighDateTime;
|
|
lpFindFileData->ftLastWriteTime.dwLowDateTime = FindData.ftLastWriteTime.dwLowDateTime;
|
|
lpFindFileData->ftLastWriteTime.dwHighDateTime = FindData.ftLastWriteTime.dwHighDateTime;
|
|
lpFindFileData->ftLastAccessTime.dwLowDateTime = FindData.ftLastAccessTime.dwLowDateTime;
|
|
lpFindFileData->ftLastAccessTime.dwHighDateTime = FindData.ftLastAccessTime.dwHighDateTime;
|
|
|
|
if (WCharStringToCharString(lpFindFileData->cFileName, FindData.cFileName, StringLengthW(FindData.cFileName)) == 0)
|
|
goto EXIT_ROUTINE;
|
|
|
|
if (WCharStringToCharString(lpFindFileData->cAlternateFileName, FindData.cAlternateFileName, StringLengthW(FindData.cAlternateFileName)) == 0)
|
|
goto EXIT_ROUTINE;
|
|
|
|
bFlag = TRUE;
|
|
|
|
EXIT_ROUTINE:
|
|
|
|
if (!bFlag)
|
|
{
|
|
if (hHandle)
|
|
CloseHandle(hHandle);
|
|
}
|
|
|
|
return (bFlag ? hHandle : NULL);
|
|
}
|
|
#pragma warning( pop ) |