如何向未提升权限的用户授予 Windows 权限?
How do I grant Windows privileges to unelevated users?
我需要下载大文件。为了加快传输速度,我对每个文件使用了多个连接。为了减少磁盘碎片,我告诉 windows 创建文件后的最终大小。为了避免在写入最后一个连接的第一个字节时进行零初始化,我使用 SetFileValidData 将文件初始化为垃圾。问题是 SetFileValidData 需要 SE_MANAGE_VOLUME_NAME 通常只有管理员才有的权限。如何为未提升权限的用户(启用了 UAC 的管理员用户)启用 SE_MANAGE_VOLUME_NAME?
你不能;无法为进程 运行 提供受限令牌提升权限。
考虑使用系统服务来执行提升的任务。至少有三种可能的方法:
从服务完成所有工作,包括下载。
从应用程序下载并使用共享内存提供数据给服务写入文件。
让服务创建并扩展文件,然后为应用程序提供只写句柄。 (它必须是只写的,以确保应用程序不会被诱骗读取绕过零初始化时留在文件中的潜在敏感数据。)
请注意,在所有这些情况下,您还需要注意对文件设置的权限。
或者,根据协议,您可以以不同方式组织下载流。不是每个流都获取一个大的顺序数据块,以便最后一个流写入文件末尾,而是让每个流获取一系列较小的散布块,您可以按顺序写入文件。
(如果协议只允许每个连接获取一个连续的数据块,这可能不可行,因为为每个块建立新连接的额外开销。)
我需要下载大文件。为了加快传输速度,我对每个文件使用了多个连接。为了减少磁盘碎片,我告诉 windows 创建文件后的最终大小。为了避免在写入最后一个连接的第一个字节时进行零初始化,我使用 SetFileValidData 将文件初始化为垃圾。问题是 SetFileValidData 需要 SE_MANAGE_VOLUME_NAME 通常只有管理员才有的权限。如何为未提升权限的用户(启用了 UAC 的管理员用户)启用 SE_MANAGE_VOLUME_NAME?
你不能;无法为进程 运行 提供受限令牌提升权限。
考虑使用系统服务来执行提升的任务。至少有三种可能的方法:
从服务完成所有工作,包括下载。
从应用程序下载并使用共享内存提供数据给服务写入文件。
让服务创建并扩展文件,然后为应用程序提供只写句柄。 (它必须是只写的,以确保应用程序不会被诱骗读取绕过零初始化时留在文件中的潜在敏感数据。)
请注意,在所有这些情况下,您还需要注意对文件设置的权限。
或者,根据协议,您可以以不同方式组织下载流。不是每个流都获取一个大的顺序数据块,以便最后一个流写入文件末尾,而是让每个流获取一系列较小的散布块,您可以按顺序写入文件。
(如果协议只允许每个连接获取一个连续的数据块,这可能不可行,因为为每个块建立新连接的额外开销。)