无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
12
返回列表 发新帖
楼主: bfgxp

Snapshot还原当前系统分区的技术分析

[复制链接]
发表于 2010-12-31 10:08:44 | 显示全部楼层
原帖由 bfgxp 于 2010-12-31 09:33 发表

但不可否认,这个软件非常优秀

短小精干,哈哈~~
回复

使用道具 举报

发表于 2011-1-2 01:51:34 | 显示全部楼层
原帖由 lianjiang 于 2010-12-30 15:29 发表


这参数哪里找到的?
帮助信息里似乎没有这个参数的说明。

SORRY 今天才有空上来,贴回得有点晚了。。。。
http://www.drivesnapshot.de/en/commandline.htm
我是从这看到的。里边还有几个有用的参数
snapshot --? 这样能得到更多...

[ 本帖最后由 ban_r 于 2011-1-2 01:54 编辑 ]
回复

使用道具 举报

发表于 2011-1-2 07:18:50 | 显示全部楼层
原帖由 ban_r 于 2011-1-2 01:51 发表

SORRY 今天才有空上来,贴回得有点晚了。。。。
http://www.drivesnapshot.de/en/commandline.htm
我是从这看到的。里边还有几个有用的参数
snapshot --? 这样能得到更多...


官方网站及帮助文件中并无这个参数。
回复

使用道具 举报

发表于 2011-1-3 11:19:15 | 显示全部楼层
原帖由 <i>songhangzhou</i> 于 2010-12-22 15:58 发表
本人本机备份的恢复是在纯DOS下用的命令:<br />
A:\snapshot restore HD1 auto  W:\c.drive.sna -Y -V<br />
恢复主引导扇区(MBR)<br />
A:\snapshot.exe restore HD1 MBR W:\c.drive.sna<br />
<br />
声明下,是全镜像型的snapshot备 ...
<br />

什么是“指针型的snapshot
回复

使用道具 举报

发表于 2011-1-3 13:26:52 | 显示全部楼层
原帖由 快雪时晴 于 2011-1-3 11:19 发表


什么是“指针型的snapshot”

就我所知道的大慨说下
其实snapshot意思就是“快照”,名字很简单,是数据在某一时刻的状况..
主要用于由BIOS设定的RAID磁盘阵列内的Snapshot软件,使用微软的API来进行备份操作,
相当的优秀,其性能几乎要超过了GHOST,该软件不适用于WIN9X,它基于NT内核,这个软件是德国人开发的
snapshot实现方式也有两种,一种是volume manager snapshot镜像型的,也就是所有数据copy一份;另一种是file system snapshot指针型的...
例如EMC的timefiner,IBM的Flashcopy,HDS的ShadowImage;
现在就IBM的Flashcopy说下两种方式:
IBM的flashcopy分为前台和后台拷贝两种方式,前台拷贝是实际完全拷贝,
后台就是说的那种建立指针的方式。后台方式下,如果你访问备份卷
的数据,发现不是最新的,就会先去从原卷上执行COPY工作,达到访问
数据的正确性。

指针型的snapshot用的比较多的例如三茗,雨过天晴等,对系统性能有一定的影响,如果没有备份而原盘坏了,数据应该是无法恢复的;
而镜像型的snapshot本身就是当时时刻的数据的全copy,所以原数据坏对它是没有影响的。
回复

使用道具 举报

 楼主| 发表于 2011-1-4 11:38:35 | 显示全部楼层
原帖由 ban_r 于 2011-1-2 01:51 发表

SORRY 今天才有空上来,贴回得有点晚了。。。。
http://www.drivesnapshot.de/en/commandline.htm
我是从这看到的。里边还有几个有用的参数
snapshot --? 这样能得到更多...

原来还隐藏了这么多的特殊参数
special operations :
--unmount - unmount all virtual disks and terminate Snapshot started with -VQ
--unmount:Z - unmount virtual disk Z
--resize X:  - show possible resize range for drive X:
--resize X: 1000 - (try to) resize drive X: to 1000 MB
--resizepart X: 1000 - (try to) grow partition and filesystem to 1000 MB
              resizepart is unable to shrink partitions or filesystems!
--SetPartitionSize HD1 1 130000000  (use with care !!)
--exec:"NET START ORACLE"  - execute commands as soon as
                               backup really started
                               MUST be the last option on the command line!
--ClearSignature HD1
--SetSignature HD1 01234567
--Checkboot HD1 - test if HD1 seems to be bootable
--Activate X: set active flag for drive X:
--Deactivate X: clear active flag for drive X:
--RestoreMBR HD1 filename - writes the MBR from filename to HD1
--RestorePartitionStructure HD1 filename -
      writes the partition information from filename to HD1
--exclude:path excludes the path and all subdirectories from backup
--exclude:filename1,filename2,...  excludes all given filenames from backup
--exclude:@filename.txt exclude from file filename.txt
--LogFile:filename.log - append log output to file filename.log
--DontLogStdout   - don't write VSS log output to standard output
--DontLogProgress - don't write the progress report lines to stderr
--novss  - don't use the volume shadow service
--usevss  - use the volume shadow service if available
--forcevss  - use the volume shadow service. If not available exit with error.
--register:License.lic - register Snapshot
--setdefaultpwd=MyPassword - sets the default password to MyPassword and exits
--SearchFull:path1,path2,path3 while working with differential images
              search the full image in the given pathes.
--LimitIORate:10  - limits the IO rate to 10MB/s (accepted range 1-100)
--show HD1   - show size and partitions on HD1
--show       - show size and partitions of all connected hard disks
--addDriver  - adds a new Hard Disk Diver to a restored Windows system drive.
                You need the driver.sys and the driver.inf file.
--mergeide   - corrects IDE driver setup for a restored system disk.
                Use this option if you have IDE disks and your system doesn't
                boot after a restore to different hardware.
--QuickCheck:test.sna - performs a quick check of the image with the name
                         test.sna.
BrokenImage.sna --repair:NewImage.sna  - this command can be used to repair
                a broken image
-----------------------------------------------------------------------------
scheduling the restore of x:\image-C.sna to C: during the next reboot:
snapshot --schedule C: x:\image-C.sna
--autoreboot:off       don't boot after the restore has finished
--autoreboot:success   reboot after the image was successfully restored
--autoreboot:any       reboot after the image was restored
--listschedule         list the scheduled restore
--removeschedule       removes the scheduled restore
回复

使用道具 举报

发表于 2011-1-7 11:16:47 | 显示全部楼层
嗯,隐藏的参数是比较多哈,Drive SnapShot 1.40这个版本官方一直update小版本号
每次都说bug fix,不知道fix了啥?

这个软件在欧美的老外很是崇拜,就象我门迷信GHOST一样,哈哈!
我想主要的理由是在Windows下的热备分,应该超过了大家熟悉的GHOST及TeraByte的image
回复

使用道具 举报

发表于 2011-5-29 16:57:43 | 显示全部楼层

[讨论]金山装机精灵的装机功能的讨论帖

xp下实验,重装系统的那个功能,很强大。确实很快就能装好系统。不知金山是从网络给提供的,还是从本机提取的系统文件。个人觉得好像是网络提供的。在第一次重启进入的,不是系统。第二次,重启,进入是部署。第三次,进入的就是新的系统了。boot.ini提供了可以还原到原来的系统。好像有类似snapshot的那个native的程序的功能啊。

Snapshot还原当前系统分区的技术分析


snapshot从1.4版开始支持还原当前操作系统所在分区,但似乎只能在gui中实现
找了半天也没有发现可以用命令行实现的方法或参数
哪位大大知道方法的麻烦说下
这是官方介绍内容http://www.drivesnapshot.de/en/restboot.htm
通过分析注册表发现
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"BootExecute"=hex(7):61,00,75,00,74,00,6f,00,63,00,68,00,65,00,63,00,6b,00,20,\
  00,61,00,75,00,74,00,6f,00,63,00,68,00,6b,00,20,00,2a,00,00,00,73,00,6e,00,\
  61,00,70,00,6e,00,61,00,74,00,69,00,76,00,65,00,2e,00,65,00,78,00,65,00,00,\
  00,00,00
在“bootexecute”下多了一个启动程序
snapnative.exe                        c:\windows\system32\snapnative.exe

而在这里多了以下几个值
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Snapshot]
"AutoReboot"=dword:00000000
"AutoRebootSuccess"=dword:00000000
"Destination"="\\??\\C:"
"FullImage"="\\??\\x:\\C-Drive.sna"

关于从“bootexecute”键中运行的程序的特点
经查相关技术文档说是win系统在启动到这里时,所有系统分区中的文件都没有被锁定,而snapshot则巧妙的利用了win系统的这一点特性,通过在“bootexecute”键中添加snapnative.exe来还原系统
为什么不是snapshot.exe呢,因为在bootexecute这里运行的程序是很底层的native程序,普通程序在这里还没法运行

通过以上分析,虽然目前还没有命令行参数支持这种还原,但我们却可以通过注册导入相关的键值来实现

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=183485&highlight=snapshot
上面的引用见上面的链接。

是否,我们也能在备份系统时,做到类似金山的功能呢。
在测试完后卸载时,完美回到了从前的系统。希望有类似的高手,研究下。
回复

使用道具 举报

发表于 2011-5-29 17:10:28 | 显示全部楼层
以下引自金山装系统的程序产出的kfo.log
GetFileCount:MUST_DELE_FILE_LIST
GetFileCount:MUST_COPY_FILE_LIST
GetFileCount:MUST_DELE_DIR_LIST
GetFileCount:MUST_FORCE_DELE_DIR_LIST
FD:\WINDOWS\Web\Wallpaper\bliss.jpg
FD:\WINDOWS\Web\Wallpaper\BenQ3.jpg
FD:\WINDOWS\Web\Wallpaper\CompaqCity.jpg
FD:\WINDOWS\Web\Wallpaper\Dell.jpg
FD:\WINDOWS\Web\Wallpaper\HPBlack.jpg
FD:\WINDOWS\Web\Wallpaper\IBM笔记本1.jpg
FD:\WINDOWS\Web\Wallpaper\MSI blue.jpg
FD:\WINDOWS\Web\Wallpaper\Red.jpg

下面的rar包括了保留文件。删除文件。建立文件。恢复文件的记录。

kfo.rar

150.85 KB, 下载次数: 32, 下载积分: 无忧币 -2

回复

使用道具 举报

 楼主| 发表于 2011-5-30 10:42:35 | 显示全部楼层
原帖由 <i>23070205</i> 于 2011-5-29 16:57 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2243185&ptid=183485" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />
xp下实验,重装系统的那个功能,很强大。确实很快就能装好系统。不知金山是从网络给提供的,还是从本机提取的系统文件。个人觉得好像是网络提供的。在第一次重启进入的,不是系统。第二次,重启,进入是部署。第 ...
<br />
测试了金山的“重装系统”功能,确实是通过native程序实现的,还原也是通过native程序实现的,只是金山似乎没有备份完整的镜像。这一关键技术可能就是金山的秘密了。
回复

使用道具 举报

发表于 2012-12-28 19:22:56 | 显示全部楼层
snapnative.exe包含在snapshot.exe的PE资源里:

BINARY\189    32位
BINARY\190    64位
回复

使用道具 举报

发表于 2012-12-29 13:52:16 | 显示全部楼层
给个人装过几台Drive SnapShot的一键恢复,但有的杀毒软件会在native程序启动时拦截,结果是恢复不成功。。。个人用户已放弃,

现在是服务器上备用,还不错。。。
回复

使用道具 举报

发表于 2012-12-29 14:38:00 | 显示全部楼层

回复 #42 songhangzhou 的帖子

上报一下应该可以修正
回复

使用道具 举报

发表于 2012-12-29 15:29:25 | 显示全部楼层
原帖由 andos 于 2012-12-29 14:38 发表
上报一下应该可以修正


已上报了。。。。
dos和pe下还是可以的。
回复

使用道具 举报

发表于 2013-10-17 09:34:27 | 显示全部楼层
andos 发表于 2010-12-30 16:16
deUPX
之后用notepad打开那snapshot.exe就会找到

精力不是一般的好哇,牛人!
回复

使用道具 举报

发表于 2016-12-26 08:05:43 | 显示全部楼层
转贴一个NATIVE程序工作机理
==================================
深入Native应用程序

版权所有 1998 Mark Russinovich



翻译:MJ0011

最后更新:1998年2月8日


导言

如果你对WindowsNt结构有一定的了解,你可能会知道,Win32应用程序所使用的API,并非是"真正"的NT API

。POSIX,OS/2和Win32,这些WindowsNT操作系统环境,使用他们自己的API同他们的客户应用程序进行交流,

但却使用NT "native" API同 WindowsNT进行交流.这些native API大部分都是未公开的(undocumented)。大

约只有25个API(包含250种功能)在WindowsNT设备驱动开发工具包(Device Driver Kit)里有所描述。


尽管绝大多数人都不知道,但"native"应用程序的确存在与WindowsNT上,他们在操作环境上没有任何客户程

序. 这些程序交流着native nt API并且不能使用任何操作环境API比如 Win32. 为什么这样一种程序是必须

的呢?因为在Win32子系统启动之前(大约在登陆对话框出现时)只可以运行native应用程序.最常见的native

应用程序的例子是"autochk"程序,他在初始化兰色登陆屏幕前运行 chkdsk(程序在屏幕上打印一串".")。

当然,Win32应用程序环境服务程序:CSRSS.exe(客户-服务运行时间子系统),也是一个native应用程序

在这篇文章里,我将会讲述如何构造一个native应用程序以及它们是如何工作的,同时我也会提供一个

native应用程序的示例源代码。这个示例很容易安装,它会在启动时的兰色屏幕打印一段你指定的字符串


Autochk是如何被执行的

Autochk在当内存分页被打开,Windows启动和系统开始驱动被载入之间的时间内运行。在这个时间点 启动顺

序会话管理器(smss.exe)进入windowsNT用户模式,并且没有任何程序被启动
注册表中:HKLM/System/CurrentControlSet/Control/Session Manager/BootExecute
一个MULTI_SZ类型的键值
这里存放着将被会话管理器所执行的程序名称和参数
通常Autochk后加*号作为其参数"

Autocheck Autochk *
;名称 程序名 参数

会话管理器在<winnt>/system32目录下查找该值列出的可执行程序.当Autochk运行时,没有任何文件被打开

,所以Autochk可以用raw模式打开任何一个驱动器卷(包括根驱动器),并操作其磁盘数据结构.之后的任何

时间点都无法进行类似这样的操作

编译Native应用程序
微软没有提供相应的文档,但是NT DDK构建器知道如何去生成一个native应用程序,而且它可以被用来编译

autochk程序.和编写设备驱动程序一样,你必须指定SOURCE文件中的信息来定义应用程序。然而和编写驱动

不同的时,你在SOURCE文件中要求生成一个native应用程序需要这样定义:

TARGETTYPE=PROGRAM

构建器使用一个标准的makefile来进行向导:/ddk/inc/makefile.def 在编译native应用程序时会查找名为

nt.lib的运行库。不幸的是,微软并没在DDK上装载这个文件(在windows Server 2003 DDK里包括了这个文

件,但是我怀疑你用这个版本来连接你的native应用程序是无法运行在WindowsXP或win2000上的)
不管怎样,你可以忽略这个错误,方法是加入一行不考虑nt.lib,而指定visual c++的运行库msvcrt.lib到

makefile.lib中

如果你在DDK的"Checked Build"环境下进行编译,将会在%BASEDIR%/lib/%CPU%/Checked(例如

c:/ddk/lib/i386/checked/native.exe)产生一个包含了全部调试信息的native应用程序。如果你在"Free

Build"环境中编译,你会在%BASEDIR%/lib/%CPU%/Free得到一个释出版本的程序.这些和构造设备驱动程序

放置的位置是一样的。

Native应用程序有着".exe"的扩展名,但是你不能象 win32的.exe文件那样去运行它,如果你在WIN32环境

下运行下,将会得到如下提示:

"<应用程序名> 应用程序无法在Win32模式中运行。"

深入学习一个native应用程序

native应用程序的入口点是NtProcessStartup,类似winmain或main.不同于其他的 Win32入口点的是,

native应用程序提供一个数据结构来存放它的唯一的参数来定位命令行参数

大多数的native应用程序的运行环境是由WindowsNt的native API输出库---NTDLL.DLL提供的。native应用

程序必须使用RtlCreateHeap(一个ntdll函数)来创建他们自己的堆来分配存储,使用RtlAllocateHeap来分

配内存以及用RtlFreeHeap来释放内存。native应用程序需要使用NtDisplayString 函数才可以打印想要的

内容到屏幕上(将被输出到初始化时的兰色屏幕上)


Native应用程序不象win32程序那样简单地从他们的启动函数返回,你需要调用NtProcessTerminate函数来

结束它的进程

NTDLL运行包含了数百个函数允许native应用程序执行文件I/O,与设备驱动进行相连,并执行进程间通讯。

不幸的是,他们大部分都是未公开的。

一个native应用程序的例子
我创建一个“玩具”native 应用程序用来演示native应用程序是如何构建的以及他们是如何工作的。运行

install.bat来安装native程序。批处理程序复制native.exe到你的<winnt>/system32目录并在注册表中增

加一个BootExecute的入口点:


native Hello World!


当你重新启动时,会话管理器运行完autochk后就会执行native。native分配一些堆,定位它的命令行参数

并打印参数("Hello world!")到兰色屏幕上,它所使用的函数上面已说过了。如果你想要打印其他的简单内

容,可以编辑BootExecute值使用regedit或regedit32,修改"Hello world"为你想要的信息

运行uinstall.bat可以卸载这个native执行程序。它从<winnt>/system32目录删除native.exe,并修改

BootExecute值为通常的值


如果你想要构建native程序你必须要用Windows设备驱动工具包(DDK),复制makefile.def到 /ddk/inc然后你

可以运行构建

=========================================================
Native.H
//======================================================================
//
// Native.h
//
// Mark Russinovich
// http://www.ntinternals.com
//
// This file includes the definitions required by the Native.exe sample
// NT native program to do what it does.
//
//======================================================================
//
// Environment information, which includes command line and
// image file name
//
typedef struct {
       ULONG            Unknown[21];     
       UNICODE_STRING   CommandLine;
       UNICODE_STRING   ImageFile;
} ENVIRONMENT_INFORMATION, *PENVIRONMENT_INFORMATION;
//
// This structure is passed as NtProcessStartup's parameter
//
typedef struct {
       ULONG                     Unknown[3];
       PENVIRONMENT_INFORMATION  Environment;
} STARTUP_ARGUMENT, *PSTARTUP_ARGUMENT;
//
// Data structure for heap definition. This includes various
// sizing parameters and callback routines, which, if left NULL,
// result in default behavior
//
typedef struct {
ULONG     Length;
ULONG     Unknown[11];
} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
//
// Native NT api function to write something to the boot-time
// blue screen
//
NTSTATUS
NTAPI
NtDisplayString(
  PUNICODE_STRING String
  );
//
// Native applications must kill themselves when done - the job
// of this native API
//
NTSTATUS
NTAPI
NtTerminateProcess(
     HANDLE ProcessHandle,
     LONG ExitStatus
     );
//
// Definition to represent current process
//
#define NtCurrentProcess() ( (HANDLE) -1 )
//
// Heap creation routine
//
HANDLE
NTAPI
RtlCreateHeap(
       ULONG Flags,
       PVOID BaseAddress,
       ULONG SizeToReserve,
       ULONG SizeToCommit,
       PVOID Unknown,
       PRTL_HEAP_DEFINITION Definition
       );
//
// Heap allocation function (ala "malloc")
//
PVOID
NTAPI
RtlAllocateHeap(
  HANDLE Heap,
  ULONG Flags,
  ULONG Size
  );
//
// Heap free function (ala "free")
//
BOOLEAN
NTAPI
RtlFreeHeap(
     HANDLE Heap,
     ULONG Flags,
     PVOID Address
     );
=========================================================================
Native.C
//======================================================================
//
// Native.c
//
// Mark Russinovich
// http://www.ntinternals.com
//
// This is a demonstration of a Native NT program. These programs
// run outside of the Win32 environment and must rely on the raw
// services provided by NTDLL.DLL. AUTOCHK (the program that executes
// a chkdsk activity during the system boot) is an example of a
// native NT application.
//
// This example is a native 'hello world' program. When installed with
// the regedit file associated with it, you will see it print
// "hello world" on the initialization blue screen during the system
// boot. This program cannot be run from inside the Win32 environment.
//
//======================================================================
#include "ntddk.h" // include this for its native functions and defn's
#include "stdio.h"
#include "native.h"
//
// Our heap
//
HANDLE Heap;
//----------------------------------------------------------------------
//
// NtProcessStartup
//
// Instead of a 'main' or 'winmain', NT applications are entered via
// this entry point.  
//
//----------------------------------------------------------------------
void NtProcessStartup( PSTARTUP_ARGUMENT Argument )
{
    PUNICODE_STRING commandLine;
    PWCHAR stringBuffer, argPtr;
    UNICODE_STRING helloWorld;
    RTL_HEAP_DEFINITION  heapParams;
    //
    // Initialize some heap
    //
    memset( &heapParams, 0, sizeof( RTL_HEAP_DEFINITION ));
    heapParams.Length = sizeof( RTL_HEAP_DEFINITION );
    Heap = RtlCreateHeap( 2, 0, 0x100000, 0x1000, 0, &heapParams );
    //
    // Point at command line
    //
    commandLine = &Argument->Environment->CommandLine;
    //
    // Locate the argument
    //
    argPtr = commandLine->Buffer;
    while( *argPtr != L' ' ) argPtr++;
    argPtr++;
    //
    // Print out the argument
    //
    stringBuffer = RtlAllocateHeap( Heap, 0, 256 );
    swprintf( stringBuffer, L"/n%s", argPtr );
    helloWorld.Buffer = stringBuffer;
    helloWorld.Length = wcslen( stringBuffer ) * sizeof(WCHAR);
    helloWorld.MaximumLength = helloWorld.Length + sizeof(WCHAR);
    NtDisplayString( &helloWorld );
    //
    // Free heap
    //
    RtlFreeHeap( Heap, 0, stringBuffer );
    //
    // Terminate
    //
    NtTerminateProcess( NtCurrentProcess(), 0 );
}
===========================================================================
Install.bat
@echo off
copy native.exe %systemroot%/system32/.
regedit /s add.reg
echo Native Example Installed
=============================================================================
uinstall.bat
@echo off
del %systemroot%/system32/native.exe
regedit /s remove.reg
echo Native Example Uninstalled

回复

使用道具 举报

发表于 2016-12-26 08:08:52 | 显示全部楼层
回复

使用道具 举报

发表于 2017-5-12 14:22:55 | 显示全部楼层
本帖最后由 leexuben 于 2017-5-12 14:25 编辑

你好,Snapshot 怎么实现 命令行 备份和恢复,望指点   我在CMD 操作:Snapshot C: D:\sanp   没反应

点评

Snapshot --schedule C: D:\SNAP\XP_C.SNA --autoreboot:any  详情 回复 发表于 2017-7-4 08:40
回复

使用道具 举报

发表于 2017-7-4 08:40:32 | 显示全部楼层
leexuben 发表于 2017-5-12 14:22
你好,Snapshot 怎么实现 命令行 备份和恢复,望指点   我在CMD 操作:Snapshot C: D:\sanp   没 ...

Snapshot --schedule C: D:\SNAP\XP_C.SNA --autoreboot:any
回复

使用道具 举报

发表于 2021-4-26 00:21:43 | 显示全部楼层
要是能用这个原理来做个启动过程中的热键,做一键还原用就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 08:26

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表