[MS-RPCE]:

Remote Procedure Call Protocol Extensions

Intellectual Property Rights Notice for Open Specifications Documentation

Technical Documentation. Microsoft publishes Open Specifications documentation for protocols, file formats, languages, standards as well as overviews of the interaction among each of these technologies.

Copyrights. This documentation is covered by Microsoft copyrights. Regardless of any other terms that are contained in the terms of use for the Microsoft website that hosts this documentation, you may make copies of it in order to develop implementations of the technologies described in the Open Specifications and may distribute portions of it in your implementations using these technologies or your documentation as necessary to properly document the implementation. You may also distribute in your implementation, with or without modification, any schema, IDL's, or code samples that are included in the documentation. This permission also applies to any documents that are referenced in the Open Specifications.

No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.

Patents. Microsoft has patents that may cover your implementations of the technologies described in the Open Specifications. Neither this notice nor Microsoft's delivery of the documentation grants any licenses under those or any other Microsoft patents. However, a given Open Specification may be covered by Microsoft Open Specification Promise or the Community Promise. If you would prefer a written license, or if the technologies described in the Open Specifications are not covered by the Open Specifications Promise or Community Promise, as applicable, patent licenses are available by contacting .

Trademarks. The names of companies and products contained in this documentation may be covered by trademarks or similar intellectual property rights. This notice does not grant any licenses under those rights. For a list of Microsoft trademarks, visit

Fictitious Names. The example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted in this documentation are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred.

Reservation of Rights. All other rights are reserved, and this notice does not grant any rights other than specifically described above, whether by implication, estoppel, or otherwise.

Tools. The Open Specifications do not require the use of Microsoft programming tools or programming environments in order for you to develop an implementation. If you have access to Microsoft programming tools and environments you are free to take advantage of them. Certain Open Specifications are intended for use in conjunction with publicly available standard specifications and network programming art, and assumes that the reader either is familiar with the aforementioned material or has immediate access to it.

Revision Summary

Date / Revision History / Revision Class / Comments
10/22/2006 / 0.01 / Version 0.01 release
1/19/2007 / 1.0 / Version 1.0 release
3/2/2007 / 1.1 / Version 1.1 release
4/3/2007 / 1.2 / Version 1.2 release
5/11/2007 / 1.3 / Version 1.3 release
6/1/2007 / 1.3.1 / Editorial / Changed language and formatting in the technical content.
7/3/2007 / 1.3.2 / Editorial / Changed language and formatting in the technical content.
7/20/2007 / 1.3.3 / Editorial / Changed language and formatting in the technical content.
8/10/2007 / 2.0 / Major / Added new content.
9/28/2007 / 2.0.1 / Editorial / Changed language and formatting in the technical content.
10/23/2007 / 2.1 / Minor / Added new content.
11/30/2007 / 2.1.1 / Editorial / Changed language and formatting in the technical content.
1/25/2008 / 2.1.2 / Editorial / Changed language and formatting in the technical content.
3/14/2008 / 2.1.3 / Editorial / Changed language and formatting in the technical content.
5/16/2008 / 2.1.4 / Editorial / Changed language and formatting in the technical content.
6/20/2008 / 3.0 / Major / Updated and revised the technical content.
7/25/2008 / 3.1 / Minor / Clarified the meaning of the technical content.
8/29/2008 / 3.2 / Minor / Clarified the meaning of the technical content.
10/24/2008 / 4.0 / Major / Updated and revised the technical content.
12/5/2008 / 5.0 / Major / Updated and revised the technical content.
1/16/2009 / 6.0 / Major / Updated and revised the technical content.
2/27/2009 / 7.0 / Major / Updated and revised the technical content.
4/10/2009 / 8.0 / Major / Updated and revised the technical content.
5/22/2009 / 8.0.1 / Editorial / Changed language and formatting in the technical content.
7/2/2009 / 9.0 / Major / Updated and revised the technical content.
8/14/2009 / 10.0 / Major / Updated and revised the technical content.
9/25/2009 / 11.0 / Major / Updated and revised the technical content.
11/6/2009 / 11.0.1 / Editorial / Changed language and formatting in the technical content.
12/18/2009 / 12.0 / Major / Updated and revised the technical content.
1/29/2010 / 12.1 / Minor / Clarified the meaning of the technical content.
3/12/2010 / 13.0 / Major / Updated and revised the technical content.
4/23/2010 / 14.0 / Major / Updated and revised the technical content.
6/4/2010 / 15.0 / Major / Updated and revised the technical content.
7/16/2010 / 16.0 / Major / Updated and revised the technical content.
8/27/2010 / 17.0 / Major / Updated and revised the technical content.
10/8/2010 / 18.0 / Major / Updated and revised the technical content.
11/19/2010 / 19.0 / Major / Updated and revised the technical content.
1/7/2011 / 20.0 / Major / Updated and revised the technical content.
2/11/2011 / 21.0 / Major / Updated and revised the technical content.
3/25/2011 / 22.0 / Major / Updated and revised the technical content.
5/6/2011 / 23.0 / Major / Updated and revised the technical content.
6/17/2011 / 23.1 / Minor / Clarified the meaning of the technical content.
9/23/2011 / 23.1 / None / No changes to the meaning, language, or formatting of the technical content.
12/16/2011 / 24.0 / Major / Updated and revised the technical content.
3/30/2012 / 24.0 / None / No changes to the meaning, language, or formatting of the technical content.
7/12/2012 / 24.1 / Minor / Clarified the meaning of the technical content.
10/25/2012 / 25.0 / Major / Updated and revised the technical content.
1/31/2013 / 25.0 / None / No changes to the meaning, language, or formatting of the technical content.
8/8/2013 / 26.0 / Major / Updated and revised the technical content.
11/14/2013 / 27.0 / Major / Updated and revised the technical content.
2/13/2014 / 27.0 / None / No changes to the meaning, language, or formatting of the technical content.
5/15/2014 / 27.0 / None / No changes to the meaning, language, or formatting of the technical content.
6/30/2015 / 28.0 / Major / Significantly changed the technical content.
10/16/2015 / 28.0 / No Change / No changes to the meaning, language, or formatting of the technical content.

Table of Contents

1Introduction

1.1Glossary

1.2References

1.2.1Normative References

1.2.2Informative References

1.3Overview

1.4Relationship to Other Protocols

1.5Prerequisites/Preconditions

1.6Applicability Statement

1.7Versioning and Capability Negotiation

1.8Vendor-Extensible Fields

1.9Standards Assignments

2Messages

2.1Transport

2.1.1Connection-Oriented RPC Transports

2.1.1.1TCP/IP (NCACN_IP_TCP)

2.1.1.2SMB (NCACN_NP)

2.1.1.3SPX (NCACN_SPX)

2.1.1.4NetBIOS over IPX (NCACN_NB_IPX)

2.1.1.5NetBIOS over TCP (NCACN_NB_TCP)

2.1.1.6NetBIOS over NetBEUI (NCACN_NB_NB)

2.1.1.7AppleTalk (NCACN_AT_DSP)

2.1.1.8RPC over HTTP (ncacn_http)

2.1.2Connectionless RPC Transports

2.1.2.1UDP (NCADG_IP_UDP)

2.1.2.2Internetwork Packet Exchange (IPX) (NCADG_IPX)

2.2Message Syntax

2.2.1Connection-Oriented and Connectionless RPC Messages

2.2.1.1Common Types and Constants

2.2.1.1.1RPC_IF_ID Type

2.2.1.1.2Extended Error Information Signature Value

2.2.1.1.3UUID Format

2.2.1.1.4Mapping of a Context Handle

2.2.1.1.5version_t

2.2.1.1.6p_rt_versions_supported_t

2.2.1.1.7Security Providers

2.2.1.1.8Authentication Levels

2.2.1.1.9Impersonation Level

2.2.1.1.10Transport-Layer Impersonation Level

2.2.1.2Endpoint Mapper Interface Extensions

2.2.1.2.1EPT_S_CANT_PERFORM_OP

2.2.1.2.2twr_t Type

2.2.1.2.3error_status Type

2.2.1.2.4ept_lookup Method

2.2.1.2.5ept_map Method

2.2.1.2.6ept_insert Method

2.2.1.2.7ept_delete Method

2.2.1.2.8ept_lookup_handle_free Method

2.2.1.2.9ept_inq_object Method

2.2.1.2.10ept_mgmt_delete Method

2.2.1.2.11ept_lookup_handle_t Type

2.2.1.3Management Interface Extensions

2.2.1.3.1rpc_if_id_vector_p_t Type

2.2.1.3.2StatisticsCount Type

2.2.1.3.3rpc_mgmt_inq_stats Method

2.2.1.3.4rpc_mgmt_inq_princ_name Method

2.2.2Connection-Oriented RPC Messages

2.2.2.1PDU Segments

2.2.2.2PFC_MAYBE Flag

2.2.2.3PFC_SUPPORT_HEADER_SIGN Flag

2.2.2.4negotiate_ack Member of p_cont_def_result_t Enumerator

2.2.2.5New Reasons for Bind Rejection

2.2.2.6alloc_hint Interpretation

2.2.2.7RPC_SYNTAX_IDENTIFIER

2.2.2.8rpc_fault Packet

2.2.2.9bind_nak Packet

2.2.2.10rpc_auth_3 PDU

2.2.2.11sec_trailer Structure

2.2.2.12Authentication Tokens

2.2.2.13Verification Trailer

2.2.2.13.1rpc_sec_verification_trailer

2.2.2.13.2rpc_sec_vt_bitmask

2.2.2.13.3rpc_sec_vt_header2

2.2.2.13.4rpc_sec_vt_pcontext

2.2.2.14BindTimeFeatureNegotiationBitmask

2.2.2.15BindTimeFeatureNegotiationResponseBitmask

2.2.3Connectionless RPC Messages

2.2.3.1PDU Segments

2.2.3.2Fault Packet

2.2.3.3PF2_UNRELATED Flag

2.2.3.4sec_trailer_cl Structure

2.2.3.5Authentication Tokens

2.2.3.6fack Packet

2.2.4IDL Syntax Extensions

2.2.4.1New Primitive Types

2.2.4.1.1wchar_t

2.2.4.1.2__int3264

2.2.4.1.3__int8, __int16, __int32, __int64

2.2.4.1.4int

2.2.4.2Callback

2.2.4.3Array of Context Handles

2.2.4.4Array of Strings

2.2.4.5ms_union

2.2.4.6v1_enum

2.2.4.7Expression in Conformant, Varying, and Union Description

2.2.4.8Unencapsulated Union

2.2.4.9pointer_default

2.2.4.10Pointer Attributes

2.2.4.11Extension to Enumerated Type

2.2.4.12NDR Transfer Syntax Identifier

2.2.4.13byte_count

2.2.4.14range

2.2.4.14.1range Attribute to Limit the Scope of Integral Values and the Number of Elements in Pipe Chunks

2.2.4.14.2range Attribute to Limit the Range of Maximum Count of Conformant Array and String Length

2.2.4.15strict_context_handle

2.2.4.16type_strict_context_handle

2.2.4.17disable_consistency_check

2.2.4.18Identifier Length

2.2.564-Bit Network Data Representation

2.2.5.1NDR64 Transfer Syntax Identifier

2.2.5.2NDR64 Simple Data Types

2.2.5.3NDR64 Constructed Data Types

2.2.5.3.1Representation Conventions

2.2.5.3.2Arrays

2.2.5.3.2.1Conformant Arrays

2.2.5.3.2.2Varying Arrays

2.2.5.3.2.3Conformant Varying Arrays

2.2.5.3.2.4Multidimensional Arrays

2.2.5.3.3Strings

2.2.5.3.3.1Varying Strings

2.2.5.3.3.2Conformant Varying Strings

2.2.5.3.4Structures

2.2.5.3.4.1Structure with Trailing Gap

2.2.5.3.4.2Structure Containing a Conformant Array

2.2.5.3.4.3Structure Containing a Conformant Varying Array

2.2.5.3.4.4Unions

2.2.5.3.4.5Pipes

2.2.5.3.5Pointers

2.2.5.3.5.1Embedded Reference Pointers

2.2.6Type Serialization Version 1

2.2.6.1Common Type Header for the Serialization Stream

2.2.6.2Private Header for Constructed Type

2.2.6.3Primitive Type Serialization

2.2.7Type Serialization Version 2

2.2.7.1Common Type Header

2.2.7.2Private Header

3Protocol Details

3.1Connectionless and Connection-Oriented RPC Protocol Details

3.1.1Common Details

3.1.1.1Abstract Data Model

3.1.1.1.1Security Context Handle

3.1.1.1.2Client Credential Handle

3.1.1.1.3Authorization Policy

3.1.1.2Timers

3.1.1.3Initialization

3.1.1.4Higher-Layer Triggered Events

3.1.1.4.1Causal Ordering

3.1.1.4.2Impersonate Client

3.1.1.5Message Processing Events and Sequencing Rules

3.1.1.5.1Processing Extensions Details

3.1.1.5.1.1Extension in NDR Transfer Syntax

3.1.1.5.1.1.1__int3264

3.1.1.5.1.1.2Binding Handle Extension

3.1.1.5.2Indicating Octet Stream as Invalid

3.1.1.5.3Strict NDR/NDR64 Data Consistency Check

3.1.1.5.3.1Correlation Validation

3.1.1.5.3.2Target Level 5.0

3.1.1.5.3.2.1Correlation Validation Checks

3.1.1.5.3.2.1.1Maximum Count of a Conformant Array or Conformant Varying Array Is Dictated by Another Parameter or Field of a Structure

3.1.1.5.3.2.1.2Maximum Count of a Conformant Structure or Conformant Varying Structure Is Dictated by a Field of the Structure

3.1.1.5.3.2.1.3Maximum Count of a Conformant Array or Conformant Varying Array Is a Constant Defined in IDL File

3.1.1.5.3.2.1.4Maximum Count of a Conformant Structure or Conformant Varying Structure Is a Constant

3.1.1.5.3.2.1.5first_is of a Varying Array or Conformant Varying Array Is Specified by Another Parameter or Field of a Structure

3.1.1.5.3.2.1.6first_is of a Conformant Varying Structure Is Specified by a Field in the Structure

3.1.1.5.3.2.1.7first_is of a Varying Array, Conformant Varying Array, or Conformant Varying Structure Is Not Present in IDL

3.1.1.5.3.2.1.8Actual Count of a Varying Array or Conformant Varying Array Is Dictated by Another Parameter or Field of a Structure

3.1.1.5.3.2.1.9Actual Count of a Conformant Varying Structure Is Dictated by a Field in the Structure

3.1.1.5.3.2.1.10Maximum Count of a Conformant and Varying String Is Dictated by Another Parameter or Field of a Structure

3.1.1.5.3.2.1.11Union Validation

3.1.1.5.3.2.1.12General Conformant Varying Validation

3.1.1.5.3.2.2Additional Limitations

3.1.1.5.3.2.2.1Limiting Maximum Count and Octet Stream Length

3.1.1.5.3.2.2.2strict_context_handle

3.1.1.5.3.2.2.3Rejecting Insufficient Octet Stream

3.1.1.5.3.2.2.4range Attribute to Limit the Scope of Integral Values and the Number of Elements in Pipe Chunks

3.1.1.5.3.2.2.5auto_handle Deprecation

3.1.1.5.3.2.2.6Ignoring Alignment Gap

3.1.1.5.3.3Target Level 6.0

3.1.1.5.3.3.1Additional Limitations

3.1.1.5.3.3.1.1type_strict_context_handle

3.1.1.5.3.3.1.2Unique or Full Pointer to Conformant Array Consistency Check

3.1.1.5.3.3.1.3range Attribute to Limit the Range of Maximum Count of Conformant Array and String Length

3.1.1.5.4Restriction on Remote Anonymous Calls

3.1.1.5.5Returning Win32 Error Values

3.1.1.6Timer Events

3.1.1.7Other Local Events

3.1.2Client Details

3.1.2.1Abstract Data Model

3.1.2.1.1Server Binding Handle

3.1.2.2Timers

3.1.2.3Initialization

3.1.2.4Higher-Layer Triggered Events

3.1.2.4.1Set Server Binding Handle Client Credentials

3.1.2.5Message Processing Events and Sequencing Rules

3.1.2.5.1Indicating Invalid Octet Stream on Client

3.1.2.6Timer Events

3.1.2.7Other Local Events

3.1.2.7.1Client Conformant Validation Processing for Response Data

3.1.2.7.1.1Maximum Count of a Conformant Array Is Dictated by Another Parameter or Field of a Structure

3.1.2.7.1.2Offset and/or Actual Count of a Conformant Array Is Dictated by Another Parameter or Field of a Structure

3.1.2.7.1.3Maximum Count of a Conformant and Varying String Is Dictated by Another Parameter

3.1.2.7.1.4Maximum Count of Conformant Varying String Is Not Dictated by Other Parameters or Fields

3.1.2.7.1.5Conformant Structure

3.1.2.7.1.6Conformant Varying Structure

3.1.3Server Details

3.1.3.1Abstract Data Model

3.1.3.1.1Table of Security Providers

3.1.3.2Timers

3.1.3.3Initialization

3.1.3.3.1Delay Use of Protocol Sequences on the Endpoint Mapper

3.1.3.4Higher-Layer Triggered Events

3.1.3.4.1Retrieve Protocol Sequence

3.1.3.4.2Adding Elements to the Table of Security Providers

3.1.3.5Message Processing Events and Sequencing Rules

3.1.3.5.1Server Stub Memory Allocation Limit

3.1.3.5.2Indicating Invalid Octet Stream in Server

3.1.3.5.3Interpretation of Tower Encodings

3.1.3.6Timer Events

3.1.3.7Other Local Events

3.2Connectionless RPC Protocol Details

3.2.1Common Details

3.2.1.1Abstract Data Model

3.2.1.1.1State Machines

3.2.1.1.2Send Window (Call)

3.2.1.1.3Receive Window (Call)

3.2.1.2Timers

3.2.1.3Initialization

3.2.1.4Higher-Layer Triggered Events

3.2.1.4.1Building and Using a Security Context

3.2.1.4.1.1Using a Security Context

3.2.1.4.2Callbacks

3.2.1.5Message Processing Events and Sequencing Rules

3.2.1.5.1Authentication

3.2.1.5.2Overlapped Calls

3.2.1.5.3Sliding Window Algorithm

3.2.1.6Timer Events

3.2.1.7Other Local Events

3.2.2Client Details

3.2.2.1Abstract Data Model

3.2.2.1.1Supports PF2_Unrelated Flag

3.2.2.1.2Security Provider Identifier

3.2.2.1.3Authentication Level

3.2.2.1.4Activity

3.2.2.1.5Collection of Activities

3.2.2.1.6Collection of Inactive Activities

3.2.2.1.7Client Address Space

3.2.2.1.8Table of CASs

3.2.2.1.9Causal Ordering Flag

3.2.2.1.10Call

3.2.2.2Timers

3.2.2.2.1Packet Retransmission Timer

3.2.2.2.2Cancel Time-Out Timer

3.2.2.2.3Delayed-Ack Timer

3.2.2.2.4Context-Handle Keep-Alive Timer

3.2.2.2.5Inactive Activity Timer

3.2.2.3Initialization

3.2.2.3.1Create a Binding Handle

3.2.2.3.2Specify Security Settings

3.2.2.4Higher-Layer Triggered Events

3.2.2.4.1Make an RPC Method Call

3.2.2.4.1.1Find a CAS

3.2.2.4.1.2Find an Activity

3.2.2.4.1.3Find or Create a Security Context

3.2.2.4.1.4Create a Call

3.2.2.4.1.5Queuing Multiple Calls

3.2.2.4.2Cancel Requested

3.2.2.5Message Processing Events and Sequencing Rules

3.2.2.5.1REQUEST

3.2.2.5.2PING

3.2.2.5.3RESPONSE

3.2.2.5.4FAULT

3.2.2.5.5WORKING

3.2.2.5.6NOCALL

3.2.2.5.7REJECT

3.2.2.5.8ACK

3.2.2.5.9QUIT

3.2.2.5.10FACK

3.2.2.5.11QUACK

3.2.2.6Timer Events

3.2.2.6.1Inactive Activity Timer

3.2.2.6.2Context-Handle Keep-Alive Timer

3.2.2.6.3Delayed-Ack Timer

3.2.2.7Other Local Events

3.2.3Server Details

3.2.3.1Abstract Data Model

3.2.3.1.1Lowest-Allowed-Sequence Counter

3.2.3.1.2CAS UUID

3.2.3.1.3Lowest-Unused-Sequence Counter

3.2.3.1.4Table of Security Contexts

3.2.3.1.5Table of Activity IDs

3.2.3.1.6Table of Client Address Spaces

3.2.3.1.7Table of Active Calls per Activity

3.2.3.1.8Call

3.2.3.1.9CAS Context Handle List

3.2.3.1.10Callback State

3.2.3.2Timers

3.2.3.2.1Call Fragment Retransmission Timer

3.2.3.2.2Idle Scavenger Timer

3.2.3.3Initialization

3.2.3.4Higher-Layer Triggered Events

3.2.3.4.1Failure Semantics

3.2.3.4.2Retrieving Client Identity

3.2.3.4.3Context Handle Generation

3.2.3.5Message Processing Events and Sequencing Rules

3.2.3.5.1Failure Semantics

3.2.3.5.2Sequencing in Case of Errors

3.2.3.5.3Packet Processing

3.2.3.5.4REQUEST

3.2.3.5.4.1STATE_INIT

3.2.3.5.4.2STATE_RECEIVE_FRAGS

3.2.3.5.4.3STATE_WORKING

3.2.3.5.4.4STATE_SEND_FRAGS

3.2.3.5.5PING

3.2.3.5.5.1STATE_INIT

3.2.3.5.5.2STATE_RECEIVE_FRAGS

3.2.3.5.5.3STATE_WORKING

3.2.3.5.5.4STATE_SEND_FRAGS

3.2.3.5.6FACK

3.2.3.5.7QUIT

3.2.3.5.8ACK

3.2.3.6Timer Events

3.2.3.6.1Idle Scavenger Timer Expiry

3.2.3.7Other Local Events

3.3Connection-Oriented RPC Protocol Details

3.3.1Common Details

3.3.1.1Abstract Data Model

3.3.1.1.1Association

3.3.1.1.2Connection

3.3.1.1.3Connection Multiplex Flag

3.3.1.1.4List of Connections

3.3.1.1.5Table of Associations

3.3.1.1.6Table of Security Provider Info

3.3.1.2Timers

3.3.1.3Initialization

3.3.1.4Higher-Layer Triggered Events

3.3.1.4.1Context Handle Scope

3.3.1.5Message Processing Events and Sequencing Rules

3.3.1.5.1Protocol Version Number

3.3.1.5.2Building and Using a Security Context

3.3.1.5.2.1Building a Security Context

3.3.1.5.2.2Using a Security Context

3.3.1.5.3Bind Time Feature Negotiation

3.3.1.5.4Security Context Multiplexing

3.3.1.5.5Primary and Secondary Endpoint Address

3.3.1.5.6Presentation Context and Transfer Syntax Negotiation

3.3.1.5.7Adding a New RPC Transport Connection to an Association

3.3.1.5.8Multiplexed Connections

3.3.1.5.9Handling of Callbacks

3.3.1.5.10Keeping Connections Open After Client Sends an Orphaned PDU

3.3.1.6Timer Events

3.3.1.7Other Local Events

3.3.2Client Details

3.3.2.1Abstract Data Model

3.3.2.1.1Idle Connection Cleanup Enabled

3.3.2.1.2Association Active Context Handle Count

3.3.2.1.3Client Call

3.3.2.1.4Client Connection

3.3.2.1.5Server Binding Handle

3.3.2.2Timers

3.3.2.2.1Connection Time-Out Timer

3.3.2.2.2Communication Time-Out Timer

3.3.2.2.3Idle Connection Cleanup Timer

3.3.2.3Initialization

3.3.2.3.1Create a Binding Handle

3.3.2.3.2Specify Security Settings

3.3.2.4Higher-Layer Triggered Events

3.3.2.4.1Make a Remote Procedure Method Call

3.3.2.4.1.1Resolve the Binding Handle

3.3.2.4.1.2Find an Association and a Connection

3.3.2.4.1.3Build Security/Presentation Context

3.3.2.4.1.4Enable Idle Connection Timeout

3.3.2.4.2Release Context Handle

3.3.2.5Message Processing Events and Sequencing Rules

3.3.2.5.1rpc_fault PDU Processing Rules

3.3.2.5.2Handling Responses

3.3.2.6Timer Events

3.3.2.6.1Communication Time-Out Timer

3.3.2.6.2Idle Connection Cleanup Timer Expiry

3.3.2.6.3Endpoint Mapper Requests Security Information

3.3.2.7Other Local Events

3.3.2.7.1Transport Connection Time-Out

3.3.3Server Details

3.3.3.1Abstract Data Model

3.3.3.1.1Server Connection

3.3.3.1.2Number of Registered Interfaces

3.3.3.1.3Preferred Transfer Syntax

3.3.3.1.4Supported Transfer Syntaxes

3.3.3.1.5Server Call

3.3.3.2Timers

3.3.3.2.1Connection Time-Out

3.3.3.3Initialization

3.3.3.3.1Server-Side Initialization

3.3.3.3.1.1Registering a Protocol Sequence by a Higher-Level Protocol

3.3.3.3.1.2Registering an Interface by a Higher-Level Protocol

3.3.3.3.1.3Registering a Security Provider by a Higher-Level Protocol

3.3.3.3.1.4Registering a Dynamic Endpoint with Endpoint Mapper

3.3.3.3.1.5Start Listening

3.3.3.4Higher-Layer Triggered Events

3.3.3.4.1Failure Semantics

3.3.3.4.2shutdown PDUs

3.3.3.4.3Retrieve the Client Identity and Authorization Information

3.3.3.4.3.1Abstract Interface GetRpcImpersonationAccessToken

3.3.3.4.3.2Abstract Interface RpcImpersonateClient

3.3.3.4.3.3Abstract Interface RpcRevertToSelf

3.3.3.5Message Processing Events and Sequencing Rules

3.3.3.5.1Failure Semantics

3.3.3.5.2call_id Field Must Increase Monotonically

3.3.3.5.3Unknown Security Provider

3.3.3.5.4Maximum Server Input Data Size

3.3.3.5.5Limits of Presentation Contexts Negotiated

3.3.3.5.6Dropping Packets for Old Calls

3.3.3.5.7Handling Protocol Errors

3.3.3.5.8Sequencing in Case of Errors

3.3.3.6Timer Events

3.3.3.7Other Local Events

3.3.3.7.1Transport Connection Shutdown

3.3.3.7.2Initialize Server Call Object Reference

4Protocol Examples

4.1Packet Sequence for Secure, Connection-Oriented RPC Using Kerberos as Security Provider

4.2Packet Sequence for Secure, Connection-Oriented RPC Using NTLM as Security Provider

4.3Packet Sequence of the First Non-Idempotent RPCs of a Connectionless Activity

4.4Connectionless RPCs With and Without a Delayed ACK

4.5Connectionless Client Communicating with a Dynamic Server Endpoint

4.6Correlation Example

4.7UNICODE_STRING Representation

4.8Example of Structure with Trailing Gap in NDR64

5Security

5.1Security Considerations for Implementers

5.1.1Authentication Levels

5.1.2Preferred Security Providers

5.1.3Impersonation Levels

5.2Index of Security Parameters

6Appendix A: Full Remote Procedure Call Extensions IDL

7Appendix B: Product Behavior

8Appendix C: RPC Extensions Conformance to [C706] Requirements

8.1Local Interfaces

8.2Implicit and NULL Binding Handles

9Change Tracking

10Index

1Introduction

The Remote Procedure Call Protocol Extensions define a set of extensions to the DCE 1.1: Remote Procedure Call (RPC), as specified in [C706]. This specification assumes that the reader has familiarity with the concepts and requirements specified in [C706]. Concepts and requirements specified in [C706] are not repeated in this specification, except where required to specify how the definitions are extended. The reader may also find it helpful to be familiar with [C441], which describes the Generic Security Service API (GSS-API) Base.

Sections 1.8, 2, and 3 of this specification are normative and can contain the terms MAY, SHOULD, MUST, MUST NOT, and SHOULD NOT as defined in [RFC2119]. Sections 1.5 and 1.9 are also normative but do not contain those terms. All other sections and examples in this specification are informative.

1.1Glossary

The following terms are specific to this document:

64-bit Network Data Representation (NDR64): A specific instance of a remote procedure call (RPC) transfer syntax. For more information about RPC transfer syntax, see [C706] section 14.

activity: Used as specified in [C706] section 9.5.

application configuration file (ACF): A supplemental file that accompanies an Interface Definition Language (IDL) specification and is used to specify stub processing rules. For more information, see "The Attribute Configuration Source" in Part 2 of [C706] and [MS-RPCE].

authentication level: A numeric value indicating the level of authentication or message protection that remote procedure call (RPC) will apply to a specific message exchange. For more information, see [C706] section 13.1.2.1 and [MS-RPCE].

Authentication Service (AS): A service that issues ticket granting tickets (TGTs), which are used for authenticating principals within the realm or domain served by the Authentication Service.

authentication type: A numeric identifier that uniquely identifies a security provider.

big-endian: Multiple-byte values that are byte-ordered with the most significant byte stored in the memory location with the lowest address.

binary large object (BLOB): A discrete packet of data that is stored in a database and is treated as a sequence of uninterpreted bytes.

client address space (CAS): Used as specified in [C706] section 9.5.

connectionless RPC: An RPC protocol dialect built on top of an RPC transport that does not support connections. For more information, see [C706] section 12.

connection-oriented RPC: A remote procedure call (RPC) protocol dialect built on top of an RPC transport that supports connections. For more information, see [C706] section 12.

conversation callback: A remote procedure call (RPC) request/response message exchange initiated by an RPC Server and received by an RPC Client. The message exchange is internal to the connectionless RPC engine.

correlation: In an Interface Definition Language (IDL) file, the runtime properties of one argument dictate the allowed runtime properties of another argument.

deserialize: See unmarshal.

dynamic endpoint: A network-specific server address that is requested and assigned at run time. For more information, see [C706].

endpoint: A network-specific address of a remote procedure call (RPC) server process for remote procedure calls. The actual name and type of the endpoint depends on the RPC protocol sequence that is being used. For example, for RPC over TCP (RPC Protocol Sequence ncacn_ip_tcp), an endpoint might be TCP port 1025. For RPC over Server Message Block (RPC Protocol Sequence ncacn_np), an endpoint might be the name of a named pipe. For more information, see [C706].

endpoint mapper: A service on a remote procedure call (RPC) server that maintains a database of dynamic endpoints and allows clients to map an interface/object UUID pair to a local dynamic endpoint. For more information, see [C706].

globally unique identifier (GUID): A term used interchangeably with universally unique identifier (UUID) in Microsoft protocol technical documents (TDs). Interchanging the usage of these terms does not imply or require a specific algorithm or mechanism to generate the value. Specifically, the use of this term does not imply or require that the algorithms described in [RFC4122] or [C706] must be used for generating the GUID. See also universally unique identifier (UUID).