WMI为何被挂起(suspend)
2008-12-22 13:42
85 查看
让我们看看如下vbscript中的WMI调用,
set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}//host1/root/default:StdRegProv")
它的作用是获取host1机器的注册表provider对象,当前机器为host0,为了简化问题,它们在一个域中。既然是远程操作,就不可避免涉及到访问用户的权限。如果访问用户在host1的管理员组中,那么这一操作应当是成功的。
我们注意到上面的调用使用了impersonate,意味着调用者的身份信息将被用来访问远端注册表。那么这个调用者即是该脚本的宿主。我们尝试下面两种方式:
方式一:使用wscript.exe来执行该脚本。我们可以使用run as来让该程序运行在不同的用户下。结果是,如果该用户不位于host1的管理员组,访问失败。关于如何让程序运行在local system帐户(LSA)的方法,请参见“让程序运行在local system帐户(LSA)下”一文。
方法二:该脚本位于一个ASP页面中,即:IIS做为宿主。在IIS6.0下,我们利用appilcation pool的特性来改变其运行帐户。而且,当运行在local system下时,该帐户将使用当前登录用户的信息。所以,如果当前登录用户不在host1的管理员组,访问被拒绝。
正常情况下,两种方式下是一致的。
不过,存在一个有趣的现象:如果host0和host1都具有一个完全相同的本地管理员帐户,上述访问竟然是成功的。难道对于本地帐户,WMI将尝试作为远端机器的本地帐户?这里还有一个条件,就是是否在vbscript中添加错误恢复语句on error resume next。在wscript.exe方式下,即使不添加该语句,也能成功执行;而在IIS方式下,如果不添加该语句,则执行被挂起,添加了该语句,却可以顺利执行。
另外,顺便提一下,还有另外一种WMI的调用方式,可以指定某个帐户,类似:
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(“host1”, "root/default", "host1/administrator", "123456")
objSWbemServices.Security_.ImpersonationLevel = 3
set objReg = objSWbemServices.Get("StdRegProv")
但显然,如果要使用这种方式,你不能直接将密码暴露出来。
set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}//host1/root/default:StdRegProv")
它的作用是获取host1机器的注册表provider对象,当前机器为host0,为了简化问题,它们在一个域中。既然是远程操作,就不可避免涉及到访问用户的权限。如果访问用户在host1的管理员组中,那么这一操作应当是成功的。
我们注意到上面的调用使用了impersonate,意味着调用者的身份信息将被用来访问远端注册表。那么这个调用者即是该脚本的宿主。我们尝试下面两种方式:
方式一:使用wscript.exe来执行该脚本。我们可以使用run as来让该程序运行在不同的用户下。结果是,如果该用户不位于host1的管理员组,访问失败。关于如何让程序运行在local system帐户(LSA)的方法,请参见“让程序运行在local system帐户(LSA)下”一文。
方法二:该脚本位于一个ASP页面中,即:IIS做为宿主。在IIS6.0下,我们利用appilcation pool的特性来改变其运行帐户。而且,当运行在local system下时,该帐户将使用当前登录用户的信息。所以,如果当前登录用户不在host1的管理员组,访问被拒绝。
正常情况下,两种方式下是一致的。
不过,存在一个有趣的现象:如果host0和host1都具有一个完全相同的本地管理员帐户,上述访问竟然是成功的。难道对于本地帐户,WMI将尝试作为远端机器的本地帐户?这里还有一个条件,就是是否在vbscript中添加错误恢复语句on error resume next。在wscript.exe方式下,即使不添加该语句,也能成功执行;而在IIS方式下,如果不添加该语句,则执行被挂起,添加了该语句,却可以顺利执行。
另外,顺便提一下,还有另外一种WMI的调用方式,可以指定某个帐户,类似:
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(“host1”, "root/default", "host1/administrator", "123456")
objSWbemServices.Security_.ImpersonationLevel = 3
set objReg = objSWbemServices.Get("StdRegProv")
但显然,如果要使用这种方式,你不能直接将密码暴露出来。
相关文章推荐
- USB的挂起和唤醒 (Suspend and Resume)
- 关于电源管理:待机(Suspend,STR,挂起)/休眠(Hibernation,STD)问题的再讨论
- win32程序如何挂起/恢复(suspend/resume)进程
- USB的挂起和唤醒 (Suspend and Resume)
- MFC任务管理器task manager----进程的挂起与恢复--NtSuspendProcess&&NtResumeProcess
- 挂起任务,OSTaskSuspend()
- Java stop()和suspend()方法为何不推荐使用
- 线程中为何stop()和suspend()方法不推荐使用
- 四极管 整理wince挂起和唤醒(suspend/wakeup)以及实现关机功能文章
- MFC任务管理器task manager----进程的挂起与恢复--NtSuspendProcess&&NtResumeProcess
- java 多线程7: (suspend方法与resume方法) 挂起与恢复
- Java多线程之线程的挂起与恢复(Suspend/Resume)
- java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- Windows 多线程之 挂起线程(Suspend)和重新激活(Resume)
- WINCE6.0下开始菜单的“挂起(suspend)”是否可见及阻止系统进入睡眠模式
- java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?
- Java多线程系列——过期的suspend()挂起、resume()继续执行线程
- block与“阻塞(pend)”与“挂起(suspend)”的区别?
- 在java的Thread类中stop()和suspend()为何不推荐使用?
- Java中有几种方法实现一个线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不提倡使用?