招商银行关远程桌面之原理与解决方案

招商银行网上银行客户端关远程桌面,已经不是一天两天了,任用户怎么骂也没有用。它就是要关。

不过,在我这xp sp3上,它却没有关掉。很奇怪。但同一个招行专业版,都是最新的MG5.5.1.2,在win2k3上还是一样关我的远程。

远程桌面我并不常用,但偶尔想用时发现被招行关了也挺麻烦的。所以就研究了一下它的原理。发现其实挺简单的:

右击我的电脑=>属性=>远程,在这里,如果勾上允许远程 连接并应用,则注册表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server

下的fDenyTSConnections为0,如果去掉勾并应用,则为1.

同样,如果在regedit里把fDenyTSConnections改为1,则远程 那里的允许远程连接的勾被去除。如果设为0,则勾被启用。这样即可看出,招行就是改了一下这个注册表项而已。所以相应地,就会有以下这些解决方案:

  1. 修改招行客户端,使它不修改这个注册表项。(我想修改完后招行客户端可能就运行不起来了,就算可以运行也没有人敢运行了)
  2. 修改远程桌面的服务端,让它不读取这个注册表值,或者读取完后不判是否为1. 这个方案是可行的而且比较好的。不过我不常用远程,就懒 得折腾了。
  3. 啥也不改,每次要远程连接之前,远程修改一下注册表项,就可以连了。

对于我这种不常用远程的人来说,方案3最好用。于是每次远程前,执行以下命令:

net use “\\home\ipc$” * /user:administrator reg add ”\\home\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server“  /v  fDenyTSConnections /t REG_DWORD /d 0 /f

注意:这里的home是连接的机器名或IP。如果你要连的机器名叫abcdef,就把home改为abcdef

就可以了,修改是即时生效的,可能是远程桌面服务端在不停的读取注册表。这种方案需要打开远程注册表服务,对于原版windows是默认打开的,对于精简版即俗称野鸡版的,有没有这个服务都难说,如果有就要手动打开。这个服务并不危险,相对于开了远程服务的人来说。

常用远程的人可以试一下方法2。肯定有办法做到的。

此外,在此之前曾想过设置注册表权限禁止修改fDenyTSConnections 值,结果发现不行。招行网银客户端直接报错退出。

一个有意思的warning.

今天看下属的代码才发现的,之前还真没碰到过。

#include <stdio.h> int main() {         for (int i=0; i<10; ++i)         {                 for (int i=0; i<10; ++i)                 {                         ;                 }                 int x = i;         }         return 0; }

gcc编译:

debian:~$ gcc t.cc t.cc: In function ‘int main()’: t.cc:10: warning: name lookup of ‘i’ changed t.cc:4: warning:   matches this ‘i’ under ISO standard rules t.cc:6: warning:   matches this ‘i’ under old rules

vc编译:

D:\tmp>cl c.cc Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright (C) Microsoft Corporation.  All rights reserved. c.cc c.cc(10) : warning C4258: 'i' : definition from the for loop is ignored; the def inition from the enclosing scope is used         c.cc(6) : definition of 'i' ignored         c.cc(4) : definition of 'i' used

如果去掉int x = i;那一行,就没有这个warning。

这个倒也比较好理解,按照旧规则和新规则,int x=i有两种不同的解释,分别对应两个不同scope里的i。所以就给个warning。