I just want to create a name pipe in *.api for adobe reader as follow, by using visual C++.
hPipe = CreateNmaedPipe(L"\\\\.\\pipe\\my_pipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT, PIPE_UNLIMITED_INSTANCES, 4096, 4096, 1000, NULL);
and put *.api in the adobe plugin, open adobe and call this.
But hPipe will return INVALID_HANDLE_VALUE and GetLastError as 5, Access Denied.
If I only run the is code in invidual c++ project and run it directly, it can be successful. Anyone has this idea?
Look under Reader Preferences, Security (enhanced). Are you running with "Enable Protected Mode At Startup" switch ON?
I only downloaded Adobe Reader DC SDK, how can I enable "Enable Protected Mode at Startup"? It is inside in SDK?
If you only just downloaded the SDK, do you already have a Reader-enabling license and key from Adobe? Not sure how you can just download the SDK and make a Reader plug-in without all this extra work?
Enable protected mode, it is fine now.
I want to know whether it must be protected mode, if I need to use sandbox and broker.exe.
Yes, Acrobat and Reader plug-ins only offer the Broker feature when protected mode is on. This means that you need to code some parts of your code twice, completely differently.
Actually I want to communicate between plugin with C# tray programe. The purpose is to open/save file from C#. plugin need to send command to C# to open file and receive file path and name from C#, then use adobe api open it. When save, will use adobe api save file then send file path and name to C#. Which communication method doesn't need sandbox and protected mode?
If you want your plug-in to run in Protected mode it probably needs to use a broker. If your plug-in needs to run with Protected mode OFF, it must use a different method. If your end users can choose whether this option is on or off, you must support both.g