The reason why impersonation didn't work is because you impersonated a local user account but that is not a system account.
"Change the account that the Aspnet_wp.exe process runs under to the System account in the <processmodel> configuration section of the Machine.config file."
http://support.microsoft.com/kb/306158[
^]
You could also consider socket based IPC for example. If you cannot change process A and B itself you could create an adapter or wrapper process that is executed as "System". You'll get: .NET application --(IPC:Socket)-> adapter process --(IPC:?)-> Process A
Good luck!