亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tieregistry.pm

?? ARM上的如果你對底層感興趣
?? PM
?? 第 1 頁 / 共 5 頁
字號:
# Win32/TieRegistry.pm -- Perl module to easily use a Registry
# (on Win32 systems so far).
# by Tye McQueen, tye@metronet.com, see http://www.metronet.com/~tye/.

#
# Skip to "=head" line for user documentation.
#

package Win32::TieRegistry;

use strict;
use vars qw( $PACK $VERSION @ISA @EXPORT @EXPORT_OK );

$PACK= "Win32::TieRegistry";	# Used in error messages.
$VERSION= '0.21';		# Released Sept 17, 1998

use Carp;
require Tie::Hash;
@ISA= qw(Tie::Hash);

# Required other modules:
use Win32API::Registry 0.12 qw( :KEY_ :HKEY_ :REG_ );

#Optional other modules:
use vars qw( $_NoMoreItems $_FileNotFound $_TooSmall $_MoreData $_SetDualVar );

if(  eval { require Win32::WinError }  ) {
    $_NoMoreItems= Win32::WinError::constant("ERROR_NO_MORE_ITEMS",0);
    $_FileNotFound= Win32::WinError::constant("ERROR_FILE_NOT_FOUND",0);
    $_TooSmall= Win32::WinError::constant("ERROR_INSUFFICIENT_BUFFER",0);
    $_MoreData= Win32::WinError::constant("ERROR_MORE_DATA",0);
} else {
    $_NoMoreItems= "^No more data";
    $_FileNotFound= "cannot find the file";
    $_TooSmall= " data area passed to ";
    $_MoreData= "^more data is avail";
}
if(  $_SetDualVar= eval { require SetDualVar }  ) {
    import SetDualVar;
}


#Implementation details:
#    When opened:
#	HANDLE		long; actual handle value
#	MACHINE		string; name of remote machine ("" if local)
#	PATH		list ref; machine-relative full path for this key:
#			["LMachine","System","Disk"]
#			["HKEY_LOCAL_MACHINE","System","Disk"]
#	DELIM		char; delimiter used to separate subkeys (def="\\")
#	OS_DELIM	char; always "\\" for Win32
#	ACCESS		long; usually KEY_ALL_ACCESS, perhaps KEY_READ, etc.
#	ROOTS		string; var name for "Lmachine"->HKEY_LOCAL_MACHINE map
#	FLAGS		int; bits to control certain options
#    Often:
#	VALUES		ref to list of value names (data/type never cached)
#	SUBKEYS		ref to list of subkey names
#	SUBCLASSES	ref to list of subkey classes
#	SUBTIMES	ref to list of subkey write times
#	MEMBERS		ref to list of subkey_name.DELIM's, DELIM.value_name's
#	MEMBHASH	hash ref to with MEMBERS as keys and 1's as values
#    Once Key "Info" requested:
#	Class CntSubKeys CntValues MaxSubKeyLen MaxSubClassLen
#	MaxValNameLen MaxValDataLen SecurityLen LastWrite
#    When tied to a hash and iterating over key values:
#	PREVIDX		int; index of last MEMBERS element return
#    When tied to a hash and iterating over key values:
#	UNLOADME	list ref; information about Load()ed key
#    When a subkey of a "loaded" key:
#	DEPENDON	obj ref; object that can't be destroyed before us


#Package-local variables:

# Option flag bits:
use vars qw( $Flag_ArrVal $Flag_TieVal $Flag_DualTyp $Flag_DualBin
	     $Flag_FastDel $Flag_HexDWord $Flag_Split $Flag_FixNulls );
$Flag_ArrVal=	0x0001;
$Flag_TieVal=	0x0002;
$Flag_FastDel=	0x0004;
$Flag_HexDWord=	0x0008;
$Flag_Split=	0x0010;
$Flag_DualTyp=	0x0020;
$Flag_DualBin=	0x0040;
$Flag_FixNulls=	0x0080;


use vars qw( $RegObj %_Roots %RegHash $Registry );

# Short-hand for HKEY_* constants:
%_Roots= (
    "Classes" =>	HKEY_CLASSES_ROOT,
    "CUser" =>		HKEY_CURRENT_USER,
    "LMachine" =>	HKEY_LOCAL_MACHINE,
    "Users" =>		HKEY_USERS,
    "PerfData" =>	HKEY_PERFORMANCE_DATA,	# Too picky to be useful
    "CConfig" =>	HKEY_CURRENT_CONFIG,
    "DynData" =>	HKEY_DYN_DATA,		# Too picky to be useful
);

# Basic master Registry object:
$RegObj= {};
@$RegObj{qw( HANDLE MACHINE PATH DELIM OS_DELIM ACCESS FLAGS ROOTS )}= (
    "NONE", "", [], "\\", "\\",
    KEY_READ|KEY_WRITE, $Flag_HexDWord|$Flag_FixNulls, "${PACK}::_Roots" );
$RegObj->{FLAGS} |= $Flag_DualTyp|$Flag_DualBin   if  $_SetDualVar;
bless $RegObj;

# Fill cache for master Registry object:
@$RegObj{qw( VALUES SUBKEYS SUBCLASSES SUBTIMES )}= (
    [],  [ keys(%_Roots) ],  [],  []  );
grep( s#$#$RegObj->{DELIM}#,
  @{ $RegObj->{MEMBERS}= [ @{$RegObj->{SUBKEYS}} ] } );
@$RegObj{qw( Class MaxSubKeyLen MaxSubClassLen MaxValNameLen
  MaxValDataLen SecurityLen LastWrite CntSubKeys CntValues )}=
    ( "", 0, 0, 0, 0, 0, 0, 0, 0 );

# Create master Registry tied hash:
$RegObj->Tie( \%RegHash );

# Create master Registry combination object and tied hash reference:
$Registry= \%RegHash;
bless $Registry;


# Preloaded methods go here.

# Map option names to name of subroutine that controls that option:
use vars qw( @_opt_subs %_opt_subs );
@_opt_subs= qw( Delimiter ArrayValues TieValues SplitMultis DWordsToHex
	FastDelete FixSzNulls DualTypes DualBinVals AllowLoad AllowSave );
@_opt_subs{@_opt_subs}= @_opt_subs;

sub import
{
  my $pkg= shift(@_);
  my $level= $Exporter::ExportLevel;
  my $expto= caller($level);
  my @export= ();
  my @consts= qw( :KEY_ :REG_ );
  my $registry= $Registry->Clone;
  local( $_ );
    while(  @_  ) {
	$_= shift(@_);
	if(  /^\$(\w+::)*\w+$/  ) {
	    push( @export, "ObjVar" )   if  /^\$RegObj$/;
	    push( @export, $_ );
	} elsif(  /^\%(\w+::)*\w+$/  ) {
	    push( @export, $_ );
	} elsif(  /^[$%]/  ) {
	    croak "${PACK}->import:  Invalid variable name ($_)";
	} elsif(  /^:/  ||  /^(H?KEY|REG)_/  ) {
	    Win32API::Registry->export( $expto, $_ )
	      unless  /^:$/;
	    @consts= ();
	} elsif(  ! @_  ) {
	    croak "${PACK}->import:  Missing argument after option ($_)";
	} elsif(  exists $_opt_subs{$_}  ) {
	    $_= $_opt_subs{$_};
	    $registry->$_( shift(@_) );
	} elsif(  /^TiedRef$/  ) {
	    $_= shift(@_);
	    if(  ! ref($_)  &&  /^(\$?)(\w+::)*\w+$/  ) {
		$_= '$'.$_   unless  '$' eq $1;
	    } elsif(  "SCALAR" ne ref($_)  ) {
		croak "${PACK}->import:  Invalid var after TiedRef ($_)";
	    }
	    push( @export, $_ );
	} elsif(  /^TiedHash$/  ) {
	    $_= shift(@_);
	    if(  ! ref($_)  &&  /^(\%?)(\w+::)*\w+$/  ) {
		$_= '%'.$_   unless  '%' eq $1;
	    } elsif(  "HASH" ne ref($_)  ) {
		croak "${PACK}->import:  Invalid var after TiedHash ($_)";
	    }
	    push( @export, $_ );
	} elsif(  /^ObjectRef$/  ) {
	    $_= shift(@_);
	    if(  ! ref($_)  &&  /^(\$?)(\w+::)*\w+$/  ) {
		push( @export, "ObjVar" );
		$_= '$'.$_   unless  '$' eq $1;
	    } elsif(  "SCALAR" eq ref($_)  ) {
		push( @export, "ObjRef" );
	    } else {
		croak "${PACK}->import:  Invalid var after ObjectRef ($_)";
	    }
	    push( @export, $_ );
	} elsif(  /^ExportLevel$/  ) {
	    $level= shift(@_);
	    $expto= caller($level);
	} elsif(  /^ExportTo$/  ) {
	    undef $level;
	    $expto= caller($level);
	} else {
	    croak "${PACK}->import:  Invalid option ($_)";
	}
    }
    @export= ('$Registry')   unless  @export;
    while(  @export  ) {
	$_= shift( @export );
	if(  /^\$((?:\w+::)*)(\w+)$/  ) {
	  my( $pack, $sym )= ( $1, $2 );
	    $pack= $expto   unless  defined($pack)  &&  "" ne $pack;
	    no strict 'refs';
	    *{"${pack}::$sym"}= \${"${pack}::$sym"};
	    ${"${pack}::$sym"}= $registry;
	} elsif(  /^\%((?:\w+::)*)(\w+)$/  ) {
	  my( $pack, $sym )= ( $1, $2 );
	    $pack= $expto   unless  defined($pack)  &&  "" ne $pack;
	    no strict 'refs';
	    *{"${pack}::$sym"}= \%{"${pack}::$sym"};
	    $registry->Tie( \%{"${pack}::$sym"} );
	} elsif(  "SCALAR" eq ref($_)  ) {
	    $$_= $registry;
	} elsif(  "HASH" eq ref($_)  ) {
	    $registry->Tie( $_ );
	} elsif(  /^ObjVar$/  ) {
	    $_= shift( @_ );
	    /^\$((?:\w+::)*)(\w+)$/;
	  my( $pack, $sym )= ( $1, $2 );
	    $pack= $expto   unless  defined($pack)  &&  "" ne $pack;
	    no strict 'refs';
	    *{"${pack}::$sym"}= \${"${pack}::$sym"};
	    ${"${pack}::$sym"}= $registry->ObjectRef;
	} elsif(  /^ObjRef$/  ) {
	    ${shift(@_)}= $registry->ObjectRef;
	} else {
	    die "Impossible var to export ($_)";
	}
    }
}

use vars qw( @_new_Opts %_new_Opts );
@_new_Opts= qw( ACCESS DELIM MACHINE DEPENDON );
@_new_Opts{@_new_Opts}= (1) x @_new_Opts;

sub _new
{
  my $this= shift( @_ );
    $this= tied(%$this)  if  ref($this)  &&  tied(%$this);
  my $class= ref($this) || $this;
  my $self= {};
  my( $handle, $rpath, $opts )= @_;
    if(  @_ < 2  ||  "ARRAY" ne ref($rpath)  ||  3 < @_
     ||  3 == @_ && "HASH" ne ref($opts)  ) {
	croak "Usage:  ${PACK}->_new( \$handle, \\\@path, {OPT=>VAL,...} );\n",
	      "  options: @_new_Opts\nCalled";
    }
    @$self{qw( HANDLE PATH )}= ( $handle, $rpath );
    @$self{qw( MACHINE ACCESS DELIM OS_DELIM ROOTS FLAGS )}=
      ( $this->Machine, $this->Access, $this->Delimiter,
        $this->OS_Delimiter, $this->_Roots, $this->_Flags );
    if(  ref($opts)  ) {
      my @err= grep( ! $_new_Opts{$_}, keys(%$opts) );
	@err  and  croak "${PACK}->_new:  Invalid options (@err)";
	@$self{ keys(%$opts) }= values(%$opts);
    }
    bless $self, $class;
    return $self;
}


sub _split
{
  my $self= shift( @_ );
    $self= tied(%$self)  if  tied(%$self);
  my $path= shift( @_ );
  my $delim= @_ ? shift(@_) : $self->Delimiter;
  my $list= [ split( /\Q$delim/, $path ) ];
    $list;
}


sub _rootKey
{
  my $self= shift(@_);
    $self= tied(%$self)  if  tied(%$self);
  my $keyPath= shift(@_);
  my $delim= @_ ? shift(@_) : $self->Delimiter;
  my( $root, $subPath );
    if(  "ARRAY" eq ref($keyPath)  ) {
	$subPath= $keyPath;
    } else {
	$subPath= $self->_split( $keyPath, $delim );
    }
    $root= shift( @$subPath );
    if(  $root =~ /^HKEY_/  ) {
      my $handle= Win32API::Registry::constant($root,0);
	$handle  or  croak "Invalid HKEY_ constant ($root): $!";
	return( $self->_new( $handle, [$root], {DELIM=>$delim} ),
	        $subPath );
    } elsif(  $root =~ /^([-+]|0x)?\d/  ) {
	return( $self->_new( $root, [sprintf("0x%lX",$root)],
			     {DELIM=>$delim} ),
		$subPath );
    } else {
      my $roots= $self->Roots;
	if(  $roots->{$root}  ) {
	    return( $self->_new( $roots->{$root}, [$root], {DELIM=>$delim} ),
	            $subPath );
	}
	croak "No such root key ($root)";
    }
}


sub _open
{
  my $this= shift(@_);
    $this= tied(%$this)  if  ref($this)  &&  tied(%$this);
  my $subPath= shift(@_);
  my $sam= @_ ? shift(@_) : $this->Access;
  my $subKey= join( $this->OS_Delimiter, @$subPath );
  my $handle= 0;
    $this->RegOpenKeyEx( $subKey, 0, $sam, $handle )
      or  return wantarray ? () : undef;
    return $this->_new( $handle, [ @{$this->_Path}, @$subPath ],
      { ACCESS=>$sam, ( defined($this->{UNLOADME}) ? ("DEPENDON",$this)
	: defined($this->{DEPENDON}) ? ("DEPENDON",$this->{DEPENDON}) : () )
      } );
}


sub ObjectRef
{
  my $self= shift(@_);
    $self= tied(%$self)  if  tied(%$self);
    $self;
}


sub _connect
{
  my $this= shift(@_);
    $this= tied(%$this)  if  ref($this)  &&  tied(%$this);
  my $subPath= pop(@_);
    $subPath= $this->_split( $subPath )   unless  ref($subPath);
  my $machine= @_ ? shift(@_) : shift(@$subPath);
  my $handle= 0;
  my( $temp )= $this->_rootKey( [@$subPath] );
    $temp->RegConnectRegistry( $machine, $temp->Handle, $handle )
      or  return wantarray ? () : undef;
  my $self= $this->_new( $handle, [shift(@$subPath)], {MACHINE=>$machine} );
    ( $self, $subPath );
}


use vars qw( @Connect_Opts %Connect_Opts );
@Connect_Opts= qw(Access Delimiter);
@Connect_Opts{@Connect_Opts}= (1) x @Connect_Opts;

sub Connect
{
  my $this= shift(@_);
  my $tied=  ref($this)  &&  tied(%$this);
    $this= tied(%$this)  if  $tied;
  my( $machine, $key, $opts )= @_;
  my $delim= "";
  my $sam;
  my $subPath;
    if(  @_ < 2  ||  3 < @_
     ||  3 == @_ && "HASH" ne ref($opts)  ) {
	croak "Usage:  \$obj= ${PACK}->Connect(",
	      " \$Machine, \$subKey, { OPT=>VAL,... } );\n",
	      "  options: @Connect_Opts\nCalled";
    }
    if(  ref($opts)  ) {
      my @err= grep( ! $Connect_Opts{$_}, keys(%$opts) );
	@err  and  croak "${PACK}->Connect:  Invalid options (@err)";
    }
    $delim= "$opts->{Delimiter}"  if  defined($opts->{Delimiter});
    $delim= $this->Delimiter   if  "" eq $delim;
    $sam= defined($opts->{Access}) ? $opts->{Access} : $this->Access;
    $sam= Win32API::Registry::constant($sam,0)   if  $sam =~ /^KEY_/;
    ( $this, $subPath )= $this->_connect( $machine, $key );
    return wantarray ? () : undef   unless  defined($this);
  my $self= $this->_open( $subPath, $sam );
    return wantarray ? () : undef   unless  defined($self);
    $self->Delimiter( $delim );
    $self= $self->TiedRef   if  $tied;
    return $self;
}


my @_newVirtual_keys= qw( MEMBERS VALUES SUBKEYS SUBTIMES SUBCLASSES
    Class SecurityLen LastWrite CntValues CntSubKeys
    MaxValNameLen MaxValDataLen MaxSubKeyLen MaxSubClassLen );

sub _newVirtual
{
  my $self= shift(@_);
  my( $rPath, $root, $opts )= @_;
  my $new= $self->_new( "NONE", $rPath, $opts )
      or  return wantarray ? () : undef;
    @{$new}{@_newVirtual_keys}= @{$root->ObjectRef}{@_newVirtual_keys};
    return $new;
}


#$key= new Win32::TieRegistry "LMachine/System/Disk";
#$key= new Win32::TieRegistry "//Server1/LMachine/System/Disk";
#Win32::TieRegistry->new( HKEY_LOCAL_MACHINE, {DELIM=>"/",ACCESS=>KEY_READ} );
#Win32::TieRegistry->new( [ HKEY_LOCAL_MACHINE, ".../..." ], {DELIM=>$DELIM} );
#$key->new( ... );

use vars qw( @new_Opts %new_Opts );
@new_Opts= qw(Access Delimiter);
@new_Opts{@new_Opts}= (1) x @new_Opts;

sub new
{
  my $this= shift( @_ );
    $this= tied(%$this)  if  ref($this)  &&  tied(%$this);
  my( $subKey, $opts )= @_;
  my $delim= "";

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产综合在线一区二区三区 | 在线播放中文字幕一区| 青草国产精品久久久久久| 国产精品日日摸夜夜摸av| 欧美电影影音先锋| 91亚洲国产成人精品一区二三| 蜜臀av性久久久久蜜臀aⅴ | 一区二区三区精品视频| 精品对白一区国产伦| 欧美吞精做爰啪啪高潮| 成人av影院在线| 久久99精品久久久久久动态图| 亚洲精品国产一区二区三区四区在线| 视频一区在线视频| 亚洲人妖av一区二区| 久久久久久久久久久黄色| 欧美日韩高清不卡| 色婷婷av一区二区三区之一色屋| 成人综合婷婷国产精品久久| 久久精品国产99| 日韩在线一区二区三区| 怡红院av一区二区三区| 国产精品久久久久影院| 久久久久国产免费免费| 日韩精品一区在线观看| 这里只有精品免费| 69堂国产成人免费视频| 欧美性猛交xxxx乱大交退制版| 波多野结衣视频一区| 国产精品88av| 国产综合色精品一区二区三区| 秋霞成人午夜伦在线观看| 天使萌一区二区三区免费观看| 一区二区三区精品| 一二三四区精品视频| 亚洲精品日产精品乱码不卡| 自拍偷拍国产亚洲| 亚洲另类色综合网站| 成人免费在线播放视频| 国产精品天干天干在线综合| 国产日韩精品一区二区浪潮av | 日本丶国产丶欧美色综合| 成人av资源下载| 91一区二区三区在线播放| av资源网一区| jizzjizzjizz欧美| 99re这里都是精品| 91啪亚洲精品| 欧美午夜精品理论片a级按摩| 色综合久久99| 欧美日韩三级一区二区| 91精品国产综合久久蜜臀| 欧美高清性hdvideosex| 日韩三级中文字幕| 久久影院午夜论| 国产精品久久毛片av大全日韩| 国产精品欧美经典| 亚洲一区二区影院| 天堂成人免费av电影一区| 美女视频免费一区| 国产精品18久久久久| 97精品国产露脸对白| 日本精品裸体写真集在线观看| 欧美精品丝袜中出| 精品伦理精品一区| 国产精品欧美综合在线| 亚洲日韩欧美一区二区在线| 亚洲一卡二卡三卡四卡无卡久久| 日韩激情在线观看| 国产不卡视频在线播放| 国产精品污www在线观看| 国产精品―色哟哟| 亚洲小说欧美激情另类| 九色综合狠狠综合久久| 成人av在线播放网址| 欧美美女黄视频| 国产亚洲欧美日韩日本| 亚洲理论在线观看| 六月丁香综合在线视频| 国产91精品免费| 欧美色精品在线视频| 久久精品一区蜜桃臀影院| 一区二区三区在线视频免费观看| 免费人成精品欧美精品| 成人黄色小视频在线观看| 欧美日韩国产经典色站一区二区三区| 日韩精品中文字幕一区二区三区| 亚洲国产精品国自产拍av| 亚洲成av人影院在线观看网| 国产精品夜夜爽| 8x福利精品第一导航| 亚洲国产精品ⅴa在线观看| 午夜不卡av在线| av一区二区三区| 日韩精品专区在线影院重磅| 自拍偷拍亚洲综合| 国产一本一道久久香蕉| 欧美精品tushy高清| 中文字幕在线不卡一区 | 亚洲成人福利片| 成人avav影音| 欧美tk—视频vk| 一区二区久久久久| 国产精品影视在线观看| 91精品欧美久久久久久动漫| 中文字幕一区二区三区色视频| 狠狠色狠狠色合久久伊人| 欧美日韩午夜在线视频| 亚洲美腿欧美偷拍| 成人爽a毛片一区二区免费| 欧美成人女星排行榜| 婷婷国产在线综合| 欧美综合久久久| 亚洲女与黑人做爰| 成人污视频在线观看| 欧美xxxxx裸体时装秀| 日日夜夜精品免费视频| 在线日韩国产精品| 18成人在线观看| 成人国产在线观看| 久久亚洲一区二区三区四区| 男女激情视频一区| 91精品在线观看入口| 亚洲电影欧美电影有声小说| 97久久超碰国产精品电影| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩国产欧美在线视频| 在线一区二区观看| 成人免费在线视频| 91老师片黄在线观看| 国产精品88888| 久久精品视频一区| 国产91精品在线观看| 久久久蜜臀国产一区二区| 精品一区二区三区的国产在线播放| 欧美一级日韩一级| 免费日韩伦理电影| 欧美www视频| 国产一区亚洲一区| 国产亚洲欧美色| av一区二区三区在线| 最新热久久免费视频| 91麻豆swag| 亚洲黄色在线视频| 欧美日韩中字一区| 日韩电影一区二区三区四区| 日韩欧美高清一区| 国产综合久久久久久鬼色| 久久久一区二区| 成人午夜精品在线| 亚洲少妇最新在线视频| 色偷偷成人一区二区三区91| 亚洲激情欧美激情| 欧美日韩五月天| 另类小说视频一区二区| 精品国产亚洲一区二区三区在线观看| 国内精品在线播放| 国产精品美女www爽爽爽| 色综合视频在线观看| 亚洲成人资源网| 欧美大片国产精品| aaa国产一区| 亚洲福利国产精品| 欧美xxxx老人做受| av电影一区二区| 亚洲高清一区二区三区| 精品国产髙清在线看国产毛片 | 久久er99热精品一区二区| 欧美精品一区二区三区视频| 福利一区在线观看| 亚洲精品亚洲人成人网在线播放| 欧美日韩高清一区二区不卡| 久久成人久久鬼色| 国产精品网站一区| 欧美精品第一页| 粉嫩在线一区二区三区视频| 亚洲成人av免费| 欧美不卡一区二区三区| 成人免费高清在线| 欧美a一区二区| 国产农村妇女毛片精品久久麻豆| 在线一区二区观看| 国产一区二区三区不卡在线观看| 亚洲欧美一区二区久久| 欧美一级免费大片| 成人av高清在线| 日本中文在线一区| ...xxx性欧美| 日韩欧美一区在线| 一本到高清视频免费精品| 麻豆91精品视频| 亚洲美女视频一区| 久久人人爽人人爽| 欧美日韩精品欧美日韩精品一| 国产精品伊人色| 亚洲高清免费观看| 中文字幕一区二区三区不卡在线| 日韩高清欧美激情| 国产精品久久久久久久久动漫 | 亚洲欧美在线视频观看|