Hi Adam Togstad
I reviewed the public Microsoft documentation for RpcServerInqCallAttributes, RPC_CALL_ATTRIBUTES_V2, ClientPID, and RPC client impersonation.
The documented contract confirms that:
-
RpcServerInqCallAttributesallows an RPC server to obtain client security context attributes. -
RPC_CALL_ATTRIBUTES_V2adds support for client process IDs. - When
RPC_QUERY_CLIENT_PIDis requested,ClientPIDcontains the process ID of the calling client. - Retrieving
ClientPIDis supported only for thencalrpcprotocol sequence. - Microsoft explicitly documents that
ClientPIDuniquely identifies the process only until that process terminates, after which the PID can be reused by a new process.
References:
However, the public documentation reviewed does not define:
- When or where the PID is captured.
- Whether the PID is captured before enqueue or delivery.
- Whether the underlying identity is bound to an individual RPC message, call, connection, or binding.
- Whether RPC retains a process-object reference internally.
- Attribution behavior for proxies, forwarding, impersonation, duplicated binding handles, or connection reuse.
- A guarantee that the value identifies a non-reassignable process occurrence.
- The lifetime, uniqueness, generation point, or process-occurrence semantics of the referenced V3
ClientIdentifier.
Therefore, based only on the documented public contract, ClientPID should be treated as a process ID value, not as a documented retained process-object reference. Microsoft explicitly documents that the PID can be reused after the original process terminates.
This means that the available documentation does not establish the security guarantee required by your design: a non-reassignable reference, captured before enqueue and bound to the exact sending process occurrence for an individual RPC call.
RPC client impersonation is the documented mechanism for performing authorization under the client's security context. It may be appropriate when the requirement is to authorize the client security principal. However, the public impersonation documentation does not define it as proof of the exact physical process occurrence that sent a particular RPC message.
Reference:
Accordingly, the requested exact sender-occurrence guarantee cannot be confirmed from the public documentation reviewed. An authoritative confirmation from the Windows RPC product owner would be required before treating this behavior as a supported security boundary.I reviewed the public Microsoft documentation for RpcServerInqCallAttributes, RPC_CALL_ATTRIBUTES_V2, ClientPID, and RPC client impersonation.
The documented contract confirms that:
-
RpcServerInqCallAttributesallows an RPC server to obtain client security context attributes. -
RPC_CALL_ATTRIBUTES_V2adds support for client process IDs. - When
RPC_QUERY_CLIENT_PIDis requested,ClientPIDcontains the process ID of the calling client. - Retrieving
ClientPIDis supported only for thencalrpcprotocol sequence. - Microsoft explicitly documents that
ClientPIDuniquely identifies the process only until that process terminates, after which the PID can be reused by a new process.
References:
However, the public documentation reviewed does not define:
- When or where the PID is captured.
- Whether the PID is captured before enqueue or delivery.
- Whether the underlying identity is bound to an individual RPC message, call, connection, or binding.
- Whether RPC retains a process-object reference internally.
- Attribution behavior for proxies, forwarding, impersonation, duplicated binding handles, or connection reuse.
- A guarantee that the value identifies a non-reassignable process occurrence.
- The lifetime, uniqueness, generation point, or process-occurrence semantics of the referenced V3
ClientIdentifier.
Therefore, based only on the documented public contract, ClientPID should be treated as a process ID value, not as a documented retained process-object reference. Microsoft explicitly documents that the PID can be reused after the original process terminates.
This means that the available documentation does not establish the security guarantee required by your design: a non-reassignable reference, captured before enqueue and bound to the exact sending process occurrence for an individual RPC call.
RPC client impersonation is the documented mechanism for performing authorization under the client's security context. It may be appropriate when the requirement is to authorize the client security principal. However, the public impersonation documentation does not define it as proof of the exact physical process occurrence that sent a particular RPC message.
Reference:
Accordingly, the requested exact sender-occurrence guarantee cannot be confirmed from the public documentation reviewed. An authoritative confirmation from the Windows RPC product owner would be required before treating this behavior as a supported security boundary.
Please note that the information above is limited to behavior explicitly documented in publicly available Microsoft documentation. Where a specific behavior or guarantee is not documented, I cannot make assumptions about internal RPC/ALPC implementation details.
If this helps clarify the architectural boundaries and resolves your design inquiry, please consider hitting "Accept Answer" so other users facing this scenario can easily find the solution!
Thank you.