#!/usr/bin/perl -w

use Win32;
use Win32::NetResource;
use Win32::WinError;    # Error code

# Set up a default host name.
$node = Win32::NodeName();

# Generate "proper" UNC name.
$default_host = "\\\\" . $node;

$host = $default_host;

$directory = "d:\\MyShare";
$name   = "MyShare";
$remark = "MyShare directory";


%share_def = (
   'maxusers'    => -1,
   'netname'     => $name,  
   'passwd'      => "",
   'path'        => $directory,   
   'permissions' => 0x01 | 0x02,  # read-write
   'remark'      => $remark,
   'type'        => 0x00,  # directory
);

$parm_error = 0;   # ignore

$status = Win32::NetResource::NetShareAdd(\%share_def,$parm_error, $host);

if ($status) {
   print "Shared $directory as $host\\$name\n";
} else {
   print_netresource_error();
}


# Note that you may see no message for an error.
sub print_netresource_error {

   my($error_code) = 0;
   my($type);
   my($description);

   Win32::NetResource::GetError( $error_code );

   if ($error_code == ERROR_EXTENDED_ERROR) {

      Win32::NetResource::WNetGetLastError($error_code,
            $description, $type);

      print "Extended $type error: $description\n";
   } else {
      print "Error $error_code\n";
      print Win32::FormatMessage( $error_code );
   }
   
}
