Windows系统下怎样察觉用户正在修改系统时间

1 篇文章 0 订阅

    其实我们可以通过命令行的方式,查询系统进程来发现用户正在修改系统时间,这对于不想用户修改时间的程序来说,是一种不错的方法。以下通过Qt c++的方式来实现监视功能。

Win7系统下的实现方法:

QProcess p(0);

p.start("wmic");

p.waitForStarted();

p.write("process where caption=\"rundll32.exe\" get commandline /value");

p.closeWriteChannel();

p.waitForFinished();



QString output = p.readAllStandardOutput();

if (output.contains("timedate.cpl"))

{
        QMessageBox::warning(0, tr("警告"),

        tr("请不要修改系统时间,否则会出现意想不到的错误!"),

        QMessageBox::Yes, QMessageBox::Yes);
}

Win10系统下的实现方法:

QProcess p(0);
p.start("wmic");
p.waitForStarted();
p.write("process where caption=\"SystemSettingsAdminFlows.exe\" get commandline /value");
p.closeWriteChannel();
p.waitForFinished();

QString output = p.readAllStandardOutput();
if (output.contains("SetDateTime"))
{
	QMessageBox::warning(0, tr("警告"),
		tr("请不要修改系统时间,否则会出现意想不到的错误!"),
		QMessageBox::Yes, QMessageBox::Yes);
}

那么为什么这样做就可以达到目的呢,而且Win7和Win10下会有区别呢,小伙伴们不妨试试以下操作:

Win7系统下在命令行输入wmic,然后回车,会弹出一个命令行窗口

接着我们打开修改时间的窗口

 

然后我们在刚刚的命令行里输入我们程序里提到的命令并回车 process where caption="rundll32.exe" get commandline /value

我们就会看到如下显示:

然后我们关闭设置时间的窗口,再输入上面的命令,就会发现提示的是No Instance(s) Available.

看到这里大家应该都明白了,这个窗口可以通过上述命令查询进程及其启动参数。上面我们查询的是使用C:\Windows\system32\timedate.cpl参数启动的rundll32.exe进程,这个就是修改系统时间的窗口的进程,我们程序里面通过查询这个命令,然后匹配关键字,从而发现用户正在修改系统时间。

而Win10系统里面修改时间的窗口的进程和Win7里面是不同的,所以我们使用另一种命令和关键字匹配,Win10里面的实验步骤和Win7里面一样,这里就不再演示了。

以上就是我的解决方法,大家可以通过循环执行查询程序来达到监控的目的,希望我牺牲了几撮头发换来的思路能够帮到大家。

wmic及Win7上面的查询命令也是通过网友的博客找到的,但是我现在已经想不起来当时是怎么搜到的了,在这里要感谢这篇不知道链接的博客的启发。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值