X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fio%2Fwindows%2Ffile.cpp;h=3cbdc4a8ddaf5c6b4c91672479ebf4b1a1383c21;hb=2c63690c6315004c1d5e48b84ac1b75d796ea7b2;hp=b973375475abe3554296969bb5a19ed836fbbe2f;hpb=609c9a508cfdc7b42c46c4f21d17639204165a00;p=libs%2Fcore.git diff --git a/source/io/windows/file.cpp b/source/io/windows/file.cpp index b973375..3cbdc4a 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 = 0; + sec_attr.bInheritHandle = !!(mode&M_INHERIT); + + *handle = CreateFile(fn.c_str(), flags, share_flags, 0, create_flags, FILE_ATTRIBUTE_NORMAL, &sec_attr); 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);