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


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

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

Синтаксис

typedef struct tagRPC_CALL_ATTRIBUTES_V2_W {
  unsigned int              Version;
  unsigned long             Flags;
  unsigned long             ServerPrincipalNameBufferLength;
  unsigned short            *ServerPrincipalName;
  unsigned long             ClientPrincipalNameBufferLength;
  unsigned short            *ClientPrincipalName;
  unsigned long             AuthenticationLevel;
  unsigned long             AuthenticationService;
  BOOL                      NullSession;
  BOOL                      KernelModeCaller;
  unsigned long             ProtocolSequence;
  RpcCallClientLocality     IsClientLocal;
  HANDLE                    ClientPID;
  unsigned long             CallStatus;
  RpcCallType               CallType;
  RPC_CALL_LOCAL_ADDRESS_V1 *CallLocalAddress;
  unsigned short            OpNum;
  UUID                      InterfaceUuid;
} RPC_CALL_ATTRIBUTES_V2_W;

Члены

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, см. в разделе Константы уровня проверки подлинности.

AuthenticationService

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

NullSession

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

KernelModeCaller

ProtocolSequence

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

IsClientLocal

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

ClientPID

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

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