blob: f163b536721b76fbcdb424675db3ca628d6378e3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#!/usr/bin/env perl
# $Id: $
# win-admin.pl
#
# Copyright 2007 Siep Kroonenberg
# This file is licensed under the GNU General Public License version 2
# or any later version.
#
# This file determines whether the script is run with admin rights.
#
# This code first sets $admin to true. The function sys-access returns
# registry access permissions based on the value of $admin. The code
# then tries to access the system environment with the permissions
# returned by sys_access. If this fails then it modifies its
# assumptions and tries again.
use Win32::TieRegistry(
Delimiter => "/", ArrayValues => 0, FixSzNulls => 1,
qw(REG_SZ REG_EXPAND_SZ KEY_READ KEY_WRITE KEY_ALL_ACCESS
KEY_ENUMERATE_SUB_KEYS));
my $admin=1;
my $SystemEnv;
our %vars;
sub sys_access {
$admin? KEY_ALL_ACCESS() : KEY_READ() | KEY_ENUMERATE_SUB_KEYS();
}
$SystemEnv=$Registry -> Open(
"LMachine/system/currentcontrolset/control/session manager/Environment/",
{Access => sys_access()});
if (not $SystemEnv) {
print "No admin permissions\n";
$admin=0;
$SystemEnv=$Registry -> Open(
"LMachine/system/currentcontrolset/control/session manager/Environment/",
{Access => sys_access()});
}
$SystemEnv->ArrayValues(1);
$vars{'win-admin'}=$admin? 1:0;
# needs a terminal 1 for require to succeed!
1;
__END__
### Local Variables:
### perl-indent-level: 2
### tab-width: 2
### indent-tabs-mode: nil
### End:
# vim:set tabstop=2 expandtab: #
|