@@ -2686,21 +2686,29 @@ inline bool mmap::open(const char *path) {
26862686 close ();
26872687
26882688#if defined(_WIN32)
2689- hFile_ = ::CreateFileA (path, GENERIC_READ, FILE_SHARE_READ, NULL ,
2690- OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
2689+ std::wstring wpath;
2690+ for (size_t i = 0 ; i < strlen (path); i++) {
2691+ wpath += path[i];
2692+ }
2693+
2694+ hFile_ = ::CreateFile2 (wpath.c_str (), GENERIC_READ, FILE_SHARE_READ,
2695+ OPEN_EXISTING, NULL );
26912696
26922697 if (hFile_ == INVALID_HANDLE_VALUE) { return false ; }
26932698
2694- size_ = ::GetFileSize (hFile_, NULL );
2699+ LARGE_INTEGER size{};
2700+ if (!::GetFileSizeEx (hFile_, &size)) { return false ; }
2701+ size_ = static_cast <size_t >(size.QuadPart );
26952702
2696- hMapping_ = ::CreateFileMapping (hFile_, NULL , PAGE_READONLY, 0 , 0 , NULL );
2703+ hMapping_ = ::CreateFileMappingFromApp (hFile_, NULL , PAGE_READONLY, size_,
2704+ NULL );
26972705
26982706 if (hMapping_ == NULL ) {
26992707 close ();
27002708 return false ;
27012709 }
27022710
2703- addr_ = ::MapViewOfFile (hMapping_, FILE_MAP_READ, 0 , 0 , 0 );
2711+ addr_ = ::MapViewOfFileFromApp (hMapping_, FILE_MAP_READ, 0 , 0 );
27042712#else
27052713 fd_ = ::open (path, O_RDONLY);
27062714 if (fd_ == -1 ) { return false ; }
0 commit comments