windows 如何创建自己的URL协议?(例如so://...)[已关闭]

xiozqbni  于 2023-01-31  发布在  Windows
关注(0)|答案(8)|浏览(178)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题有关,您可以留下评论,说明在何处可以回答此问题。
5年前关闭。
Improve this question
我已经看到:

  • http://www...
  • ftp://blah.blah...
  • file://blah.blah...
  • unreal://blah.blah...
  • mailto://blah.blah...

您看到的http等的第一部分叫什么?
我能自己注册吗?

ac1kyiln

ac1kyiln1#

对于大多数微软产品(Internet Explorer,Office,“打开文件”对话框等),您可以在打开带有适当前缀的URI时运行register an application。这是更常见的explanation的一部分-如何实现您自己的协议。
对于Mozilla,解释为here,Java -here

o4tp2gmn

o4tp2gmn2#

这就是所谓的协议。唯一阻止你制定自己的协议的是你必须:
1.编写某种类型的浏览器或用户代理,它们可以理解该协议的URL形式和实际数据格式
1.编写理解该协议的服务器
1.最好有一个协议规范,以便浏览器和服务器可以继续一起工作。
Windows使#1变得非常简单,在许多情况下,这就是你实际需要的全部。
Registering an Application to a URL Protocol

vxqlmq5t

vxqlmq5t3#

第一部分叫做协议,是的,你可以注册你自己的协议。在Windows上(我假设你是用C#标记来注册的a-对不起Mono的粉丝们),它是via the registry

utugiqy6

utugiqy64#

你真的不需要注册,我见过很多程序,比如emule,创建自己的协议规范(我想应该是这么叫的)。之后,你基本上只需要在注册表中设置一些值来决定哪个程序处理那个协议。我不确定是否有任何协议说明符的官方注册表。如果你想让人们从他们的浏览器打开你的应用程序,你真的不能阻止你为你自己的应用程序创建你自己的协议说明符。

kmbjn2e3

kmbjn2e35#

具有HTTP://FTP://等的部分称为URI Schemes
您可以通过注册表注册自己的。

HKEY_CLASSES_ROOT/
  your-protocol-name/
    (Default)    "URL:your-protocol-name Protocol"
    URL Protocol ""
    shell/
      open/
        command/
          (Default) PathToExecutable

来源:https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtmlhttp://msdn.microsoft.com/en-us/library/aa767914(v=vs.85).aspx

m1m5dgzv

m1m5dgzv6#

打开记事本并将下面的代码粘贴到其中。将"YourApp"更改为您的应用程序名称。
将其保存到YourApp.reg并在资源管理器中单击执行。
就是这样!

REGEDIT4

[HKEY_CLASSES_ROOT\YourApp]
@="URL:YourApp Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\YourApp\DefaultIcon]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\""

[HKEY_CLASSES_ROOT\YourApp\shell]

[HKEY_CLASSES_ROOT\YourApp\shell\open]

[HKEY_CLASSES_ROOT\YourApp\shell\open\command]
@="\"C:\\Program Files\\YourApp\\YourApp.exe\" \"%1\" \"%2\" \"%3\" \"%4\" \"%5\" \"%6\" \"%7\" \"%8\" \"%9\""
svgewumm

svgewumm7#

这对于每个浏览器来说都是不同的,在IE和Windows中,你需要创建他们所谓的可插入协议处理程序。
基本步骤如下:
1.实现IInternetProtocol接口。
1.实现IInternet协议根接口。
1.实现IClassFactory接口。
1.可选。实现IInternetProtocolInfo接口。事务处理程序提供对HTTP协议的支持。
1.如果实现了IInternetProtocolInfo,请提供对PARSE_SECURITY_URL和PARSE_SECURITY_DOMAIN的支持,以便URL安全区域管理器可以正确处理安全性。请编写协议处理程序的代码。
1.提供对BINDF_NO_UI和BINDF_静音操作的支持。
1.在注册表中的HKEY_CLASSES_ROOT\PROTOCOLS\Handler下为协议处理程序添加子项。
1.在子项下创建一个字符串值CLSID,并将该字符串设置为协议处理程序的CLSID。
关于windows端的更多细节请参见About Asynchronous Pluggable Protocols on MSDN,windows SDK中也有一个示例。
快速google一下,就会看到这篇关于codeproject的文章:http://www.codeproject.com/KB/IP/DataProtocol.aspx.
最后,作为一名安全人员,我必须指出,这段代码需要经过严格的测试,因为要可靠地完成它,就不能使用托管代码,而必须使用C++(我想你可以使用VB6)。你应该考虑你是否真的需要这样做,如果你需要,仔细地设计它并安全地编码它。攻击者可以通过在页面上简单地包含一个链接来轻易地控制传递给你的内容。例如,如果你有一个简单的缓冲区溢出,那么没有人会更好地这样做:<a href="custom:foooo{insert long string for buffer overflow here}"> Click me for free porn</a>
强烈考虑使用strsafe和VC8及以上版本编译器中包含的新的安全CRT方法。如果你不知道我在说什么,请参阅http://blogs.msdn.com/michael_howard/archive/2006/02/27/540123.aspx

kxeu7u2r

kxeu7u2r8#

下面是注册的URI schemes的列表。每一个都有一个RFC --定义它的文档,它几乎是一个标准。RFC告诉开发人员新的应用程序(例如浏览器、FTP客户端等)需要支持的内容。如果您需要一个新的基本层协议,你可以使用一个未注册的协议。2其他的答案会告诉你怎么做。3请记住你可以用现有的协议做很多事情,从而获得它们现有的实现。

相关问题