我需要下载大型文件。为了加快传输速度,我在每个文件中使用多个连接。为了减少磁盘碎片,我将在创建文件后告诉windows文件的最终大小。为了避免在编写最后一个连接的第一个字节时初始化为零,我使用SetFileValidData将文件初始化为垃圾。问题是,SetFileValidData需要通常只有管理员才具有的SE_MANAGE_VOLUME_NAME特权。如何为未提升的用户(启用UAC的管理员用户)启用SE_MANAGE_VOLUME_NAME?
发布于 2016-05-17 00:13:37
您不能这样做;没有办法让运行的进程具有受限的令牌提升的权限。
考虑使用系统服务来执行提升的任务。至少有三种可能的办法:
请注意,在所有这些情况下,您还需要注意在文件上设置了哪些权限。
或者,根据协议的不同,您可以以不同的方式组织下载流。不要让每个流获取一个大的连续数据块,以便最后一个流写入文件的末尾,而是让每个流获取一系列较小的、分散的块,您可以顺序地将这些块写入文件。
(如果协议只允许每个连接获取一个连续的数据块,这可能是不可行的,因为为每个块建立一个新连接需要额外的开销。)
https://stackoverflow.com/questions/37259522
复制相似问题