]> gitweb.factorcode.org Git - factor.git/blob - basis/elevate/windows/windows.factor
postpone windows already-root?
[factor.git] / basis / elevate / windows / windows.factor
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 ;
4 IN: elevate.windows
5
6 <PRIVATE
7 ! TODO
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
12     f ;
13
14 M:: windows elevated ( command replace? win-console? posix-graphical? -- process )
15     already-root? [
16         <process> command >>command
17     ] [
18         ! hwnd lpOperation
19         f "runas"
20         command dup string? [ " " split ] when
21         ! lpFile lpParameters lpDirectory (int)nShowCmd
22         [ first ] [ rest ] bi " " join f SW_SHOW
23         ! call shell function
24         ShellExecuteW alien-address :> retval retval 32 <= [ retval n>win32-error-check ] [ ] if
25         replace? [ exit ] [ ] if
26     ] if ;
27
28 ! no-op (not possible to lower)
29 M: windows lowered ;
30 PRIVATE>