| 2938 | } |
| 2939 | |
| 2940 | BOOL WINAPI shCustomGetFileAttributesExA(LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation) |
| 2941 | { |
| 2942 | auto raddr = _ReturnAddress(); |
| 2943 | auto bRecursive = isRecursive(raddr); |
| 2944 | if (!bRecursive && HasVirtualFiles() && IsVirtualFile(lpFileName)) |
| 2945 | { |
| 2946 | if (auto virtualFile = GetVirtualFileByPath(lpFileName)) |
| 2947 | { |
| 2948 | if (fInfoLevelId == GetFileExInfoStandard && lpFileInformation) |
| 2949 | { |
| 2950 | auto* fileAttributeData = static_cast<LPWIN32_FILE_ATTRIBUTE_DATA>(lpFileInformation); |
| 2951 | uint64_t fileSize = virtualFile->GetSize(); |
| 2952 | |
| 2953 | fileAttributeData->dwFileAttributes = FILE_ATTRIBUTE_NORMAL; |
| 2954 | fileAttributeData->ftCreationTime = virtualFile->creationTime; |
| 2955 | fileAttributeData->ftLastAccessTime = virtualFile->lastAccessTime; |
| 2956 | fileAttributeData->ftLastWriteTime = virtualFile->lastWriteTime; |
| 2957 | fileAttributeData->nFileSizeLow = static_cast<DWORD>(fileSize & 0xFFFFFFFF); |
| 2958 | fileAttributeData->nFileSizeHigh = static_cast<DWORD>(fileSize >> 32); |
| 2959 | return TRUE; |
| 2960 | } |
| 2961 | } |
| 2962 | SetLastError(ERROR_FILE_NOT_FOUND); |
| 2963 | return FALSE; |
| 2964 | } |
| 2965 | auto r = GetFilePathForOverload(lpFileName, bRecursive); |
| 2966 | return mhGetFileAttributesExA->get_original<decltype(GetFileAttributesExA)>()(value_orA(r, lpFileName), fInfoLevelId, lpFileInformation); |
| 2967 | } |
| 2968 | |
| 2969 | BOOL WINAPI shCustomGetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation) |
| 2970 | { |
nothing calls this directly
no test coverage detected