| 2967 | } |
| 2968 | |
| 2969 | BOOL WINAPI shCustomGetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation) |
| 2970 | { |
| 2971 | auto raddr = _ReturnAddress(); |
| 2972 | auto bRecursive = isRecursive(raddr); |
| 2973 | if (!bRecursive && HasVirtualFiles() && IsVirtualFile(lpFileName)) |
| 2974 | { |
| 2975 | if (auto virtualFile = GetVirtualFileByPath(lpFileName)) |
| 2976 | { |
| 2977 | if (fInfoLevelId == GetFileExInfoStandard && lpFileInformation) |
| 2978 | { |
| 2979 | auto* fileAttributeData = static_cast<LPWIN32_FILE_ATTRIBUTE_DATA>(lpFileInformation); |
| 2980 | uint64_t fileSize = virtualFile->GetSize(); |
| 2981 | |
| 2982 | fileAttributeData->dwFileAttributes = FILE_ATTRIBUTE_NORMAL; |
| 2983 | fileAttributeData->ftCreationTime = virtualFile->creationTime; |
| 2984 | fileAttributeData->ftLastAccessTime = virtualFile->lastAccessTime; |
| 2985 | fileAttributeData->ftLastWriteTime = virtualFile->lastWriteTime; |
| 2986 | fileAttributeData->nFileSizeLow = static_cast<DWORD>(fileSize & 0xFFFFFFFF); |
| 2987 | fileAttributeData->nFileSizeHigh = static_cast<DWORD>(fileSize >> 32); |
| 2988 | return TRUE; |
| 2989 | } |
| 2990 | } |
| 2991 | SetLastError(ERROR_FILE_NOT_FOUND); |
| 2992 | return FALSE; |
| 2993 | } |
| 2994 | |
| 2995 | auto r = GetFilePathForOverload(lpFileName, bRecursive); |
| 2996 | return mhGetFileAttributesExW->get_original<decltype(GetFileAttributesExW)>()(value_orW(r, lpFileName), fInfoLevelId, lpFileInformation); |
| 2997 | } |
| 2998 | |
| 2999 | HANDLE WINAPI shCustomFindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData) |
| 3000 | { |
nothing calls this directly
no test coverage detected