X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fwindows%2Ffile.cpp;h=a388ade8fd687ae9db3c4bb5351e4f0e9332b8a4;hb=HEAD;hp=b973375475abe3554296969bb5a19ed836fbbe2f;hpb=609c9a508cfdc7b42c46c4f21d17639204165a00;p=libs%2Fcore.git diff --git a/source/io/windows/file.cpp b/source/io/windows/file.cpp index b973375..a388ade 100644 --- a/source/io/windows/file.cpp +++ b/source/io/windows/file.cpp @@ -33,11 +33,16 @@ void File::platform_init(const string &fn, CreateMode cm) else share_flags = FILE_SHARE_READ; - *handle = CreateFile(fn.c_str(), flags, share_flags, 0, create_flags, FILE_ATTRIBUTE_NORMAL, 0); + SECURITY_ATTRIBUTES sec_attr; + sec_attr.nLength = sizeof(SECURITY_ATTRIBUTES); + sec_attr.lpSecurityDescriptor = nullptr; + sec_attr.bInheritHandle = !!(mode&M_INHERIT); + + *handle = CreateFile(fn.c_str(), flags, share_flags, &sec_attr, create_flags, FILE_ATTRIBUTE_NORMAL, nullptr); if(!handle) { int err = GetLastError(); - if(err==ERROR_FILE_NOT_FOUND) + if(err==ERROR_FILE_NOT_FOUND || err==ERROR_PATH_NOT_FOUND) throw file_not_found(fn); else if(err==ERROR_FILE_EXISTS) throw file_already_exists(fn);