1 USING: accessors alien alien.c-types elevate io.launcher kernel
2 locals math sequences splitting strings system windows.errors
3 windows.kernel32 windows.shell32 windows.user32 ;
8 M: windows already-root?
9 ! https://msdn.microsoft.com/en-us/library/windows/desktop/aa379296(v=vs.85).aspx
10 ! https://msdn.microsoft.com/en-us/library/windows/desktop/aa446671%28v=vs.85%29.aspx
11 ! https://msdn.microsoft.com/en-us/library/windows/desktop/ms683182(v=vs.85).aspx
14 M:: windows elevated ( command replace? win-console? posix-graphical? -- process )
16 <process> command >>command
20 command dup string? [ " " split ] when
21 ! lpFile lpParameters lpDirectory (enum)nShowCmd
22 [ first ] [ rest ] bi " " join f SW_SHOW
23 ! call shell function with questionable return pointer handling (should use WaitForSingleObject but it hangs)
24 ShellExecuteW alien-address :> retval retval 32 <= [ retval n>win32-error-check ] [ ] if
25 replace? [ exit ] [ ] if
28 ! no-op (not possible to lower)