структура 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 , в который была передана эта структура.
Значение | Значение |
---|---|
|
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент ServerPrincipalName этой структуры. |
|
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент ClientPrincipalName этой структуры. |
|
Указывает, что атрибуты RpcServerInqCallAttributes должны заполнять элемент CallLocalAddress этой структуры. |
|
Указывает, что атрибуты 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.
Значение | Значение |
---|---|
|
Вызов выполняется. |
|
Звонок был отменен. |
|
Клиент отключен. |
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) |