Win32::Monitoring::Session - Get information on the logon session


Win32-Monitoring-Session documentation Contained in the Win32-Monitoring-Session distribution.

Index


Code Index:

NAME

Top

Win32::Monitoring::Session - Get information on the logon session

SYNOPSIS

Top

   use Win32::Monitoring::Session qw(GetLogonSessionData GetLogonSessionId);
   my $sessionid = GetLogonSessionId($$);
   my $info = GetLogonSessionData($sessionid);
   print "Logon Time: ".localtime($info->{LogonTime});

DESCRIPTION

Top

The Win32::Monitoring::Session module provides an interface to query Windows for additional session information. Most notably the exact logon time which seems to be rather difficult to get a hold of more or less portable way.

Note that windows seems to treat this kind of information as privileged. As a normal user you can only get information about your own processes and your own session. Admin will be better of in this respect.

$sessionid=GetLogonSessionId($pid)

Returns the LogonSessionId for the process id specified in the argument.

$info_ptr=GetLogonSessionData($sessionid)

Ask the security subsystem for additional information about the given logon session. The information is returned via hash pointer. If there was a problem, there will be a special 'ERROR' and 'ERRORCODE' entries in the hash. The following keys are returned if there is appropriate information available.

 UserName
 LogonDomain
 AuthenticationPackage 
 LogonTime (seconds since 1970 unix time format)

SEE ALSO

Top

Webpage: <http://oss.oetiker.ch/optools/>

COPYRIGHT

Top

LICENSE

Top

Win32::Monitoring::Session is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Win32::Monitoring::Session is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Win32::Monitoring::Session. If not, see <http://www.gnu.org/licenses/>.

AUTHORS

Top

Tobias Oetiker, Roman Plessl


Win32-Monitoring-Session documentation Contained in the Win32-Monitoring-Session distribution.

# $Id: Session.pm 136 2008-08-21 21:59:26Z oetiker $

package Win32::Monitoring::Session;

use 5.008008;
use strict;
use warnings;
use Carp;

require Exporter;
require DynaLoader;
use AutoLoader;

our @ISA = qw(Exporter DynaLoader);

# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.

# This allows declaration	use Win32::Monitoring::Session ':all';
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS = ( 'all' => [ qw(
   GetLogonSessionData
   GetLogonSessionId
) ] );

our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );

our @EXPORT = qw();

our $VERSION = '0.02';

bootstrap Win32::Monitoring::Session $VERSION;

# Preloaded methods go here.


use Win32::OLE qw(in);

sub GetLogonSessionId {
    my $pid = shift;   
    my $wmi= Win32::OLE->GetObject('winmgmts:\\\\.\\root\\cimv2')
        or carp("Opening wmi object $^E");
    my $sessionList =  $wmi->ExecQuery(<<"WQL_END",'WQL');
Associators of {Win32_Process='$$'}
      Where Resultclass = Win32_LogonSession 
            Assocclass = Win32_SessionProcess
WQL_END
    for my $session (in $sessionList) {
        return $session->{LogonId}
    }
    return undef;
}

1;
__END__

# Emacs Configuration
#
# Local Variables:
# mode: cperl
# eval: (cperl-set-style "PerlStyle")
# mode: flyspell
# mode: flyspell-prog
# End:
#
# vi: sw=4