Поделиться через


структура RPC_CALL_ATTRIBUTES_V2_A (rpcasync.h)

Структура RPC_CALL_ATTRIBUTES_V2 предоставляет параметры для функции RpcServerInqCallAttributes . Версия 2 указывает поддержку локальных адресов и идентификаторов клиентских процессов.

Синтаксис

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 , в который была передана эта структура.

Значение Значение
RPC_QUERY_SERVER_PRINCIPAL_NAME
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент ServerPrincipalName этой структуры.
RPC_QUERY_CLIENT_PRINCIPAL_NAME
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент ClientPrincipalName этой структуры.
RPC_QUERY_CALL_LOCAL_ADDRESS
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент CallLocalAddress этой структуры.
RPC_QUERY_CLIENT_PID
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент ClientPID этой структуры. Этот флаг поддерживается только для последовательности протокола ncalrpc.

ServerPrincipalNameBufferLength

Длина serverPrincipalName в байтах. Если значение недостаточно, Значение ServerPrincipalName не изменяется, а ServerPrincipalNameBufferLength указывает необходимую длину буфера, включая завершающий символ NULL , и возвращается ERROR_MORE_DATA. Если serverPrincipalNameBufferLength длиннее, чем необходимо, при возврате ему присваивается фактическая используемая длина в байтах, включая завершающий символ NULL . См. заметки.

Если последовательность протоколов не поддерживает получение имени участника-сервера, значение ServerPrincipalNameBufferLength при возврате равно нулю, а буфер, на который указывает ServerPrincipalName , не изменяется. Windows XP: Только группа последовательностей протоколов 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 , не изменяется. Windows XP: Только последовательность протокола 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, см. в разделе Authentication-Level Constants (Константы уровня проверки подлинности).

AuthenticationService

Служба проверки подлинности или поставщик безопасности, используемая для удаленного вызова процедуры.

NullSession

Указывает, используется ли сеанс NULL . Ноль означает, что вызов не выполняется через сеанс NULL ; любое другое значение указывает на сеанс null .

KernelModeCaller

ProtocolSequence

Константы, указывающие последовательность протокола, по которой был выполнен вызов.

IsClientLocal

Значение перечисления RpcCallClientLocality, указывающее расположение клиента (локальное, удаленное или неизвестное).

ClientPID

Дескриптор, содержащий идентификатор процесса вызывающего клиента. Это поле поддерживается только для последовательности протокола ncalrpc и заполняется только в том случае, если в параметре Flags указано RPC_QUERY_CLIENT_PID.

CallStatus

Битовое поле, указывающее состояние вызова RPC.

Значение Значение
RPC_CALL_STATUS_IN_PROGRESS
0x01
Вызов выполняется.
RPC_CALL_STATUS_CANCELLED
0x02
Звонок был отменен.
RPC_CALL_STATUS_DISCONNECTED
0x03
Клиент отключен.

CallType

Значение перечисления RpcCallType, указывающее тип вызова RPC.

CallLocalAddress

Указатель на структуру RPC_CALL_LOCAL_ADDRESS , содержащую сведения о локальном адресе, по которому был выполнен вызов, на сервере.

Это поле не должно иметь значение NULL , если RPC_QUERY_CALL_LOCAL_ADDRESS указано в разделе Флаги; в противном случае возвращается RPC_S_INVALID_ARG.

Если буфера, предоставленного приложением, недостаточно, RpcServerInqCallAttributes возвращает ERROR_MORE_DATA.

OpNum

Значение opnum, связанное с вызовом в соответствующем IDL-файле.

InterfaceUuid

UUID интерфейса, на котором выполняется вызов.

Комментарии

Структура RPC_CALL_ATTRIBUTES использует схему управления версиями, чтобы включить функцию RpcServerInqCallAttributes для включения новых возможностей без необходимости вводить новые функции с идентификаторами суффикса. Например, вторая версия RPC_CALL_ATTRIBUTES, определяемая простым #define в заголовке, может добавлять новые члены, чтобы упростить новые функции, встроенные в будущие версии функции RpcServerInqCallAttributes , без необходимости выпускать соответствующую альтернативную функцию.

Элемент Version указывает версию структуры RPC_CALL_ATTRIBUTES (в настоящее время RPC_CALL_ATTRIBUTES_V1 или RPC_CALL_ATTRIBUTES_V2), используемой вызывающим приложением. Эта идентификация позволяет среде выполнения RPC обеспечить обратную совместимость приложений, не использующих самую последнюю версию структуры.

Пока процесс не завершится, ClientPID однозначно идентифицирует этот процесс на клиенте. После завершения процесса новые процессы могут использовать идентификатор процесса, указанный параметром ClientPID .

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Верхняя часть rpcasync.h (включая Rpc.h)

См. также раздел

Атрибуты RpcServerInqCallAttributes