如何在 Visual Basic 中使用 CoSetProxyBlanket 函数

文章翻译 文章翻译
文章编号: 249636 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

概要

CoSetProxyBlanket 函数 Microsoft Visual Basic 中可用于设置给定对象的安全值。此函数可以使用 CoInitializeSecurity 函数不能用于某些 Visual Basic 应用程序如 ActiveX 服务器的位置。

更多信息

在某些的情况下,就需要在客户端中定义一个分布式版本的组件对象模型 (DCOM) 连接的安全设置。如果客户端是一个 标准 EXE,可以使用 CoInitializeSecurity API 函数。但是,如果需要进行实例化该对象内一个.dll 或.ocx 文件 (例如对于在 Microsoft Internet Explorer 如浏览器) 中的另一个进程内运行 CoInitializeSecurity 不能调用进程的最开始处。在这种情况下,应使用 CoSetProxyBlanket 函数。

要考虑的一个重要的一点是 CoSetProxyBlanket 函数在接口级别都设置了安全性。您需要首先 IUnknown 接口上设置安全性,以便 释放 方法可调用并释放该对象。此外,从 IUnknown 开始 QueryInterface 方法可以调用而不会出现问题。一旦您为 IUnknown,查询的默认接口设置安全性,并对其应用 CoSetProxyBlanket。此位置可以调用其他方法,而不会出现问题。

示例代码

  1. 将下面的常量和 CoSetProxyBlanket 函数声明复制到标准 (BAS) 模块:
    Option Explicit
    
    ' Authentication service provider constants
    ' The default should be used.
    Public Const RPC_C_AUTHN_DEFAULT As Long = &HFFFFFFFF
    Public Const RPC_C_AUTHN_NONE As Long = 0
    Public Const RPC_C_AUTHN_WINNT As Long = 10
    
    ' Authorization Services
    Public Const RPC_C_AUTHZ_DEFAULT As Long = &HFFFFFFFF
    Public Const RPC_C_AUTHZ_NONE As Long = 0
    Public Const RPC_C_AUTHZ_NAME As Long = 1
    Public Const RPC_C_AUTHZ_DCE As Long = 2
    
    ' Authentication level constants
    Public Const RPC_C_AUTHN_LEVEL_DEFAULT As Long = 0
    Public Const RPC_C_AUTHN_LEVEL_NONE As Long = 1
    Public Const RPC_C_AUTHN_LEVEL_CONNECT As Long = 2
    Public Const RPC_C_AUTHN_LEVEL_CALL As Long = 3
    Public Const RPC_C_AUTHN_LEVEL_PKT As Long = 4
    Public Const RPC_C_AUTHN_LEVEL_PKT_INTEGRITY As Long = 5
    Public Const RPC_C_AUTHN_LEVEL_PKT_PRIVACY As Long = 6
    
    ' Impersonation level constants
    Public Const RPC_C_IMP_LEVEL_DEFAULT As Long = 0
    Public Const RPC_C_IMP_LEVEL_ANONYMOUS As Long = 1
    Public Const RPC_C_IMP_LEVEL_IDENTIFY As Long = 2
    Public Const RPC_C_IMP_LEVEL_IMPERSONATE As Long = 3
    Public Const RPC_C_IMP_LEVEL_DELEGATE As Long = 4
    
    ' Constants for the capabilities
    Public Const EOAC_DEFAULT As Long = &H800
    Public Const API_NULL As Long = 0
    Public Const S_OK As Long = 0
    Public Const EOAC_NONE As Long = &H0
    Public Const EOAC_MUTUAL_AUTH As Long = &H1
    Public Const EOAC_CLOAKING As Long = &H10
    Public Const EOAC_SECURE_REFS As Long = &H2
    Public Const EOAC_ACCESS_CONTROL As Long = &H4
    Public Const EOAC_APPID As Long = &H8
    
    Public Const COLE_DEFAULT_PRINCIPAL As Long = &HFFFFFFFF
    
    ' Function Declaration
    Public Declare Function CoSetProxyBlanket Lib "OLE32.DLL" ( _
      ByVal pSD As Object, _
      ByVal dwAuthnSvc As Long, _
      ByVal dwAuthzSvc As Long, _
      ByVal pServerPrincName As Long, _
      ByVal dwAuthnlevel As Long, _
      ByVal dwImpLevel As Long, _
      ByVal pAuthInfo As Long, _
      ByVal dwCapabilities As Long _
      ) As Long
    
    ' Function Declaration for IUnknown
    ' You must have two separate declarations for IUnknown and IDispatch.
    ' Otherwise, Visual Basic will internally query for the declared interface.
    Public Declare Function CoSetProxyBlanketUnk Lib "OLE32.dll" Alias "CoSetProxyBlanket" ( _
      ByVal pSD As stdole.IUnknown, _
      ByVal dwAuthnSvc As Long, _
      ByVal dwAuthzSvc As Long, _
      ByVal pServerPrincName As Long, _
      ByVal dwAuthnlevel As Long, _
      ByVal dwImpLevel As Long, _
      ByVal pAuthInfo As Long, _
      ByVal dwCapabilities As Long _
      ) As Long
    
    					
  2. 在代码的服务器对象声明的位置部分,使用 $ 对象 关键字。如果希望 IUnknown 和 IDispatch 以外的接口上设置 CoSetProxyBlanket 您需要使用 Microsoft Visual c + + 或有一个单独的 CoSetProxyBlanket 声明。
    Dim MyObj As Object
    					
    instead of:
    Dim MyObj as New MyLib.MyClass
    					
  3. 在您的代码的实例化该对象的位置部分,使用 $ CreateObject 函数。该对象进行实例化后立即, 调用 CoSetProxyBlanket 函数,如下所示。若要将特定的身份验证参数 CoSetProxyBlanket 中您需要替换为所需的常数的默认设置。
        Dim MyObj As Object
        Dim MyUnk As stdole.IUnknown
        Dim hr As Long
    
        ' Instantiate the object that is requesting the IUnknown interface.
        Set MyUnk = CreateObject("MyLib.MyClass")
        
         ' Set the security on IUnknown.
        hr = CoSetProxyBlanketUnk(MyUnk, _
            RPC_C_AUTHN_DEFAULT, _
            RPC_C_AUTHZ_DEFAULT, _
            COLE_DEFAULT_PRINCIPAL, _
            RPC_C_AUTHN_LEVEL_DEFAULT, _
            RPC_C_IMP_LEVEL_DEFAULT, _
            API_NULL, _
            EOAC_DEFAULT)
    
        If (S_OK <> hr) Then
            MsgBox "CoSetProxyBlanket on IUnknown failed with error code: " _
            & hr & " 0x", vbCritical, "CoSetProxyBlanket Failure"
            Exit Sub ' or Exit Function
        End If
        
         ' Query for the default interface.
        Set MyObj = MyUnk
    
         ' Set security on the default interface.
        hr = CoSetProxyBlanket(MyObj, _
            RPC_C_AUTHN_DEFAULT, _
            RPC_C_AUTHZ_DEFAULT, _
            COLE_DEFAULT_PRINCIPAL, _
            RPC_C_AUTHN_LEVEL_DEFAULT, _
            RPC_C_IMP_LEVEL_DEFAULT, _
            EOAC_DEFAULT, _
            EOAC_NONE)
    
        If (S_OK <> hr) Then
            MsgBox "CoSetProxyBlanket failed with error code: " & hr & " 0x" _
            , vbCritical, "CoSetProxyBlanket Failure"
            Exit Sub   ' or Exit Function
        End If
    
        ' You can now call IDispatch methods in your object.
        MyObj.MyMethod
    					

参考

有关保护代码中的对象的详细信息单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
239561如何在 Visual Basic 中使用 CoInitializeSecurity

属性

文章编号: 249636 - 最后修改: 2014年2月23日 - 修订: 4.0
这篇文章中的信息适用于:
  • Microsoft Visual Basic 5.0 学习版
  • Microsoft Visual Basic 6.0 学习版
  • Microsoft Visual Basic 5.0 专业版
  • Microsoft Visual Basic 6.0 专业版
  • Microsoft Visual Basic 5.0 企业版
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
关键字:?
kbnosurvey kbarchive kbmt kbapi kbhowto kbsecurity KB249636 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 249636
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com