Probably not the answer you want to hear, but COM is one of several standard mechanisms to achieve inter-process communication in Windows. It has it's issues that annoy developers - but it works quite well for all the requirements you listed.
As for IP sockets, you mentioned the issue of "can be seen in the network". This is not the case if you just simply bind your server socket to the localhost address (127.0.0.1).
SOCKET s;
const DWORD LOCAL_HOST_IP = 0x7f000001; // 127.0.0.1
sockaddr_in addrLocal = {};
s = socket(AF_INET, SOCK_STREAM, 0);
addrLocal.sin_family = AF_INET;
addrLocal.sin_port = htons(YOUR_APPLICATION_PORT);
addrLocal.sin_addr.s_addr = htonl(LOCAL_HOST_IP);
s = SOCKET(AF_INET, SOCK_STREAM, 0);
bind(s, (sockadr*)&addrLocal, sizeof(addrLocal));