RPC_CALL_ATTRIBUTES_V2_A 结构 (rpcasync.h)
RPC_CALL_ATTRIBUTES_V2 结构为 RpcServerInqCallAttributes 函数提供参数。 版本 2 指定对本地地址和客户端进程 ID 的支持。
语法
typedef struct tagRPC_CALL_ATTRIBUTES_V2_A {
unsigned int Version;
unsigned long Flags;
unsigned long ServerPrincipalNameBufferLength;
unsigned char *ServerPrincipalName;
unsigned long ClientPrincipalNameBufferLength;
unsigned char *ClientPrincipalName;
unsigned long AuthenticationLevel;
unsigned long AuthenticationService;
BOOL NullSession;
BOOL KernelModeCaller;
unsigned long ProtocolSequence;
unsigned long IsClientLocal;
HANDLE ClientPID;
unsigned long CallStatus;
RpcCallType CallType;
RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
unsigned short OpNum;
UUID InterfaceUuid;
} RPC_CALL_ATTRIBUTES_V2_A;
成员
Version
RPC_CALL_ATTRIBUTES 结构的版本。 对于此结构,此值必须设置为 2。
Flags
指示应通过调用此结构传递到的 RpcServerInqCallAttributes 来填充此结构的哪些成员的位掩码标志。
值 | 含义 |
---|---|
|
指示 RpcServerInqCallAttributes 应填充此结构的 ServerPrincipalName 成员。 |
|
指示 RpcServerInqCallAttributes 应填充此结构的 ClientPrincipalName 成员。 |
|
指示 RpcServerInqCallAttributes 应填充此结构的 CallLocalAddress 成员。 |
|
指示 RpcServerInqCallAttributes 应填充此结构的 ClientPID 成员。 仅 ncalrpc 协议序列支持此标志。 |
ServerPrincipalNameBufferLength
ServerPrincipalName 的长度(以字节为单位)。 如果不足, 则 ServerPrincipalName 保持不变, ServerPrincipalNameBufferLength 指示所需的缓冲区长度(包括终止 NULL 字符),并返回ERROR_MORE_DATA。 如果 ServerPrincipalNameBufferLength 超过必要长度,则返回时,它会设置为使用的实际长度(以字节为单位),包括终止 NULL 字符。 请参阅“备注”。
如果协议序列不支持检索服务器主体名称, 则 ServerPrincipalNameBufferLength 在返回时设置为零, ServerPrincipalName 指向的缓冲区未修改。 Windowsxp: 只有 ncacn_* 组协议序列支持检索服务器主体名称。
如果未指定RPC_QUERY_SERVER_PRINCIPAL_NAME标志,则忽略 ServerPrincipalNameBufferLength 。 如果 ServerPrincipalNameBufferLength 为非零值, ServerPrincipalName 为 NULL,则返回ERROR_INVALID_PARAMETER。
ServerPrincipalName
指向服务器主体名称的指针(如果在 标志 中请求,并且受协议序列支持)。 除 RPC_S_OK 或 ERROR_MORE_DATA 以外的任何返回值时, ServerPrincipalName 的内容是未定义且可能已被 RPC 修改。
ClientPrincipalNameBufferLength
ClientPrincipalName 指向的缓冲区的长度(以字节为单位)。 如果不足, 则 ClientPrincipalName 保持不变, ClientPrincipalNameBufferLength 指示所需的缓冲区长度(包括终止 NULL 字符),并返回ERROR_MORE_DATA。 如果 ClientPrincipalNameBufferLength 超过必要长度,则返回时,它会设置为使用的实际长度(以字节为单位),包括终止 NULL 字符。
如果协议序列不支持检索客户端主体名称, 则 ClientPrincipalNameBufferLength 在返回时设置为零,并且 ClientPrincipalName 指向的缓冲区未修改。 Windowsxp: 只有 ncalrpc 协议序列支持检索客户端主体名称。
如果未指定 RPC_QUERY_CLIENT_PRINCIPAL_NAME 标志,则会忽略 ClientPrincipalNameBufferLength 。 如果 ClientPrincipalNameBufferLength 为非零值, ClientPrincipalName 为 NULL,则返回ERROR_INVALID_PARAMETER。
ClientPrincipalName
指向客户端主体名称的指针(如果在 Flags 成员中请求并受协议序列支持)。 在除 RPC_S_OK 或 ERROR_MORE_DATA 以外的任何返回值时, ClientPrincipalName 的内容是未定义且可能已被 RPC 修改。
AuthenticationLevel
呼叫的身份验证级别。 有关 RPC 支持的身份验证级别,请参阅 身份验证级别常量 。
AuthenticationService
身份验证服务或安全提供程序,用于进行远程过程调用。
NullSession
指定是否使用 Null 会话。 零表示调用不是通过 Null 会话进行;任何其他值指示 Null 会话。
KernelModeCaller
ProtocolSequence
指示调用所基于的协议序列的常量。
IsClientLocal
RpcCallClientLocality 枚举值,该值指示客户端 (本地、远程或未知) 。
ClientPID
包含调用客户端的进程 ID 的句柄。 仅 ncalrpc 协议序列支持此字段,仅在 Flags 参数中指定RPC_QUERY_CLIENT_PID时才填充此字段。
CallStatus
指定 RPC 调用状态的位字段。
值 | 含义 |
---|---|
|
调用正在进行中。 |
|
呼叫已取消。 |
|
客户端已断开连接。 |
CallType
RpcCallType 枚举值,该值指示 RPC 调用的类型。
CallLocalAddress
指向 RPC_CALL_LOCAL_ADDRESS 结构的指针,该结构包含有关进行调用的本地地址的服务器的信息。
如果在 Flags 中指定了RPC_QUERY_CALL_LOCAL_ADDRESS,则此字段不得为 NULL。否则,返回RPC_S_INVALID_ARG。
如果应用程序提供的缓冲区不足, RpcServerInqCallAttributes 将返回ERROR_MORE_DATA。
OpNum
与相应 IDL 文件中的调用关联的 opnum 值。
InterfaceUuid
进行调用的接口 UUID。
注解
RPC_CALL_ATTRIBUTES 结构使用版本控制方案,使 RpcServerInqCallAttributes 函数能够合并新功能,而无需引入具有后缀标识符的新函数。 例如, RPC_CALL_ATTRIBUTES的第二个版本(在标头中用简单 #define 标识)可以添加新成员,以促进内置到 RpcServerInqCallAttributes 函数的未来版本中的新功能,而无需发布相应的替代函数。
Version 成员指示调用应用程序当前RPC_CALL_ATTRIBUTES_V1或RPC_CALL_ATTRIBUTES_V2) (RPC_CALL_ATTRIBUTES结构的版本。 此标识使 RPC 运行时能够为不使用最新版本结构的应用程序提供向后兼容性。
在进程终止之前, ClientPID 在客户端上唯一标识该进程。 当进程终止时,新进程可以使用 ClientPID 指定的进程 ID。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
标头 | rpcasync.h (包括 Rpc.h) |