Pregunta

Me cortar lejos el código fuente para plink para que sea compatible con unísono.

Si usted no sabe, al unísono es una herramienta de sincronización de archivos, se ejecuta un comando "ssh" para conectarse a un servidor remoto, pero no hay ssh.exe para las ventanas; hay plink, que está muy cerca, pero no lo suficientemente cerca (que no se comporta como al unísono espera que), por lo que la gente suele hacer envolturas alrededor de ella, como éste .

uno de los problemas es que al unísono espera que la solicitud de contraseña para imprimir salida estándar de errores (pero no se imprime plink a la salida estándar, y causa al unísono ser confundido), así que pensé, bueno, debería ser bastante simple, abrirme a través de código de plink y hacer que se imprima el símbolo a la salida estándar. por lo que han pirateado mi camino a través y lo hice.

Al problema: No puedo responder a la petición !! no importa lo que escribo, no tiene ningún efecto.

el código para conseguir la entrada es más o menos así:

hin = GetStdHandle(STD_INPUT_HANDLE);
....
r = ReadFile(hin, .....);

No estoy seguro de por qué se hace de esta manera, pero no soy un experto en el diseño de herramientas de línea de comandos para las ventanas, por lo que se yo! Pero creo que falta algo en la creación de la manija de entrada.

Miré el código fuente para el anteriormente herramienta envoltura y Veo esto: hconin=CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0)

y lo intento (sólo por el gusto de hacerlo)

hin=CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
....
r = ReadFile( hin ...... )

y, sorprendentemente, funciona! Ahora puedo responder a la petición!

¿Por qué es esto? lo que es "CONIN $"? y por qué es diferente de la STD_INPUT_HANDLE?

Puedo especie de "adivinar" que FILE_SHARE_READ y OPEN_EXISTING están jugando un papel en esto (ya que ssh se ejecuta desde dentro de otro proceso), pero quiero entender lo que está pasando aquí, y asegúrese de que el código doesn' t tiene algunos efectos secundarios no deseados o agujeros de seguridad o algo por el estilo miedo!

¿Fue útil?

Solución

CONIN$ es el dispositivo de entrada de la consola. Normalmente, la entrada estándar es un identificador de archivo abierto a esto, pero si la entrada estándar es redirigido por alguna razón, a continuación, utilizando CONIN$ le permitirá obtener acceso a la consola a pesar del cambio de dirección. de referencia.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top