vxug-VXAPI/VX-API/IeFindFirstFile.cpp

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 )