对于非admin用户,本地主机上的HttpAddUrl失败
HttpAddUrl on localhost fails for non-admin users
使用Windows HTTP API,我在本地主机上运行HTTP文件服务器。
这涉及到调用HttpAddUrl(hRequestQueue, L"http://localhost:80/", NULL)
。
对于ERROR_ACCESS_DENIED
,除非用户以管理员身份运行应用程序,否则此操作将失败。我需要这个功能的用户谁没有管理权限。(用户运行本地主机服务器有什么问题?这只是为了用户自己)
我找到了Vista和XP的热修复程序,似乎旨在解决这个问题,但Windows 7没有。这篇文章暗示这个问题在Vista SP1中已经修复了,而我用的是Windows 7 SP1,它仍然是一个问题——修复没有在Windows 7中实现吗?
我还能做些什么让服务器为非管理员运行吗?
回答我自己的问题,但发现了一个解决方法:IANA端口号状态端口49152-65535是用于动态/私人目的。
HttpAddUrl
for localhost on a port>= 49152对于非管理员工作良好。必须在系统级配置,因为HTTP API使用HTTP。Sys(内核驱动程序)。您可以使用netsh.exe命令以管理员权限执行以授予对用户或应用程序的访问权限:
netsh http add urlacl url=http://localhost:80/ user=EVERYONE listen=yes delegate=no
端口1
- 1024
,默认情况下,需要管理访问。否则你会得到错误代码5 (ACCESS_DENIED
)。如果你试图绑定到 1024以上的端口,例如:
http://localhost:8080/
it 将用于非管理员用户。在你的情况下,你试图监听端口80
, HttpServer API限制管理员。
Windows中的一切都由访问控制列表(acl)控制;这包括使用HttpServer时允许的监听端口。
命令用于显示http使用的当前acl。>netsh http show urlacl
如果您这样做,您将看到许多已经由各种系统定义的acl。
Windows Communication Foundation
有一个ACL条目特别有趣:
Reserved URL : http://+:80/Temporary_Listen_Addresses/
User: Everyone
Listen: Yes
Delegate: No
SDDL: D:(A;;GX;;;WD)
每个人都被授予监听端口80
的权利,只要你住在:
/Temporary_Listen_Addresses/
这个url被Windows通信基金会(WCF)使用,它通常构造一个如下形式的url:
http://+:80/Temporary_Listen_Addresses/{random-guid}/
这也意味着,如果你真的想要80端口,你可以用你自己的端口侦听,例如:
http://localhost:80/Temporary_Listen_Addresses/64E3DCC6-FE47-4A86-87F4-48D2E1B44AE9/
只要没有人已经在使用80端口(我在看你的Skype!),你会得到它。
WinSock监听套接字不需要admin
虽然HttpServer API有acl控制对1024
以下端口的访问,但应该注意的是WinSock API没有限制。
如果您想使用WinSock在端口80
上打开侦听套接字,您不需要是管理员。只有Http
api有ACL
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 如何停止 CLR 主机?
- 如何强制 Thrift 仅接受来自本地主机的连接
- 库达如何将字符**从内核复制到主机
- Poco::Net::FTPClientSession 在 open() 方法上挂起 129 秒,如果 ftp 主机不存
- 如何在 2 台主机之间保持 UDP 套接字连接打开
- 如何在 cuda 中将 kd 树从主机复制到驱动程序
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- OpenCL 错误类在主机C++给出错误
- 来自复杂主机数据的阵列火力阵列
- 分离库的主机端和 CUDA 设备端版本
- 如何将HTTPS流量重定向到本地主机:443上的代理?
- Cesanta Mongoose - 连接到本地主机时出现问题
- C++ / Qt:如何检测主机名或IP地址何时引用当前系统?
- 如何实现从 Windows 脚本主机到脚本的事件调度
- 下载 GPU Mats 的矢量到主机
- 为什么主机不显示?(C++和代码处理器问题)
- 从C++中的主机名获取计算机名
- 如何使用PHP将上传到本地主机的一个html文件重定向到磁盘上的另一个html文档