2011-12-13 12 views
5

Aquí está mi problema: Tengo una aplicación de código abierto de terceros Win32, que actúa como un servidor para otros programas a través de named pipes, es decir, espera que sus clientes hagan algo así:WINE y Windows named pipes

HANDLE h = CreateFile("\\\\.\\pipe\\$pipe_name$", GENERIC_READ | GENERIC_WRITE, etc...); 
// ... 
TransactNamedPipe(h, buf, etc...); 
// ... 
CloseHandle(h); 

Esta aplicación funciona perfectamente en WINE, excepto que no me puedo comunicar con ella. Así que aquí está mi pregunta:

¿Qué hace exactamente WINE cuando se solicita abrir una tubería? ¿Lo dice, por ejemplo, asignarlo a algún archivo FIFO en ~/.wine/o donde sea? ¿Hay alguna forma de comunicarse con dicho programa desde una aplicación Linux? Google no sabe nada al respecto.

Gracias.

Respuesta

2

Las canalizaciones con nombre son recibidos por el proceso del servidor VINO. Las solicitudes son enviadas a este proceso por los clientes de WINE. Por ejemplo, CreateNamedPipe utiliza una petición como:

SERVER_START_REQ(open_file_object) 
    { 
     req->access  = access; 
     req->attributes = attr->Attributes; 
     req->rootdir = wine_server_obj_handle(attr->RootDirectory); 
     req->sharing = sharing; 
     req->options = options; 
     wine_server_add_data(req, attr->ObjectName->Buffer, attr->ObjectName->Length); 
     io->u.Status = wine_server_call(req); 
     *handle = wine_server_ptr_handle(reply->handle); 
    } 

El servidor gestiona la conexión de la canalización con nombre. Una vez que un cliente y un servidor se han conectado, el servidor WINE se quita del camino enviando un fd al cliente. Creo que este fd es solo un conducto anónimo creado por el servidor WINE, un extremo enviado al servidor de canalización y un extremo al cliente de canalización.

+0

¿Eso significa que solo es posible comunicarse con la aplicación Win dentro del entorno de Wine? Simplemente no entiendo cómo "romper la barrera" entre este entorno y Linux nativo. – ScumCoder

+0

Sí, tendrá que hablar con el servidor WINE de alguna manera para obtener acceso a la tubería. –

+0

Gracias, veré lo que puedo hacer. – ScumCoder

Cuestiones relacionadas