public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: gs-cygwin.com@gluelogic.com
To: Bruno Haible <bruno@clisp.org>, cygwin@cygwin.com
Subject: Re: posix_spawn facility
Date: Thu, 20 Apr 2023 14:46:21 -0400	[thread overview]
Message-ID: <ZEGIfeYzimEAYwDt@xps13> (raw)
In-Reply-To: <ZEFdBAODKA2c61pg@calimero.vinschen.de>

On Thu, Apr 20, 2023 at 05:40:52PM +0200, Corinna Vinschen via Cygwin wrote:
> On Apr 20 16:58, Bruno Haible via Cygwin wrote:
> > Corinna Vinschen wrote:
> > > > Hmm.  Your code uses lpReserved2 for that, but the functionality is
> > > > one implemented in MSVCRT.  For obvious reasons, Cygwin executables
> > > > are not linked against msvcrt.dll and we're using lpReserved2 for our
> > > > own purposes.
> > > 
> > > Oh, btw., did you know that there's a newer mechanism for defining
> > > specific inheritable handles to CreateProcess, which is implemented
> > > in kernel32.dll, so it does not depend on MSVCRT?
> > > 
> > > There's a STARTUPINFOEX structure which allows to specify the 
> > > additional handles.  See
> > > 
> > > https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-startupinfoexa
> > > 
> > > and the PROC_THREAD_ATTRIBUTE_HANDLE_LIST argument described in
> > > 
> > > https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute
> > 
> > Indeed, this appears to be a more "official" way to pass handles for fd ≥ 3,
> > instead of lpReserved2 — albeit without associated 'flags'. Not sure how
> > O_APPEND is handled then...
> 
> Yeah, theoretically, that should be handled by CreateFile opening the
> file with FILE_APPEND_DATA attribute, and in the child MSVCRT should
> test with NtQueryInformationFile(FILE_ACCESS_INFORMATION) if the
> FILE_APPEND_DATA flag is set.
> 
> But then again, if MSVCRT implements fcntl (F_SETFL) to allow
> manipulating the O_APPEND flag... unfortunately there's no such
> operation via Win32 or native calls.  That would require to reopen the
> file with different access mask and replace the HANDLE under the hood of
> the descriptor.  I'm not aware if and how MSVCRT performs this action.

If you are carefully controlling and allowing an explicit set of file
handles to be inherited, and the entire program uses this interface to
create new processes, then you can safely _sopen_s() or otherwise to
create new handles, pass them to CreateProcess() using STARTUPINFOEX,
and then close any new handles created solely for inheritance in child.

Cheers, Glenn

  reply	other threads:[~2023-04-20 18:46 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-04-16 11:46 Bruno Haible
2023-04-17  9:18 ` Corinna Vinschen
2023-04-17 18:44   ` Bruno Haible
2023-04-18  9:25     ` Corinna Vinschen
2023-04-18 20:49       ` Eric Blake
2023-04-18 21:00         ` Corinna Vinschen
2023-04-18 22:10         ` Bruno Haible
2023-04-19  2:39           ` Eric Blake
2023-04-19  8:19             ` Corinna Vinschen
2023-04-19 11:56             ` Bruno Haible
2023-04-20  6:52               ` Csaba Raduly
2023-07-31 18:58         ` Eric Blake
2023-07-31 19:12           ` Corinna Vinschen
2023-04-19  8:24     ` Corinna Vinschen
2023-04-19 11:24       ` posix_spawn_file_actions_add[f]chdir_np Bruno Haible
2023-04-19 15:05         ` posix_spawn_file_actions_add[f]chdir_np Corinna Vinschen
2023-04-19 19:13           ` posix_spawn_file_actions_add[f]chdir_np Corinna Vinschen
2023-04-19 21:33             ` posix_spawn_file_actions_add[f]chdir_np Eliot Moss
2023-04-20 10:27             ` posix_spawn_file_actions_add[f]chdir_np Bruno Haible
2023-04-19 10:48     ` posix_spawn facility Bruno Haible
2023-04-20  7:14     ` gs-cygwin.com
2023-04-20  8:35       ` Corinna Vinschen
2023-04-20 10:18         ` Bruno Haible
2023-04-20 14:21           ` Corinna Vinschen
2023-04-20 14:40             ` Corinna Vinschen
2023-04-20 14:58               ` Bruno Haible
2023-04-20 15:40                 ` Corinna Vinschen
2023-04-20 18:46                   ` gs-cygwin.com [this message]
2023-04-20 18:40                 ` gs-cygwin.com
2023-04-20 19:31                   ` Bruno Haible
2023-04-20 20:00                     ` gs-cygwin.com
2023-05-10  9:15                       ` gs-cygwin.com
2023-04-20 18:04               ` gs-cygwin.com
2023-05-10  8:59       ` gs-cygwin.com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZEGIfeYzimEAYwDt@xps13 \
    --to=gs-cygwin.com@gluelogic.com \
    --cc=bruno@clisp.org \
    --cc=cygwin@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).