I hate Win32 (Was: The new std.process is ready for review)

Vladimir Panteleev vladimir at thecybershadow.net
Sun Mar 31 13:08:04 PDT 2013


On Sunday, 31 March 2013 at 15:21:38 UTC, Lars T. Kyllingstad 
wrote:
> As you may already have guessed, it does *not* print 
> "TerminateProcess failed" and exit with code 0.
>
> But does it print "TerminateProcess succeeded" and exit with 
> code 1? NO! It prints NOTHING and exits with code 123, because 
> TerminateProcess() terminates the CURRENT process when it is 
> passed INVALID_HANDLE_VALUE.  Aaaaargh!

How did INVALID_HANDLE_VALUE get so far in the code as to reach 
TerminateProcess? Shouldn't an enforce call have been in place to 
validate whatever the source of the handle is?

Anyway, this is documented behavior. You can pass 
GetCurrentProcess() to TerminateProcess to terminate the current 
process.

Your plight was caused by the unfortunate (or perhaps, 
unforesighted) coincidence that GetCurrentProcess() returns the 
special (magic) value of (HANDLE)-1, the same value of 
INVALID_HANDLE_VALUE.


More information about the Digitalmars-d mailing list