2008-05-15 06:20:42 -04:00
|
|
|
USING: alien alien.c-types alien.syntax arrays continuations
|
2008-12-14 21:03:00 -05:00
|
|
|
destructors generic io.mmap io.ports io.backend.windows io.files.windows
|
2008-09-05 20:29:14 -04:00
|
|
|
kernel libc math math.bitwise namespaces quotations sequences windows
|
2008-05-15 06:20:42 -04:00
|
|
|
windows.advapi32 windows.kernel32 io.backend system accessors
|
2009-04-30 11:25:59 -04:00
|
|
|
io.backend.windows.privileges windows.errors ;
|
2008-12-14 21:03:00 -05:00
|
|
|
IN: io.backend.windows.nt.privileges
|
2008-05-15 06:20:42 -04:00
|
|
|
|
|
|
|
TYPEDEF: TOKEN_PRIVILEGES* PTOKEN_PRIVILEGES
|
|
|
|
|
|
|
|
! Security tokens
|
|
|
|
! http://msdn.microsoft.com/msdnmag/issues/05/03/TokenPrivileges/
|
|
|
|
|
|
|
|
: (open-process-token) ( handle -- handle )
|
|
|
|
{ TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY } flags "PHANDLE" <c-object>
|
|
|
|
[ OpenProcessToken win32-error=0/f ] keep *void* ;
|
|
|
|
|
|
|
|
: open-process-token ( -- handle )
|
|
|
|
#! remember to CloseHandle
|
|
|
|
GetCurrentProcess (open-process-token) ;
|
|
|
|
|
|
|
|
: with-process-token ( quot -- )
|
|
|
|
#! quot: ( token-handle -- token-handle )
|
2008-12-02 04:10:13 -05:00
|
|
|
[ open-process-token ] dip
|
2008-05-15 06:20:42 -04:00
|
|
|
[ keep ] curry
|
|
|
|
[ CloseHandle drop ] [ ] cleanup ; inline
|
|
|
|
|
|
|
|
: lookup-privilege ( string -- luid )
|
2008-12-02 04:10:13 -05:00
|
|
|
[ f ] dip "LUID" <c-object>
|
2008-05-15 06:20:42 -04:00
|
|
|
[ LookupPrivilegeValue win32-error=0/f ] keep ;
|
|
|
|
|
|
|
|
: make-token-privileges ( name ? -- obj )
|
|
|
|
"TOKEN_PRIVILEGES" <c-object>
|
|
|
|
1 [ over set-TOKEN_PRIVILEGES-PrivilegeCount ] keep
|
|
|
|
"LUID_AND_ATTRIBUTES" malloc-array &free
|
|
|
|
over set-TOKEN_PRIVILEGES-Privileges
|
|
|
|
|
|
|
|
swap [
|
|
|
|
SE_PRIVILEGE_ENABLED over TOKEN_PRIVILEGES-Privileges
|
|
|
|
set-LUID_AND_ATTRIBUTES-Attributes
|
|
|
|
] when
|
|
|
|
|
2008-12-02 04:10:13 -05:00
|
|
|
[ lookup-privilege ] dip
|
2008-05-15 06:20:42 -04:00
|
|
|
[
|
|
|
|
TOKEN_PRIVILEGES-Privileges
|
|
|
|
set-LUID_AND_ATTRIBUTES-Luid
|
|
|
|
] keep ;
|
|
|
|
|
|
|
|
M: winnt set-privilege ( name ? -- )
|
|
|
|
[
|
|
|
|
-rot 0 -rot make-token-privileges
|
|
|
|
dup length f f AdjustTokenPrivileges win32-error=0/f
|
|
|
|
] with-process-token ;
|