views:

257

answers:

2

My application uses Microsoft RPC for interprocess communications. When two processes are run on the same machine and one process tries to call a method declared as (IDL notation):

error_status_t rpcMethod( [in] pipe byte parameter );

this call fails with RPC_S_CANNOT_SUPPORT ("The requested operation is not supported") and never reaches the server side and the push()/pull() primitives of the supplied pipe are never called. This is only reproduced on Vista when using ncalrpc protocol and not otherwise.

I also found the following in the Event Viewer logs:

Application ("my program exe file name here" \service) (PID: 344) is using Windows functionality that is not present in this release of Windows. For obtaining an updated version of the application, please, contact the application vendor. The technical information that needs to be conveyed to the application vendor is this: "An RPC method using synchronous pipes has been called on on protocol sequence ncalrpc interface with unique identifier (actual UUID here). Usage and support of synchronous pipes on this protocol sequence has been deprecated for this release of Windows. For information on the deprecation process, please, see http://go.microsoft.com/fwlink/?LinkId=36415." User Action Contact the application vendor for updated version of the application

The link in the message text redirects to a page that is not likely relevant.

Is there a workaround for this problem except for changing the protocol sequence or not using pipes?

+1  A: 

You are most likely using a method that is unsupported in Vista.

RPC_NOTIFICATIONS enumeration value that specifies the type of notification requested from RPC by the server.

Windows Vista: Currently, only RpcNotificationClientDisconnect and RpcNotificationCallCancel are supported. If any other value is specified for this parameter, the RPC_S_CANNOT_SUPPORT error code is returned.

See MSDN

Edouard A.
I don't call RpcServerSubscribeForNotification() - I call a MIDL-generated stub that redirects to NdrClientCall2.
sharptooth
It's quite likely a marshalling problem. Vista is more pedantic about this. Which compiler are you using?
Edouard A.
A: 

this trace tools maybe help you Trace RPC Calls and Notify the COM+ Events to Your Program

lsalamon