NT/2000/XP的本地服务的默认账号是LocalSystem
但是该用户是一个空会话(NULL Session)
使用该帐号不能访问网络资源
(参看Microsoft Knowledge Base Article - Q124184
Service Running as System Account Fails Accessing Network)这个帐号可以设置成和桌面交互,
如果把服务改成一个明确的用户,比如Administrator,就可以成功的访问网络资源了,但是这样的服务,不能设置成与桌面交互。问题
1.为什么Administrator启动的服务不能设置和桌面交互?(这个问题算附加题,不答不减分,答了给分)
2.与桌面交互是个什么东东?是个权限吗?我枚举了一下NT的权限,没有发现这个玩意。就算服务自己不能和桌面交互,但是可不可以创出能和桌面交互的进程来,怎么说也是Administrator啊
3.如果用LocalSystem用户启动了服务,并且设置成能和桌面交互,服务在某种情况下,显示出一个窗口来,那么这个窗口应该在哪里呢?比如,我是XP,在本机上同时有A帐号和B帐号登录(XP上可以切换用户),那么窗口应该显示在哪个用户的desktop里呢?又比如2000有终端服务,窗口会不会显示到终端服务用户的桌面里去呢?如果本机没有人登录,窗口显示在系统的登陆窗口上吗,还是根本不显示?有没有相关的文档可以查阅?困惑,ms go die

解决方案 »

  1.   

    你说东西我也不很清楚,不过我经常往winlogon进程加载dll,在这个进程里面得到的用户名称是SYSTEM,可以和桌面交互,我也可以作其它操作,和在Administrator下面交互好像没有什么区别。
      

  2.   

    大家还是来点创意,不要不是up就是gz的
      

  3.   

    oldworm(oldworm)
    你可以试一下在system下访问网络,用
    WNetAddConnection2
    例如
    NETRESOURCE RemoteServer;
    memset(&RemoteServer,0,sizeof(RemoteServer));
    RemoteServer.lpRemoteName = "\\\\MyServer\\TestDir";
    RemoteServer.dwType=RESOURCETYPE_ANY;
    LPCTSTR lpPassWord = "";
    LPCTSTR lpUsername = "Guest";
    WNetAddConnection2(&RemoteServer,lpPassword,lpUsername,0);
    在普通App下能成功访问,
    但如果是system用户就不能正常访问了
      

  4.   

    I'm not sure, answer as will :)1.为什么Administrator启动的服务不能设置和桌面交互?(这个问题算附加题,不答不减分,答了给分)
    Because of some character of GDI resource, all the service  interact with desktop runing in one session.2.与桌面交互是个什么东东?是个权限吗?我枚举了一下NT的权限,没有发现这个玩意。就算服务自己不能和桌面交互,但是可不可以创出能和桌面交互的进程来,怎么说也是Administrator啊
    For example: show a messagebox3.如果用LocalSystem用户启动了服务,并且设置成能和桌面交互,服务在某种情况下,显示出一个窗口来,那么这个窗口应该在哪里呢?比如,我是XP,在本机上同时有A帐号和B帐号登录(XP上可以切换用户),那么窗口应该显示在哪个用户的desktop里呢?又比如2000有终端服务,窗口会不会显示到终端服务用户的桌面里去呢?如果本机没有人登录,窗口显示在系统的登陆窗口上吗,还是根本不显示?有没有相关的文档可以查阅?maybe you can reference <<in side win2000>>
      

  5.   

    1 对
    2 不对,可以.非local的也可以和桌面交互,我做过,但是要使用user以上权限(也有可能是因为我的服务里面用了其他函数,导致需要user以上权限)。记得codeproject上面有个专门的文章,介绍需要交互的服务程序。
    ------------------------
    ::高级编程小书童::
      

  6.   

    codeguru里有这样的例子,可以创建能与桌面交互的东西。
      

  7.   

    to harry202(harry) 
    1 对
    是什么?我的第一个问题又不是是否问题
    2。能不能说一下具体应该怎么做,以及codeproject的相关网址to nie173(网流小兔)
    简单的说,我想用一个使用administrator的账户用户跑起来的服务,创建一个可以和桌面交互的进程to  rokia(Burning) 
    如果能告诉是哪一个例子就好了
      

  8.   

    我曾写过一个NT服务,是可以跟Desktop进行界面交互的
    在用户登陆后,服务进程会监测出win2000处于User登录状态,然后会产生一个UI线程,负责在右下系统任务栏里出现一个任务图标,可提供点击和进一步具体操作,当用户企图注销退出时,进程会去掉这个UI线程.当Win2000处于无登录状态时,她便只是一个没有UI的纯后台服务进程。然后周而复始...
    我看了一下我的服务的运行记录:在有会话下状态下是独自以SYSTEM身份运行的(不管登录用户身份是administrator,或是普通User),这不影响进程执行效果.只不过对桌面级登录有效,对Win2000的终端服务这种的用户多会话登录模式的却表现不出来像(MS SQLSERVER)的交互效果
      

  9.   

    SYSTEM用户确实可以和桌面交互,但是SYSTEM用户无法访问网络资源
      

  10.   

    up另外
    gz是什么意思
    见笑,新人请多帮助
      

  11.   

    1,Administrator启动的服务只可以访问Administrator用户设置的资源。
       并且只可以和用Administrator登陆的桌面进行交互。
    2,和桌面交互不是什么权限。如果是Users启动的服务应该可以和该User登陆的
       桌面交互吧。另外,如果是Administrator的服务,应该可以通过
       OpenWindowStation,OpenDesktop设置进行交互吧。不过,交互时是不是
       可以使用当前用户的资源就不知道了。访问HWND是没问题的,访问资源我
        认为有问题。比如:Administrator有一个资源叫x:\temp,当前用户也
        可以设置一个网络资源为x:\temp但指向的位置不同,服务应该访问哪里?
        所以,我认为和桌面交互也仅仅是可以访问桌面的窗口句柄而已。
    3,我认为应该和当前激活的桌面交互吧,没有确认过,只是猜测。。
      

  12.   

    先看看OpenWindowStation和OpenDesktop
      

  13.   

    It is also possible to interact with the desktop from a non-interactive service by modifying the DACLs on the interface window station and desktop or by impersonating the logged-on user and opening the interactive window station and desktop directly. For more information, see Interacting with the User in a Service. For a noninteractive service application to interact with the user, it must open the user's window station ("WinSta0") and desktop ("Default"). By default, only the logged-on user and service applications running in the LocalSystem account are granted access to the user's window station and desktop. This means that services running in other accounts must either impersonate the user when opening the interactive window station and desktop, or have access granted to those accounts by the user还是安全控制的问题,不是权限,是用的DACL
      

  14.   

    完全是可以访问网络资源的,
    应为我写的服务不是别的,而正是网络功能相关的NT服务,
    她主要用来嗅探和截获 IP层以上的数据包(发给本地的,或是广播的), 分析数据包内的明文内容,有选择地作为本地网络信息记录
      

  15.   

    上面说的访问网络资源和Winsock关系不大,我的服务里也有很多TCP ,UDP的发送,接受,侦听,连接,都没有问题
    访问网络资源指的是
    如,
    通过WNetAddConnect2之类的函数访问MS网络,
    通过RPC运行远程进程等