贝贝花花包包店,精品555皮具,钱夹,皮夹

字体: | 推荐给好友 上一篇 | 下一篇

Windows2000 服务器端应用程序开发设计指南-安全连接(2)

发布: 2008-5-01 14:24 | 作者: Jeffrey Richter Jaso | 来源: 网络转载 | 查看: 156次

lTargetDataRep参数指出当通讯跨越网路时,您要使用什么位元组排列方案?您可以选择SECURITY_NATIVE_DREP及SECURITY_NETWORK_DREP。假如您可以选择的话,应该一直使用SECURITY_NETWORK_DREP,以提升作业系统的沟通能力。pInput参数指出传递给InitializeSecurityContext的输入资讯。使用这些参数时,可以传递Blobs及其他资讯给这个函数。在您初始呼叫InitializeSecurity Context的时候,通常会传递NULL给您的输入缓冲器,因为您没有Blobs可以开始。这个处理程序与pOutput参数相似,它会传回将被传送到服务器软件的Blobs。我们会马上讨论更多输入及输出缓冲器的细节。

您应该传递指向CtxtHandle变数的指标给phNewContext参数。系统经由这个参数传回环境的handle给您。这个Ctxthandle与您经由连续呼叫函数中的phContext栏位所传递到InitializeSecurityContext的相同。

plContextAttr参数传回经由安全性提供者加于您的工作阶段属性,这将是您在lContextReq参数中要求的属性组合及提供者所加入的属性。您应该一直检查传进此参数的值,以保证您的工作阶段拥有软件的重要属性。ptsExpiration参数将会传回一个时戳,指出您正在建立的环境所代表之工作阶段的到期时间。

后续对InitializeSecurityContext的呼叫
 

截至目前为止,我们已经讨论了您的客户端第一次呼叫InitializeSecurityContext函数的情形。对此函数的后续呼叫,可以让您在程序中注意到某些差别:

  • phContext参数必须事先指向持有phNewContext参数所传回的环境handle变数。
     
  • SSPI在后续呼叫InitializeSecurityContext的时候,会忽略pszTargetName参数。
     
  • 您会经由pInput参数将从服务器接收的Blobs传递到InitializeSecurityContext中。
     
  • 经由plContextAttr参数传回服务器的环境需求,以及为了错误而结合您的客户端需求应该被检查。
     

您应该以函数的传回值做基础,做后续对InitializeSecurityContext的呼叫。假如它传回SEC_I_CONTINUE_NEEDED,表示您的客户端应该重覆执行并再次呼叫InitializeSecurityContext。当函数传回SEC_E_OK时,表示您已拥有一个完整的环境。其他的传回值则指出错误的情形。

输入及输出缓冲器
 

直到我们确定了输入及输出缓冲器的主题后,才算完成对InitializeSecurityContext的讨论部份。SSPI函数中可找到输入及输出缓冲器,它会出现在作为pInput及pOutput参数时。

在需要时,输入及输出缓冲器提供一个让软件把资讯传给安全性支援提供者的方法,以足够弹性的方式符合任何支援通讯协定的需求。这就是为什么它们会被多数从系统传送或接收资料之SSPI函数使用的原因。

让我来为您说明使用这些缓冲器的方法。首先建立一个您所定义之SecBuffer变数的阵列,并且把它们指向您分配的内存缓冲器;然后把阵列的位址加入SecBufferDesc类型的实体中,它会指出您的阵列中有多少缓冲器。以下是SecBufferDesc结构的定义:

typedef struct _SecBufferDesc {
ULONG ulVersion; // 设定成SECBUFFER_VERSION
ULONG cBuffers;
PSecBuffer pBuffers;
} SecBufferDesc;

以下是SecBuffer结构的定义:

typedef struct _SecBuffer {
ULONG cbBuffer;
ULONG BufferType;
PVOID pvBuffer;
} SecBuffer;

SecBuffer的cbBuffer成员指出由pvBuffer成员指向的内存区块大小。SecBufferDesc的ulVersion成员应该一直被设定成SECBUFFER_VERSION。


说明

对于输出缓冲器,您可以将cbBuffer设定为0,将pvBuffer设定为NULL,系统则会分配缓冲器给您,作为传回资料用。当您用完这个传回的缓冲器时,应把它们传递到FreeContextBuffer中并释放它们。您可以使用传递ISC_REQ_ALLOCATE_MEMORY环境需求给InitializeSecurityContext函数的方式要求系统分配缓冲器给您。


图12-5的说明显示了SecBuffer与SecBufferDesc之间的关系,以及您的实际内存区块与InitializeSecurityContext的内容。

 图12-5 SSPI输入及输出缓冲器

InitializeSecurityContext及缓冲器
 

TAG: Windows2000 安全连接 应用程序 开发 服务器端 设计指南

51/512345>
 

评分:0

我来说两句

seccode