0

我正在为 Win7/Win10/Vista 编写一个 IE 插件(32 位 ActiveX dll)来记录来自一个或多个远程 IP 摄像机的数据。

录制到某些目标目录(主要在 NTFS 分区和/或 USB 设备上)不成功,因为

fopen_s(&fp, filename, "wb") == EACCES
GetLastError()==ERROR_FILE_NOT_FOUND or ERROR_ACCESS_DENIED.

实际上目标目录下没有这样的文件。禁用IE(11)中的“保护模式”,就不会有这样的问题了。

我读过这篇文章

从 ActiveX 保存文件的技术(保护模式 IE)

和这篇文章

用户帐户控制兼容性的 Windows Vista 应用程序开发要求 https://msdn.microsoft.com/en-us/library/bb530410.aspx

但是我仍然有以下要求:

  1. 该插件保存实时流。首先保存到临时目录然后复制到目标目录不是用户友好的。
  2. 该插件通过按网页按钮来保存快照,并且不想每次都提示烦人的“另存为”对话框;
  3. 由于网络摄像机是 DHCP-ed,我不能简单地将其 IP 添加到“本地 Intranet 区域”以避免“保护模式”。

由于插件有一个安装程序,它被授予管理员权限。在安装过程中可以进行任何修改。

有什么方法可以解决这个问题吗?或者由于安全问题,要求无效?

4

1 回答 1

0

你在这里只有两个选择:

1)你可以写入你的控件有权限的位置,比如AppData/LocalLow

2) 您可以启动另一个 .exe 文件,该文件已被赋予提升策略,允许它以中等完整性模式从低完整性进程启动并让它进行保存。它仍将仅限于用户帐户可以写入的地方。

第一个是迄今为止最简单的,但正如您所说,它有时会导致保存位置不太理想。第二个工作量更大,需要跨进程通信并确保正确清理进程,但它确实允许您注册。

微软网站

为了说明,以下策略会默默地将名为 contoso.exe 的虚构代理提升到中等完整性级别。

HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Internet Explorer
Low Rights
ElevationPolicy
{0002df01-0000-0000-c000-000000000046}
AppName="Contoso.exe"
AppPath="C:\%USERPROFILE%\Application Data\Contoso"
Policy=(DWORD) 00000003

注意 出于安全原因,处于保护模式的 Internet Explorer 会忽略更改 createProcess、createProcessAsUser 和相关函数的工作目录的参数。如果您的进程必须接受工作目录参数,请使用逻辑 XOR 操作来0x80000为您的应用程序添加提升策略的 Policy 设置的值。请注意,这可能会产生安全风险;因此,强烈反对这样做。

如果 Microsoft 确定某个应用程序存在漏洞并对最终用户构成危险,Microsoft 保留随时从提升策略中删除该应用程序的权利。

您还可以创建代理进程来访问高完整性对象。有关描述如何以高完整性级别启动代理进程的信息,请参阅开发人员最佳实践的管理用户应用程序指南部分和最低特权环境中的应用程序指南。请注意,您不需要创建提升策略,因为 UAC 将处理提升。

如果您现有的扩展程序使用 rundll32.exe 来托管 DLL 库,则可以通过将库的文件名添加到以下键来静默启动具有低完整性的 rundll32.exe 进程。

于 2015-10-30T18:11:11.330 回答