是什么的CreateFile(“CONIN $”。)吗?
题
我被黑客离开 PLINK 中的源代码以使其与一致地兼容。
如果你不知道,齐声是一个文件同步工具,它运行的“SSH”命令连接到远程服务器,但没有ssh.exe的窗口;有砰砰,这是非常接近,但不够紧密(它不表现得像异口同声地希望它),所以人们通常使包装在其周围,的像这样的。
的问题之一是,异口同声地预计,密码提示打印到标准错误(但砰砰把它打印到stdout,并导致齐声相混淆),所以我想,好吧,应该是很简单的,破解我的直通砰砰的代码并使其打印提示到标准输出。所以我砍死我的方式通过,并做到了。
接下来的问题:我不能响应该提示!!不管是什么I型,它没有任何效果。
用于获取输入的代码大致是这样的:
hin = GetStdHandle(STD_INPUT_HANDLE);
....
r = ReadFile(hin, .....);
我不知道它为什么做这样,但我不是在设计的命令行工具的Windows方面的专家,所以我知道什么!但我想的东西是在建立输入处理丢失。
我看着为上述包装工具中的源代码和我看到这一点:
hconin=CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0)
和我尝试(只是为了赫克)
hin=CreateFile("CONIN$",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
....
r = ReadFile( hin ...... )
和令人惊讶它的作品!我现在可以响应提示!
这是为什么?什么是 “CONIN $”?为什么是从STD_INPUT_HANDLE
不同?
我可以排序的“猜测”那FILE_SHARE_READ
和OPEN_EXISTING
在此发挥作用(因为SSH正在从另一个进程中运行),但我想知道这是怎么回事,并确保该代码没有按”吨有一些有害的副作用或安全漏洞或什么可怕的那样!
解决方案
CONIN$
是控制台的输入装置。通常情况下,标准输入是一个开放的文件句柄到这一点,但如果标准输入重定向出于某种原因,然后使用CONIN$
将让你得到访问控制台尽管重定向。 参考。