我正在开发一小部分软件,该软件专为某些基于Windows的特殊信息亭设备而设计。它使用驱动程序侦听某些按键/命令,拦截它们并执行某些操作。
在这一刻,我的概念证明非常出色。我既可以在后台将其作为控制台应用程序运行,也可以将其构建为Windows服务。Windows Service确实有效并且运行良好,但是一位同事暗示最好能够根据用户应用程序/窗口的活动状态执行任务-Windows无法(合法地)执行的操作服务,因为它无法枚举用户应用程序。
明显的解决方案是仅在后台运行它-那里没有戏,除了这些信息亭使用自定义Windows Shell(使用组策略部署)。因此,普通的资源管理器“运行”键不会初始化。我现在不知道如何在这种情况下自动运行软件?
另外,如果某人有一种解决方法,可以枚举活动窗口,而对于Windows服务中的特定用户,我会对此感兴趣。注意:我实际上不需要在桌面上做任何事情,只需要读取数据即可。
Windows Vista及更高版本完全不允许服务与桌面应用程序进行交互,这是对操作系统安全性的新关注的一部分。我有一个类似的软件(本质上)是为应用程序系统开发的,它枚举窗口以查找特定的旧版应用程序,然后向其发送一些消息(所有内容都在面板上,没有其他方法可以自动执行该老旧的应用程序)。当人们使用组策略登录时,我只是将其作为系统托盘应用程序启动。但是我没有您显然要处理的自定义Windows Shell的问题。祝你好运!
因此,userinit(HKLM\Software\Microsoft\Windows NT\Current Version\Winlogon\
)可能不是一个特别糟糕的地方,但是应该有一个或两个选择。多年来(如果您问我),实际上在Windows中出现了多少个Autorun位置有点愚蠢。
以下内容大部分是从http://www.bleepingcomputer.com/tutorials/windows-program-automatic-startup-locations/复制而来的,其中有一个或两个更新。我认为在这里也很方便,谁知道永远存在(或不存在)网络上的内容?
其他自动运行位置包括以下顺序:
引导设备驱动程序
与硬件有关。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
Windows进行一些清理工作,然后启动Winlogon,后者启动服务控制管理器,后者启动服务和驱动程序。
服务
SCM启动标有“开始”值2的服务和驱动程序。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
RunServicesOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
运行服务
HKLM /.../ RunOnce条目在这些启动完成之前不会运行。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
**显示登录提示,用户登录,然后自动启动处理继续。
通知运行程序以响应事件,包括登录,注销,启动,关闭,启动屏幕保护程序,停止屏幕保护程序。恶意软件通常使用此密钥来启动自身。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify
UserInit指定应在用户登录后立即启动的程序,并以逗号分隔的程序列表。默认的userinit.exe程序会加载您的配置文件。也是恶意软件使用的通用密钥。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
Shell包含以逗号分隔的userinit.exe将启动的程序列表。默认的外壳程序是explorer.exe。首先在HKCU中启动程序,然后在HKLM中启动程序。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell
**现在将处理其余的自动启动位置...
RunOnce(HKLM)主要用于安装程序,如果路径前面带有感叹号(!),则在第一次运行后由OS删除,否则在程序运行之前被删除。这些程序以未定义的顺序同步启动,因此必须先完成所有程序,然后才能加载HKLM /.../ Run,HKCU /.../ Run,HKCU /.../ RunOnce和“启动”文件夹。在安全模式下启动时,这些键将被忽略。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
运行标准程序要从其运行的最常见启动位置,在安全模式下将被忽略,除非带有星号(*)前缀。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
启动文件夹(所有用户)
Win7及以上 %ProgramData%\Microsoft\Windows\Start Menu
赢XP / 2K C:\Documents and Settings\All Users\Start Menu\Programs\Startup
启动文件夹(每个用户)
Win7及以上 %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
赢XP / 2K %USERPROFILE%\Start Menu\Programs\Startup
RunOnce(HKCU)主要用于安装程序,其语义与HKLM RunOnce键(如上)相同。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
Explorer Run通常用于根据策略配置运行程序。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
不推荐使用“加载密钥”,不再使用。
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\load
AppInit_DLLs此注册表值包含加载user32.dll时将加载的dll列表。许多程序会加载user32.dll,因此此处列出的所有内容也会被加载到所有这些程序中。被恶意软件使用。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
ShellServiceObjectDelayLoad与Run键类似,但是指向已注册的CLSID InProcServer值。在计算机启动时,启动过程的早期,Explorer会自动加载此键下列出的文件。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ShellServiceObjectDelayLoad
启动Windows时,此处列出的SharedTaskScheduler文件自动运行。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
其他可能的自动启动位置,取决于操作系统:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句