|
|
|
@ -574,18 +574,45 @@ fail_without_close: |
|
|
|
|
wchar_t * wchar_file_name = (wchar_t *) malloc (sizeof (wchar_t) * size); |
|
|
|
|
if (unlikely (wchar_file_name == nullptr)) goto fail_without_close; |
|
|
|
|
mbstowcs (wchar_file_name, file_name, size); |
|
|
|
|
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) |
|
|
|
|
{ |
|
|
|
|
CREATEFILE2_EXTENDED_PARAMETERS ceparams = { 0 }; |
|
|
|
|
ceparams.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS); |
|
|
|
|
ceparams.dwFileAttributes = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED & 0xFFFF; |
|
|
|
|
ceparams.dwFileFlags = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED & 0xFFF00000; |
|
|
|
|
ceparams.dwSecurityQosFlags = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED & 0x000F0000; |
|
|
|
|
ceparams.lpSecurityAttributes = nullptr; |
|
|
|
|
ceparams.hTemplateFile = nullptr; |
|
|
|
|
fd = CreateFile2 (wchar_file_name, GENERIC_READ, FILE_SHARE_READ, |
|
|
|
|
OPEN_EXISTING, &ceparams); |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
fd = CreateFileW (wchar_file_name, GENERIC_READ, FILE_SHARE_READ, nullptr, |
|
|
|
|
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, |
|
|
|
|
nullptr); |
|
|
|
|
#endif |
|
|
|
|
free (wchar_file_name); |
|
|
|
|
|
|
|
|
|
if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close; |
|
|
|
|
|
|
|
|
|
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) |
|
|
|
|
{ |
|
|
|
|
LARGE_INTEGER length; |
|
|
|
|
GetFileSizeEx (fd, &length); |
|
|
|
|
file->length = length.LowPart; |
|
|
|
|
file->mapping = CreateFileMappingFromApp (fd, nullptr, PAGE_READONLY, length.QuadPart, nullptr); |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
file->length = (unsigned long) GetFileSize (fd, nullptr); |
|
|
|
|
file->mapping = CreateFileMapping (fd, nullptr, PAGE_READONLY, 0, 0, nullptr); |
|
|
|
|
#endif |
|
|
|
|
if (unlikely (file->mapping == nullptr)) goto fail; |
|
|
|
|
|
|
|
|
|
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP) |
|
|
|
|
file->contents = (char *) MapViewOfFileFromApp (file->mapping, FILE_MAP_READ, 0, 0); |
|
|
|
|
#else |
|
|
|
|
file->contents = (char *) MapViewOfFile (file->mapping, FILE_MAP_READ, 0, 0, 0); |
|
|
|
|
#endif |
|
|
|
|
if (unlikely (file->contents == nullptr)) goto fail; |
|
|
|
|
|
|
|
|
|
CloseHandle (fd); |
|
|
|
|