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);