рд▓реЗрдЦ 2 рдЕрдЧрд╕реНрдд, 2018 рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖрдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдЫрджреНрдо рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдирдП рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рдд, рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдпреВрдбреЛ рдХрдВрд╕реЛрд▓ (рдХреЙрдиреНрдЯрдкреА): рд╣рдордиреЗ рдЗрд╕реЗ рдХреНрдпреЛрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ
тАЬрдЕрддреАрдд рдХреА рдЧрдВрднреАрд░ рд╡рд┐рд░рд╛рд╕рддред рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ " рд╣рдордиреЗ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рдЙрджреНрднрд╡ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рднреА рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рдФрд░ рдкреНрд░рдореБрдЦ рдиреБрдХрд╕рд╛рдиреЛрдВ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреАред
рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ "рдЙрдкрдпреЛрдЧреА" рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХрдВрд╕реЛрд▓, рд╕реЗрд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдЖрджрд┐ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИред рдХрдВрд╕реЛрд▓ рдпрд╛ рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╕рдордп, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреЗ рдЯрд░реНрдорд┐рдирд▓ / рд╕реЗрд╡рд╛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред * NIX рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ * NIX рдПрдХ рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ (PTY) рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдХрдВрд╕реЛрд▓ рдпрд╛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдпрд╣ рдирд╣реАрдВ рдерд╛ ...
... рдЕрдм рддрдХ!TTY рд╕реЗ PTY рддрдХ
рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред
рд╢реБрд░реБрдЖрдд рдореЗрдВ TTY рдерд╛
рдЬреИрд╕рд╛ рдХрд┐
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд╢реБрд░реБрдЖрддреА рджрд┐рдиреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ (рдЖрдорддреМрд░ рдкрд░
20 рдПрдордП рд╡рд░реНрддрдорд╛рди рд▓реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрдореИрдХреЗрдирд┐рдХрд▓ рдЯреЗрд▓реЗрдЯрд┐рдк (рдЯреАрдЯреАрд╡рд╛рдИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ред
рдХреЗрди рдереЙрдореНрдкрд╕рди рдФрд░ рдбреЗрдирд┐рд╕ рд░рд┐рдЪреА (рдЦрдбрд╝реЗ) рдбреАрдИрд╕реА рдкреАрдбреАрдкреА -11 рдЯреЗрд▓реЗрдЯрд╛рдЗрдк рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ (рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрджреЗрд╢)рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рддрд░рдг
рдЯреЗрд▓реЗрдЯрд╛рдЗрдкреНрд╕ рдХреЛ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдбрд┐рд╕реНрдкреНрд▓реЗ (рдЖрдорддреМрд░ рдкрд░ рд╕реАрдЖрд░рдЯреА рд╕реНрдХреНрд░реАрди) рдХреЗ рд╕рд╛рде рдХрдореНрдкреНрдпреВрдЯрд░реАрдХреГрдд рдЯрд░реНрдорд┐рдирд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдорддреМрд░ рдкрд░, рдЯрд░реНрдорд┐рдирд▓ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрдкрдХрд░рдг рд╣реЛрддреЗ рд╣реИрдВ (рдЗрд╕рд▓рд┐рдП "рдбрдореНрдм рдЯрд░реНрдорд┐рдирд▓" рд╢рдмреНрдж), рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХреНрд╕ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
- рдХреАрдмреЛрд░реНрдб рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХрд╛ рд░рд┐рд╕реЗрдкреНрд╢рдиред
- рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкрд╛рда рдХреЛ рдмрдлрд░ рдХрд░рдирд╛ (рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдкрд╛рджрди рд╕рд╣рд┐рдд)ред
- рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдЪреИрдирд▓ рдкрд░ рдкрд╛рда рднреЗрдЬрдирд╛ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдмрд╛рд░ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА RS-232 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред
- рдЯрд░реНрдорд┐рдирд▓ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред
рдЗрд╕рдХреА рд╕рд╛рджрдЧреА (рдпрд╛ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж) рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдорд┐рдирд┐рдХреЙрдордкреЙрдЗрдВрдЯ, рдореЗрдирдлреНрд░реЗрдо рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕рд╛рдзрди рдмрди рдЧрдпрд╛: рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрдЯрд╛ рдПрдВрдЯреНрд░реА рдСрдкрд░реЗрдЯрд░, рдХрдВрдкреНрдпреВрдЯрд░ рдСрдкрд░реЗрдЯрд░, рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрдЯрд░, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ, рд╢реЛрдзрдХрд░реНрддрд╛, рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдЙрджреНрдпреЛрдЧ рдХреЗ рджрд┐рдЧреНрдЧрдЬреЛрдВ рдиреЗ DECIC рдиреЗрд▓реНрд╕ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЖрдИрдмреАрдПрдо, рд╡рд╛рдпрд╕ рдФрд░ рдХрдИ рдЕрдиреНрдпред
рдПрдбрдорд┐рд░рд▓ рдЧреНрд░реЗрд╕ рд╣реВрдкрд░ рдЕрдкрдиреЗ рдбреЗрд╕реНрдХ рдкрд░ DEC VT220 рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВрд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг
1980 рдХреЗ рджрд╢рдХ рдХреЗ рдордзреНрдп рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рдмрдЬрд╛рдп, рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рдХрд┐рдлрд╛рдпрддреА, рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрди рдЧрдП рд╣реИрдВред рдХрдИ рд╢реБрд░реБрдЖрддреА рдкреАрд╕реА рдФрд░ 80 рдХреЗ рджрд╢рдХ рдХреЗ рдЕрдиреНрдп рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдереЗ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкреАрд╕реА рдХреЗ рд▓рд┐рдП RS-232 рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рд╛ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреВрд╕рд░реЗ рдЫреЛрд░ рдкрд░ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рд╣реЛ рдЧрдП, рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ (рдЬреАрдпреВрдЖрдИ) рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕рд╣рд┐рдд рд╕рдорд╡рд░реНрддреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдирдИ рджреБрдирд┐рдпрд╛ рджрд┐рдЦрд╛рдИ рджреАред
рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА: рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдЪрд▓ рд░рд╣реЗ рджреВрд╕рд░реЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдФрд░ рдПрдХ рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдХреЗрдмрд▓ рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП?
рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рд╕реВрд░рдд (PTY)
* NIX рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдПрдХ
рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ (PTY) рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рдереАред
PTY рдорд╛рд╕реНрдЯрд░ рдФрд░ рд╕реНрд▓реЗрд╡ рд╕реНрдпреВрдбреЛ-рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ ("рдорд╛рд╕реНрдЯрд░" рдФрд░ "рд╕реНрд▓реЗрд╡") рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рд╕реАрд░рд┐рдпрд▓ рдЯреЗрд▓реАрдХрдореНрдпреВрдирд┐рдХреЗрд╢рди рдЗрдХреНрд╡рд┐рдкрдореЗрдВрдЯреНрд╕ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ: рдЯрд░реНрдорд┐рдирд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд╛рд╕реНрдЯрд░ рд╕реНрдпреВрдбреЛ-рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, cmd, рдкреЙрд╡рд░рд╢реЗрд▓ рдФрд░ рдмреИрд╢ рдЬреИрд╕реЗ рдЧреЛрд▓реЗ) рд╕реНрд▓реЗрд╡ рд╕реНрдпреВрдбреЛ-рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдХреЛрдИ рдЯрд░реНрдорд┐рдирд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ / рдпрд╛ рдХрдВрдЯреНрд░реЛрд▓ рдХрдорд╛рдВрдб (рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирдХреЛрдбрд┐рдВрдЧ) рдХреЛ рдорд╛рд╕реНрдЯрд░ рдЫрджреНрдо рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рджрд╛рд╕ рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдкрд╛рда рдХреЛ рджрд╛рд╕ рдЫрджреНрдо рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдорд╛рд╕реНрдЯрд░ рдХреЛ рд╡рд╛рдкрд╕ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЯрд░реНрдорд┐рдирд▓ рдХреЛред рдбреЗрдЯрд╛ рд╣рдореЗрд╢рд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рднреЗрдЬрд╛ / рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЫрджреНрдо рдЯрд░реНрдорд┐рдирд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ / рд╢реЗрд▓рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ "рджрд╛рд╕" рдЫрджреНрдо рдбрд┐рд╡рд╛рдЗрд╕ рднреМрддрд┐рдХ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдорд╛рдВрдб рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдкреЛрд╕рд┐рдХреНрд╕ рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ
CTRL + C рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдорд╛рд╕реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ CTRL + C (0x03) рдХреЗ рд▓рд┐рдП ASCII рдореВрд▓реНрдп рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдПрдХ рджрд╛рд╕ рдЫрджреНрдо рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдорд╛рди 0x03 рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ
SIGINT рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЗ PTY рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ * NIX рдЯрд░реНрдорд┐рдирд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рдкрд╛рда рдкреИрдирд▓ рдкреНрд░рдмрдВрдзрдХреЛрдВ (рдЬреИрд╕реЗ рд╕реНрдХреНрд░реАрди, tmux), рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди
openpty()
, рдЬреЛ рдкреАрдЯреАрд╡рд╛рдИ рдорд╛рд╕реНрдЯрд░ рдФрд░ рджрд╛рд╕ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ (рдПрдлрдбреА) рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрд╡реЗрджрди рдПрдХ рдмрдЪреНрдЪреЗ рдХреЛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрд╢) рдХреЛ рдХрд╛рдВрдЯрд╛ / рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЬреБрдбрд╝реЗ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдкрд╛рда рдХреЛ рд╕реБрдирдиреЗ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ fd рджрд╛рд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рддрдВрддреНрд░ рдЯрд░реНрдорд┐рдирд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕реНрддрд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ "рдмрд╛рдд" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рджреВрд░рд╕реНрде рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдЧрд╛ред
рдХреНрдпрд╛, рдирд╣реАрдВ рдЫрджреНрдо рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛрдЬ?
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдереА, рдЬрдмрдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ * рдПрдирдЖрдИрдПрдХреНрд╕ рдЯрд░реНрдорд┐рдирд▓ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдпрд╣ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирддрдо рд╕реНрддрд░ рдкрд░, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ / рдХрдВрд╕реЛрд▓ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрд╡реЗрджрди:
- рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХреЛрдИ PTY рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдирд╣реАрдВ рд╣реИ : рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Cmd, PowerShell, wsl, ipconfig, рдЖрджрд┐) рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдВрдбреЛрдЬ рдЦреБрдж рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрдВрд╕реЛрд▓ рдХреЗ рдПрдХ рдирдП рдпрд╛ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛ "рдХрдиреЗрдХреНрдЯ" рдХрд░рддрд╛ рд╣реИред
- рд╡рд┐рдВрдбреЛрдЬ рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдВрд╕реЛрд▓ рдФрд░ рд╕рд░реНрд╡рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИ: рд╡рд┐рдВрдбреЛрдЬ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ) рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреГрддреАрдп-рдкрдХреНрд╖ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рдХрдВрд╕реЛрд▓ рдмрдирд╛рдирд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджрд░реНрдЬ рдбреЗрдЯрд╛ рдХреЛ рд╡рд╣рд╛рдВ рднреЗрдЬрдирд╛ рд╣реИ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХрдВрд╕реЛрд▓ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрдХреНрд░реИрдк рдХрд░рдирд╛ рд╣реИ!
- рдХреЗрд╡рд▓ Windows рдореЗрдВ рдХрдВрд╕реЛрд▓ API рд╣реИ : Windows рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди Win32 Consol API рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреЛрдб рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдЪреВрдВрдХрд┐ рдЕрдиреНрдп рд╕рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЯреЗрдХреНрд╕реНрдЯ / VT рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдПрдкреАрдЖрдИ рдХрд╛ рдирд╣реАрдВред
- рдЧреИрд░-рдорд╛рдирдХ рд░рд┐рдореЛрдЯ рдПрдХреНрд╕реЗрд╕ : рдХрдВрд╕реЙрд▓ рдПрдкреАрдЖрдИ рдкрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдмрд╛рддрдЪреАрдд рдФрд░ рд░рд┐рдореЛрдЯ рдПрдХреНрд╕реЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдмрдирд╛рддреА рд╣реИред
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдХрдИ,
рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрдХреНрд╕рд░ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдПрдХ рдкреАрдЯреАрд╡рд╛рдИ-рдЬреИрд╕реЗ рддрдВрддреНрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреЙрдирдореВ / рд╕реАрдПрдордбреА, рдХрдВрд╕реЛрд▓ 2 / рдХрдВрд╕реЛрд▓, рд╣рд╛рдЗрдкрд░, рд╡реАрдПрд╕рдХреЛрдб, рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ, рдбрдмреНрд▓реНрдпреВрдПрд╕рдПрд▓, рдбреЙрдХрд░ рдФрд░ рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреАрдЯрд░ рдмреНрд░рд╛рдЗрдЯ, рдЕрд░реНрд╕ рдЯреЗрдХреНрдирд┐рдХрд╛ рдХреЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕рдВрдкрд╛рджрдХ, рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдмрд╛рдж рдкреАрдЯреАрд╡рд╛рдИ рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдЬрдм рдореИрдВрдиреЗ рдХрдВрд╕реЛрд▓ рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛:

рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдлрд┐рд░ рд╕реЗ:

рдЦреИрд░, рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдпрд╣ рдХрд┐рдпрд╛:
рд╣рдордиреЗ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрджреНрдо рдХрдВрд╕реЛрд▓ рдмрдирд╛рдпрд╛ :
рд╡рд┐рдВрдбреЛрдЬ рдЫрджреНрдо рдХрдВрд╕реЛрд▓ (рдЕрд╡рдзрд╛рд░рдгрд╛) рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
рд▓рдЧрднрдЧ рдЪрд╛рд░ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХрдВрд╕реЛрд▓ рдЯреАрдо рдХреЗ рдЧрдарди рдХреЗ рдмрд╛рдж рд╕реЗ, рд╕рдореВрд╣ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдЖрдВрддрд░рд┐рдХ рддрдВрддреНрд░ рдХреЗ рдУрд╡рд░рд╣рд╛рд▓ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕реА рд╕рдордп, рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдФрд░ рдзреНрдпрд╛рди рд╕реЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдореБрджреНрджреЛрдВ рдФрд░ рдХрдИ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рдФрд░ рдХреЛрдб рдЫрджреНрдо рд╕рд╛рдВрддреНрд╡рдирд╛ рдХреА рд░рд┐рд╣рд╛рдИ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдереЗ ... рдЕрдм рддрдХ!
рдирдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рд╕реНрдпреВрдбреЛ-рдХрдВрд╕реЛрд▓ (CONPTY) рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░, рдПрдкреАрдЖрдИ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди
рдореМрдЬреВрджрд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рдкреВрд░реЗ рд╡рд░реНрдЧ рдХреЛ рд╕рдорд╛рдкреНрдд / рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВрдЧреЗ!
рдирдпрд╛ Win32 CONPTY API (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬрд▓реНрдж рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдЕрдм рд╡рд┐рдВрдбреЛрдЬ 10 рдФрд░ рдЗрд╕реА рд╡рд┐рдВрдбреЛрдЬ 10 рдЗрдирд╕рд╛рдЗрдбрд░ рдкреНрд░реАрд╡реНрдпреВ рдПрд╕рдбреАрдХреЗ рдХреЗ рдирд╡реАрдирддрдо рдЗрдирд╕рд╛рдЗрдбрд░ рдмрд┐рд▓реНрдб рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╡реЗ рд╡рд┐рдВрдбреЛрдЬ 10 (2018 рдХреЗ рдкрддрди / рд╕рд░реНрджрд┐рдпреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рдФрд░) рдХреА рдЕрдЧрд▓реА рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
рдХрдВрд╕реЛрд▓ / рдХреЙрдирд╣реЙрд╕реНрдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐ ... рдХреЙрдирд╣реЙрд╕реНрдЯ!
рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ ConHost рд╡рд╣ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ Windows рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, ConHost рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ Windows рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ! рдЕрдм рд╕реЗ,
ConHost рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ "рдХрдВрд╕реЛрд▓ рдиреЛрдб" рдмрди рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ / рдпрд╛ GUI рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ!
рдХреИрд╕реЗ? рдХреНрдпреЛрдВ? рдХреНрдпрд╛? рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдпрд╣рд╛рдБ рдЖрдВрддрд░рд┐рдХ рдХрдВрд╕реЛрд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ / ConHost рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рджреГрд╢реНрдп рд╣реИ:
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, ConHost рдореЗрдВ рдЕрдм VT рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдореЙрдбреНрдпреВрд▓ рдФрд░ рдирдП CONPTY рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдЦреБрд▓реЗ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
- рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдкреАрдЖрдИ : рдирдП Win32 рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдкреАрдЖрдИ POSIX PTY рдореЙрдбрд▓ рдХреЗ рд╕рдорд╛рди рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдЕрдкрд╡рд░реНрддрди рдореЗрдВред
- VT рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ : UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдЗрдирдкреБрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ рдХреИрд░реЗрдХреНрдЯрд░ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд
INPUT_RECORD
рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдмрдлрд░ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИред рдпрд╣ 0x03 (CTRL + C) рдЬреИрд╕реЗ рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ рдХреЛ рднреА рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ KEY_EVENT_RECORDS
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдЪрд┐рдд рдПрдХреНрд╢рди рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВред - рд╡реАрдЯреА рд░реЗрдВрдбрд░рд░ : рдХрд░реНрд╕рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡реАрдЯреА рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ рдлреНрд░реЗрдо рд╕реЗ рдмрджрд▓реЗ рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкрд╛рда рдФрд░ рд╢реИрд▓реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ?
рдирдП CONPTY рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдФрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдиреЗ рдЕрдм рддрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред
рдЬрдм рднреА рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Cmd, PowerShell рдпрд╛ ssh рдЬреИрд╕реЗ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ Windows рдПрдХ рдирдИ Win32 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрд╛рдЗрдирд░реА рдФрд░ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрднрд░рддрд╛ (рд╕рдВрд╕рд╛рдзрди рдпрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдирдИ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдорддреМрд░ рдкрд░ рдЕрдкрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рд╕реНрдЯрдб рдФрд░ рд╕реНрдЯрдбрдЖрдЙрдЯ рд╡рд░реНрдгрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреА рд╣реИред рдпрджрд┐ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╡рд┐рдВрдбреЛрдЬрд╝ рдЬреАрдпреВрдЖрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереА, рддреЛ рд╕реНрдЯрдбрд┐рди рдФрд░ рд╕реНрдЯрдбрдЖрдЙрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдЧрд╛рдпрдм рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирдП рдХрдВрд╕реЛрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рддреИрдирд╛рдд рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧрд╛ред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЙрдирдХреЗ рдХрдВрд╕реЛрд▓ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ ConDrv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрд▓рд┐рд╡реЗрдЯреЗрдб рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкрд╛рд╡рд░рд╢реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯрдб / рд╕реНрдЯрдбрдЖрдЙрдЯ рдкреИрд░реЗрдВрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдЧреА рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреЗрд░реЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреА рд╣реИред
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рдЖрд░рдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрд╕реЛрд▓ рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╡рд░рдг рдЖрдорддреМрд░ рдкрд░ рд╕рд╣реА рд╣реИред
рдЕрдВрддрддрдГ, рдЬрдм рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди / рд╢реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдВрдбреЛрдЬ рдЗрд╕реЗ рдХреЙрдирдбреНрд░реЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдВрд╕реЛрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ (ConHost.exe) рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:

ConHost рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдЬрдм рднреА рдХреЛрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣реА рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд┐рдВрдбреЛрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдирд╣реЙрд╕реНрдЯ рдХреЗ рдирдП рдпрд╛ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЗрд╕рдХреЗ рдХрдВрд╕реЛрд▓ рдЙрджрд╛рд╣рд░рдг рдХрд░реНрдиреЗрд▓-рдореЛрдб рдХрдВрд╕реЛрд▓ рдбреНрд░рд╛рдЗрд╡рд░ (ConDrv) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЬреЛ рдХреНрд░рдордмрджреНрдз API рдХреЙрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ / рдпрд╛ рдкрд╛рда рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ IOCTL рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ / рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдХреЙрдирд╣реЙрд╕реНрдЯ рдХрд╛ рдХрд╛рдо рдЖрдЬ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреАрдмреЛрд░реНрдб / рдорд╛рдЙрд╕ / рдкреЗрди / рдЯрдЪрдкреИрдб рд╕реЗ рдЗрдирдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
KEY_EVENT_RECORD
рдпрд╛ MOUSE_EVENT_RECORD
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред - рдЗрдирдкреБрдЯ рдмрдлрд░ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдЦрд╛рд▓реА рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреБрд░реЛрдзрд┐рдд рдЗрдирдкреБрдЯ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛, рдХрд░реНрд╕рд░ рдХреЛ рд╣рд┐рд▓рд╛рдирд╛, рдХреЙрдкреА рдХрд░рдирд╛ / рдкрд╛рда рдЪрд┐рдкрдХрд╛рдирд╛, рдЖрджрд┐ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдпреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░ рдХреЙрдирд╣реЙрд╕реНрдЯ рд░рд╛рдЬреНрдп рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВред
- рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЬрдм рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдкреАрдЖрдИ рдХреЙрд▓ IOCTL рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЙрдирдбреНрд░рд╡ рдЪрд╛рд▓рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрд▓рдЧреНрди рдХрдВрд╕реЛрд▓ рдХреЛ IOCTL рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрд░реЛрдзрд┐рдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛ рдбрд┐рдХреЛрдб рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реМрдЯреЗ / рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди IOCTL рд╕рдВрджреЗрд╢ рдореЗрдВ рд╡рд╛рдкрд╕ рдХреНрд░рдордмрджреНрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ ConDrv рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
ConHost: рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЕрддреАрдд рдореЗрдВ рдпреЛрдЧрджрд╛рди
Microsoft рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рдореМрдЬреВрджрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдЦрд╛рд╕рдХрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд┐рдВрдбреЛрдЬ 10 рдХреЗ 32-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рднреА рдХрдИ / рдЕрдзрд┐рдХрд╛рдВрд╢ 16-рдмрд┐рдЯ Win16 рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ!
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЙрдирд╣реЙрд╕реНрдЯ рдХреА рдкреНрд░рдореБрдЦ рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрдкрдиреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╡рд┐рди 32 рдХрдВрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм ConHost рдирдИ рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдЖрдзреБрдирд┐рдХ рдХрдВрд╕реЛрд▓ рдФрд░ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдмрд╛рдз PTY- рдЬреИрд╕рд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛
- рд╡рд┐рд░рд╛рд╕рдд / рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛
- рдЗрдирдкреБрдЯ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП UTF-8 рдЯреЗрдХреНрд╕реНрдЯ / VT рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ (рдЬреИрд╕реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
- рдХрдВрд╕реЛрд▓ API рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЛ рддрджрдиреБрд╕рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ
- UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рдкрд╛рда / рд╡реАрдЯреА рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдЖрдзреБрдирд┐рдХ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдХреЙрдирдкреАрдЯреА рдХреЙрдирд╣реЙрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдирдП рдореЙрдбрд▓ рдореЗрдВ:
- рдХрдВрд╕реЛрд▓:
- рдЦреБрдж рдХрд╛ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдмрдирд╛рддрд╛ рд╣реИ
- CONPTY рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП CONPTY API рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, Windows рдХреЛ рдЪреИрдирд▓реЛрдВ рдХреЗ рджреВрд╕рд░реЗ рдЫреЛрд░ рд╕реЗ рдЬреБрдбрд╝реЗ ConHost рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
- рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, ConHost рд╕реЗ рдЬреБрдбрд╝реЗ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЬреИрд╕реЗ рдкреЙрд╡рд░рд╢реЗрд▓) рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ
- ConHost:
- рдЗрдирдкреБрдЯ рдкрд░ UTF-8 рдЯреЗрдХреНрд╕реНрдЯ / VT рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ
INPUT_RECORD
рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ INPUT_RECORD
рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░реЗрдВ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
- UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдкрд╛рда / VT) рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдХреЛ рдЗрд╕рдХреЗ рдХрдВрд╕реЛрд▓ рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ
- рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд╡реЗрджрди:
- рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЙрдиреНрдЯреЗрдХреНрдЯ рдХреЙрдиреНрд╕реНрдЯреЛрд╕реНрдЯ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ / рд╕реЗ рдпреВрдЯреАрдПрдл -8 рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ!
рдЕрдВрддрд┐рдо рдХреНрд╖рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ! рдЬрдм рдкреБрд░рд╛рдиреА рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдирд╕реЛрд▓ рдХрдВрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдЬреИрд╕реЗ рдХрд┐
WriteConsoleOutput(...)
рд▓рд┐рдП рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд╛рда рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрдирд╣реЙрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдордп-рд╕рдордп рдкрд░, ConHost рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ / рд╡реАрдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рд╡рд╛рдкрд╕ рд╕реНрдЯрдбрдЖрдЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдмрд╛рд╣рд░ рд╕реЗ рднреА рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди
рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ / рд╡реАрдЯреА
рдХреЛ "рдмреЛрд▓рддреЗ"
рд╣реИрдВ !
рдирдП CONPTY рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреГрддреАрдп-рдкрдХреНрд╖ рдХрдВрд╕реЛрд▓ рдЕрдм рд╕реАрдзреЗ рдЖрдзреБрдирд┐рдХ рдФрд░ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ / рд╡реАрдЯреА рдореЗрдВ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рддрдВрддреНрд░ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░реЗрд╕реНрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдореЛрдЯ рд╡рд┐рдВрдбреЛрдЬ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдпрд╛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреЙрд╡рд░рд╢реЗрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рдеред
рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ (рдЬреИрд╕реЗ рджреВрд░рд╕реНрде рдХрдВрдкреНрдпреВрдЯрд░, рд╕рд░реНрд╡рд░, рдпрд╛ рдХрдВрдЯреЗрдирд░ рдкрд░) рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреВрд░рд╕реНрде рдорд╢реАрдиреЛрдВ рдкрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд╛рдиреАрдп рдХреЙрдирд╣реЙрд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ IOCTL рд╕рдВрджреЗрд╢ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕реНрдерд╛рдиреАрдп рдХрдВрд╕реЛрд▓ рд╕реЗ рд░рд┐рдореЛрдЯ рдорд╢реАрди рдореЗрдВ рдЗрдирдкреБрдЯ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдХ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЯрд░реНрдорд┐рдирд▓ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ-рд╕рдВрдЧрдд рдХрдВрд╕реЛрд▓ рдирд╣реАрдВ рд╣реИрдВ?
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдВрдбреЛрдЬ рдорд╢реАрди рдХреЛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд░ рдмреНрд░реЛрдХрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
рд╢рд╛рдпрдж рдХреБрдЫ
ssh рдХреА рддрд░рд╣?
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ,
рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдХреЛ рд╣рд╛рд▓ рд╣реА
рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░
рд╡рд┐рдВрдбреЛрдЬ 10 рдореЗрдВ
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛
рдЧрдпрд╛ рдерд╛ ред PowerShell Core рднреА рд╕рдорд░реНрдерд┐рдд
PowerShell Core Remoting remoting рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ ssh рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП,
рд╡рд┐рдВрдбреЛрдЬ рдкреЙрд╡рд░рд╢реЗрд▓ рд░реЗрдореЛрдЯрд┐рдВрдЧ рдХреЛ
рд░реАрдореЛрдЯ рдХрд░рдирд╛ рдЕрднреА рднреА рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдУрдкрдирдПрд╕рдПрд╕рдПрдЪ рдЕрдм рдЖрдкрдХреЛ
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдЧреЛрд▓реЗ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рджреВрд░ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИ:

OpenSSH рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рдЕрд╡рд╛рдВрдЫрд┐рдд рдЬрдЯрд┐рд▓рддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:
- Ssh рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрдВрд╕реЛрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
- рдкрд╛рда рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ ssh рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреАрд╕реНрдЯреНрд░реЛрдХ рднреЗрдЬрддрд╛ рд╣реИ
- ssh рдЧреНрд░рд╛рд╣рдХ:
- рдкрд╛рда рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирдкреБрдЯ рдкрдврд╝рддрд╛ рд╣реИ
- Sshd рд╕реБрдирдиреЗ рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд╛рда рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ
- Sshd рд╕реЗрд╡рд╛ рдХрдИ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ:
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реЗрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Cmd) рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬ рдХреЛ рдХрдВрд╕реЛрд▓ рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ
- рдвреВрдБрдврддрд╛ рд╣реИ рдФрд░ Cmd рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
- рдХрдВрд╕реЛрд▓ рдХреЛ рдСрдлрд╝-рд╕реНрдХреНрд░реАрди рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ / рдпрд╛ рдЗрд╕реЗ рдЫреБрдкрд╛рддрд╛ рд╣реИ)
- рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП ssh рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЗрдирдкреБрдЯ рднреЗрдЬрддрд╛ рд╣реИ
- Cmd рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- Sshd рд╕реЗрд╡рд╛ рд╕реЗ рдЗрдирдкреБрдЯ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ
- рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд░реЗрдВрдбрд░ / рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ, рдХрд░реНрд╕рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
- рд╕рдВрд▓рдЧреНрди [рдСрдл-рд╕реНрдХреНрд░реАрди] рдХрдВрд╕реЛрд▓:
- рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░реЗрдВред
- Sshd рд╕реЗрд╡рд╛:
- рдСрдл-рд╕реНрдХреНрд░реАрди рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЛ рд╕реНрдХреНрд░реИрдк рдХрд░рддрд╛ рд╣реИ, рдЕрдВрддрд░ рдкрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЯреЗрдХреНрд╕реНрдЯ / рд╡реАрдЯреА рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИ ...
- рдПрдХ ssh рдХреНрд▓рд╛рдЗрдВрдЯ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рднреЗрдЬрддрд╛ рд╣реИ ...
- рдХрдВрд╕реЛрд▓ рдЬреЛ рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдордЬрд╝рд╛, рд╕рд╣реА? рдмрд┐рд▓рдХреБрд▓ рдирд╣реАрдВ! рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмрд╣реБрдд рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рднреЗрдЬрдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдФрд░ рдСрдл-рд╕реНрдХреНрд░реАрди рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЛ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВред рдЗрд╕рд╕реЗ рдЕрд╕реНрдерд┐рд░рддрд╛, рдХреНрд░реИрд╢, рдбреЗрдЯрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░, рдЕрддреНрдпрдзрд┐рдХ рдКрд░реНрдЬрд╛ рдХреА рдЦрдкрдд рдЖрджрд┐ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рди рдХреЗрд╡рд▓ рдкрд╛рда рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдЧреБрдг рднреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕реНрд╡рд░реВрдкрдг рдФрд░ рд░рдВрдЧ рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВ!
рдЖрдзреБрдирд┐рдХ ConHost рдФрд░ CONPTY рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рджреВрд░рд╕реНрде рдХрд╛рд░реНрдп
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рд╛рдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЪрд▓реЛ рдХреБрдЫ рд╡рд╛рд╕реНрддреБ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реА рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

рдЖрд░реЗрдЦ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрдХрд┐рдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛:
- Ssh рдХреНрд▓рд╛рдЗрдВрдЯ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрдВрд╕реЛрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
- рдкрд╛рда рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ ssh рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреАрд╕реНрдЯреНрд░реЛрдХ рднреЗрдЬрддрд╛ рд╣реИ
- ssh рдЧреНрд░рд╛рд╣рдХ:
- рдкрд╛рда рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдирдкреБрдЯ рдкрдврд╝рддрд╛ рд╣реИ
- Sshd рд╕реБрдирдиреЗ рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкрд╛рда рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ
- Sshd рд╕реЗрд╡рд╛:
- рд╕реНрдЯрдбрд┐рди / рд╕реНрдЯрдбрдЖрдЙрдЯ рдЪреИрдирд▓ рдмрдирд╛рддрд╛ рд╣реИ
- ConPTY рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CONPTY API рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
- рдХреЙрдиреНрдЯрдкреАрдЯреА рдХреЗ рджреВрд╕рд░реЗ рдЫреЛрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рдПрдХ рд╕реАрдПрдордбреА рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред Windows ConHost рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЖрд░рдВрдн рдФрд░ рдорд╛рдЙрдВрдЯ рдХрд░рддрд╛ рд╣реИ
- Cmd рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- Sshd рд╕реЗрд╡рд╛ рд╕реЗ рдЗрдирдкреБрдЯ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ
- рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд░реЗрдВрдбрд░ / рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ, рдХрд░реНрд╕рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
- рдЙрджрд╛рд╣рд░рдг рдЕрд╡рдзрд╛рд░рдгрд╛
- рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░реЗрдВред
- рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ UTF-8 рдПрдиреНрдХреЛрдбреЗрдб рдЯреЗрдХреНрд╕реНрдЯ / VT рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрдВрд╕реЛрд▓ / рдЯрд░реНрдорд┐рдирд▓ ssh рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХреЙрдиреНрдЯрдкреАрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреНрд▓реАрдирд░ рдФрд░ sshd рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИред рд╡рд┐рдВрдбреЛрдЬ рдХрдВрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЙрдирд╣реЙрд╕реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдкрд╛рда рдФрд░ рд╡реАрдЯреА рдХреЗ рд▓рд┐рдП рд╕рднреА рджреГрд╢реНрдпрдорд╛рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬреЛ рдХреЛрдИ рднреА ConHost рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рдЙрд╕реЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрд╕реЛрд▓ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ / рд╡реАрдЯреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ!
рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рдЗрд╕ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рджреВрд░рд╕реНрде рддрдВрддреНрд░ рдПрдХ рд╕реБрдВрджрд░, рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╕рд░рд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред ConHost рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдкреБрд░рд╛рдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдВрд╕реЛрд▓ рдХрдВрд╕реЛрд▓ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ / VT рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ, рдирдпрд╛ ConHost рдФрд░ CONPTY рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрддреАрдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдкреАрдЖрдИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
CONPTY API рд╡рд┐рдВрдбреЛрдЬ 10 рдЗрдирд╕рд╛рдЗрдбрд░ рдкреНрд░реАрд╡реНрдпреВ SDK рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдЕрдм рддрдХ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдХреЛрдб рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ;)
рдПрдкреАрдЖрдИ рдШреЛрд╖рдгрд╛рдУрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
// Creates a "Pseudo Console" (ConPTY). HRESULT WINAPI CreatePseudoConsole( _In_ COORD size, // ConPty Dimensions _In_ HANDLE hInput, // ConPty Input _In_ HANDLE hOutput, // ConPty Output _In_ DWORD dwFlags, // ConPty Flags _Out_ HPCON* phPC); // ConPty Reference // Resizes the given ConPTY to the specified size, in characters. HRESULT WINAPI ResizePseudoConsole(_In_ HPCON hPC, _In_ COORD size); // Closes the ConPTY and all associated handles. Client applications attached // to the ConPTY will also terminated. VOID WINAPI ClosePseudoConsole(_In_ HPCON hPC);
рдЙрдкрд░реЛрдХреНрдд рдПрдкреАрдЖрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреАрди рдирдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИ:
CreatePseudoConsole(size, hInput, hOutput, dwFlags, phPC)
- рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ,
w
рдХреЙрд▓рдо рдФрд░ h
рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде pty рдмрдирд╛рддрд╛ рд╣реИ:
size
: рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ (рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ) рд╢рдВрдХреБ рдмрдлрд░ рдХреЗhInput
: UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ / VT рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ PTY рдХреЛ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПhOutput
: UTF-8 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдкрд╛рда / рд╡реАрдЯреА рджреГрд╢реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ PTY рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдПdwFlags
: рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рди:
PSEUDOCONSOLE_INHERIT_CURSOR
: рдмрдирд╛рдИ рдЧрдИ CONPTY рдкреИрд░реЗрдВрдЯ рдЯрд░реНрдорд┐рдирд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧреА
phPC
: phPC
рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрдВрд╕реЛрд▓ рд╣реИрдВрдбрд▓
- рд░рд┐рдЯрд░реНрди : рд╕рдлрд▓рддрд╛ / рд╡рд┐рдлрд▓рддрд╛ред рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, phPC рдореЗрдВ рдирдИ ConPty рдХрд╛ рд╣реИрдВрдбрд▓ рд╣реЛрддрд╛ рд╣реИ
ResizePseudoConsole(hPC, size)
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдмрдлрд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ
ClosePseudoConsole (hPC)
- ConPTY рдФрд░ рд╕рднреА рд╕рдВрдмрджреНрдз рд╡рд┐рд╡рд░рдгрдХреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред CONPTY рд╕реЗ рдЬреБрдбрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рднреА рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдПрдХ рдХрдВрд╕реЛрд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдереЗ рдЬреЛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛
рдЕрд╡рдзрд╛рд░рдгрд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЫрджреНрдо рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рдЫрджреНрдо рдХрдВрд╕реЛрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП CONPTY рдХреЛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдиреЛрдЯ: рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдорд╛рд░реЗ GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред
// Note: Most error checking removed for brevity. // ... // Initializes the specified startup info struct with the required properties and // updates its thread attribute list with the specified ConPTY handle HRESULT InitializeStartupInfoAttachedToConPTY(STARTUPINFOEX* siEx, HPCON hPC) { HRESULT hr = E_UNEXPECTED; size_t size; siEx->StartupInfo.cb = sizeof(STARTUPINFOEX); // Create the appropriately sized thread attribute list InitializeProcThreadAttributeList(NULL, 1, 0, &size); std::unique_ptr<BYTE[]> attrList = std::make_unique<BYTE[]>(size); // Set startup info's attribute list & initialize it siEx->lpAttributeList = reinterpret_cast<PPROC_THREAD_ATTRIBUTE_LIST>( attrList.get()); bool fSuccess = InitializeProcThreadAttributeList( siEx->lpAttributeList, 1, 0, (PSIZE_T)&size); if (fSuccess) { // Set thread attribute list's Pseudo Console to the specified ConPTY fSuccess = UpdateProcThreadAttribute( lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE, hPC, sizeof(HPCON), NULL, NULL); return fSuccess ? S_OK : HRESULT_FROM_WIN32(GetLastError()); } else { hr = HRESULT_FROM_WIN32(GetLastError()); } return hr; } // ... HANDLE hOut, hIn; HANDLE outPipeOurSide, inPipeOurSide; HANDLE outPipePseudoConsoleSide, inPipePseudoConsoleSide; HPCON hPC = 0; // Create the in/out pipes: CreatePipe(&inPipePseudoConsoleSide, &inPipeOurSide, NULL, 0); CreatePipe(&outPipeOurSide, &outPipePseudoConsoleSide, NULL, 0); // Create the Pseudo Console, using the pipes CreatePseudoConsole( {80, 32}, inPipePseudoConsoleSide, outPipePseudoConsoleSide, 0, &hPC); // Prepare the StartupInfoEx structure attached to the ConPTY. STARTUPINFOEX siEx{}; InitializeStartupInfoAttachedToConPTY(&siEx, hPC); // Create the client application, using startup info containing ConPTY info wchar_t* commandline = L"c:\\windows\\system32\\cmd.exe"; PROCESS_INFORMATION piClient{}; fSuccess = CreateProcessW( nullptr, commandline, nullptr, nullptr, TRUE, EXTENDED_STARTUPINFO_PRESENT, nullptr, nullptr, &siEx->StartupInfo, &piClient); // ...
рдЕрдм cmd.exe рдмрдирд╛рдИ рдЧрдИ CONPTY рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ CreatePseudoConsole()
ред рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЙрдирдкреАрдЯреА рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ Cmd рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓рд┐рдЦрдиреЗ / рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИред рдЫрджреНрдо рдХрдВрд╕реЛрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдХрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ResizePseudoConsole()
, рдФрд░ рд╕рдорд╛рдкрди - рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ ClosePseudoConsole()
ред
рдЫрджреНрдо рд╕рд╛рдВрддреНрд╡рдирд╛ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ
CONPTY рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рд▓рд┐рдЦрдирд╛ рд╕рд░рд▓ рд╣реИ:
// Input "echo Hello, World!", press enter to have cmd process the command, // input an up arrow (to get the previous command), and enter again to execute. std::string helloWorld = "echo Hello, World!\n\x1b[A\n"; DWORD dwWritten; WriteFile(hIn, helloWorld.c_str(), (DWORD)helloWorld.length(), &dwWritten, nullptr);
, ConPTY:
// Suppose some other async callback triggered us to resize. // This call will update the Terminal with the size we received. HRESULT hr = ResizePseudoConsole(hPC, {120, 30});
ConPTY:
ClosePseudoConsole(hPC)
: ConPTY ConHost .
!
ConPTY API тАФ , , Windows тАж !
ConPTY API Microsoft, Microsoft ( Windows Linux (WSL), Windows Containers, VSCode, Visual Studio .), , @ConEmuMaximus5 тАФ ConEmu Windows.
, ConPTY API.
, : ConHost . Console API. , , .
, VT, , тАФ .
, Windows, /VT UTF-8 Console API: ┬л VT┬╗ , Console API (, 16M RGB True Color ).
/
/ , ConPTY API: , , , , .
VSCode ( GitHub #45693 ) , Windows.
ConPTY API
ConPTY API Windows 10 / 2018 .
Windows, , , ConPTY. Win32 API, API Runtime Dynamic Linking LoadLibrary()
GetProcAddress()
.
Windows ConPTY, API ConPTY. , , .
, ?
тАж ! , , ! : рдбреА
, , , . тАФ , Windows , .
. Windows Console GitHub . , .