# $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.01'; 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__ =head1 NAME Win32::Monitoring::Session - Find some information on the logon session =head1 SYNOPSIS use Win32::Monitoring::Session qw(GetLogonSessionData GetLogonSessionId); my $sessionid = GetLogonSessionId($$); my $info = GetLogonSessionData($sessionid); print "Logon Time: ".localtime($info->{LogonTime}); =head1 DESCRIPTION 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. =over =item $sessionid=GetLogonSessionId($pid) Returns the LogonSessionId for the process id specified in the argument. =item $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) =head1 SEE ALSO Webpage: =head1 COPYRIGHT Copyright (c) 2008 by OETIKER+PARTNER AG. All rights reserved. =head1 LICENSE 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 . =head1 AUTHORS Tobias Oetiker, Roman Plessl =cut # Emacs Configuration # # Local Variables: # mode: cperl # eval: (cperl-set-style "PerlStyle") # mode: flyspell # mode: flyspell-prog # End: # # vi: sw=4