use Win32::AdminMisc; use Win32::NetResource; use Win32::FileSecurity; use strict; my $hdir_srv = 'c:/temp/test'; my $hdir = 'Test User'; my $err; print STDERR "$hdir_srv\n"; mkdir($hdir_srv, '0777'); my $admin_perms = Win32::FileSecurity::MakeMask( qw(FULL GENERIC_ALL) ); my %hdir_perm_hash; if ( Win32::FileSecurity::Get($hdir_srv, \%hdir_perm_hash) ) { print STDERR "$hdir_srv has been opened\n"; } $hdir_perm_hash{'DOMAIN\\Domain Admins'} = $admin_perms; delete($hdir_perm_hash{'Everyone'}); if ( Win32::FileSecurity::Set($hdir_srv, \%hdir_perm_hash) ) { print STDERR "$hdir_srv has been set\n"; } my $hdir_share = { 'path' , $hdir_srv, 'netname', $hdir, 'remark', "This is the home dir for $hdir", 'passwd' , "", 'maxusers', '-1', 'permissions', '0' , 'type', '0'}; if ( Win32::NetResource::NetShareAdd($hdir_share, $err) ) { print STDERR "$hdir_srv shared!\n"; } else { die "Win32::NetResource::GetError($err)"; } my $PDC = Win32::AdminMisc::GetPDC('DOMAIN'); print STDERR "$PDC\n"; eval { my $path = "\\\\$PDC\\$hdir"; my @lst; my $perms = {}; my $acct; print STDERR $path; print STDERR "\n"; if ( Win32::FileSecurity::Get($path, $perms) ){ print "Permissions for $path:\n"; foreach $acct (sort ( keys( %{ $perms } ) ) ) { print "\t$acct:\t$perms->{$acct}\n"; if ( Win32::FileSecurity::EnumerateRights( $perms->{$acct} , \@lst) ) { map {print "\t\t$_\n"} ( @lst ); } else { print "\t\tNone\n"; } } } else { print "Error accessing perms for $path\n"; print Win32::FormatMessage( Win32::GetLastError() ); } };