рдХрдВрдкреНрдпреВрдЯрд░ рдХреНрд▓рдм рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрдирд┐рдлрд░ / рдлрд╛рдпрд░рд╡реЙрд▓ / рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг / рд╕реНрдкрд╛рдпрд╡реЗрдпрд░ / рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдПрдВред рдПрд▓рдПрд╕рдкреА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА

рдХрдВрдкреНрдпреВрдЯрд░ рдХреНрд▓рдм рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрдирд┐рдлрд░ / рдлрд╛рдпрд░рд╡реЙрд▓ / рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рдирд┐рдпрдВрддреНрд░рдг / рд╕реНрдкрд╛рдпрд╡реЗрдпрд░ / рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдПрдВред рдПрд▓рдПрд╕рдкреА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА




рдкреНрд░рджрд╛рддрд╛)ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рдПрдХ рджреЛрд╕реНрдд рдиреЗ рдПрдХ рдЗрдЪреНрдЫрд╛ рдкреНрд░рдХрдЯ рдХреА рдХрд┐ рдЙрд╕реЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд░реВрдо (рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рдФрд░ рдХреНрдпреЛрдВред
рдЪреВрдВрдХрд┐ 2012 рдХреЗ рдмрдЬрдЯ рдореЗрдВ рдХреЛрдИ рдкреИрд╕рд╛ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рджреЛрд╕реНрдд рдиреЗ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдЬреНрд╡рд▓рд┐рдд рд╣реИред рдореИрдВ рд╕реЛрдЪрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдХрд░реВрдБред
рд╕рдмрд╕реЗ рдмрдврд╝рдХрд░, рдПрдХ рд╕рд╡рд╛рд▓ рдиреЗ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рджрд┐рдпрд╛ред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд┐рд░рд╛рдП рдкрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрдВрдкреНрдпреВрдЯрд░ рдХрд┐рд░рд╛рдП рдкрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рддреЛ HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдХреИрд╕реЗ рд░реЛрдХреЗрдВ?
рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░, рдореБрдЭреЗ рдПрд▓рдПрд╕рдкреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд▓реЗрдЦ рдорд┐рд▓рд╛ рдФрд░ рдЕрдм рдореИрдВ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

рдпрд╣ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдореИрдВ рдХреИрдЯ рдХреЗ рддрд╣рдд рдкреВрдЫрддрд╛ рд╣реВрдВред


LSP- рдЖрдзрд╛рд░рд┐рдд HTTP рд╕реНрдирд┐рдлрд░ (рд╕реНрддрд░рд┐рдд рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛)
рдпрд╣ рдЖрд▓реЗрдЦ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ HTTP рдЯреНрд░реИрдлрд┐рдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдирд┐рдлрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЦреБрд▓реА рддрдХрдиреАрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рдХрд╛ рдирд╛рдо рдПрд▓рдПрд╕рдкреА (рд▓реЗрдпрд░реНрдб рд╕рд░реНрд╡рд┐рд╕ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░) рд╣реИред
рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕, рдлрд╛рдпрд░рд╡реЙрд▓ рдФрд░ рдЯреНрд░реИрдлрд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИрдВред
рдЗрд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкреИрдХреЗрдЬ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ Microsoft рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо SDK (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╝рд╛рдЗрд▓реЗрдВ \ Microsoft рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо SDK \ Samples \ NetDS \ WinSock \ LSP \) рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣рдг рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реАред

рд╕рдВрдХрд▓реНрдкрдирд╛
рдореВрд▓ рдпреЛрдЬрдирд╛
рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕реБрдЭрд╛рд╡
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХред

рд╕рдВрдХрд▓реНрдкрдирд╛ред


рдПрд▓рдПрд╕рдкреА рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рдХреБрдЫ рд╡рд┐рдВрдбреЛрдЬ рдореЗрдВ рд╣реБрдХ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред



рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдЬрдЧрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рджрд╛рддрд╛ [рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА] рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдпрджрд┐ рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ - рдиреЗрдЯрд╡рд░реНрдХ, рдЗрдВрдЯрд░рдиреЗрдЯ рдФрд░ рдХреБрдЫ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдиреБрдХрд╕рд╛рдиред
рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
LSP рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рднреА winsock рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рджрд░рдЕрд╕рд▓, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрд╕рдбреАрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддрд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╡рд░реЛрдзрди рдХреЗ рддрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, URL рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдпрд╛ HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
рдПрд▓рдПрд╕рдкреА рджреЛрдиреЛрдВ рдХрд╛рдиреВрдиреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдФрд░ рд╕реНрдкрд╛рдпрд╡реЗрдпрд░ / рдПрдбрд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдХрд╛рдиреВрдиреА рдХрд╛рд░реНрдпрдХреНрд░рдо:


рдРрдбрд╡реЗрдпрд░:



рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдПрд▓рдПрд╕рдкреАред


рдореВрд▓ рдпреЛрдЬрдирд╛


рдпрд╣ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреИрдХреЗрдЬ рдХреА рдореВрд▓ рдпреЛрдЬрдирд╛ рд╣реИред



рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдорд╛рд░рд╛ рдкреНрд░рджрд╛рддрд╛ рдПрдХ рдбреАрдПрд▓рдПрд▓ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд░ рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рдирд╕реЙрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреЗрд╡рд▓ HTTP рдЯреНрд░реИрдлрд╝рд┐рдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдиреАрдЪреЗ рдПрдХ рд╣рд╛рд░реНрдб-рдмрд╛рдЙрдВрдб рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдб (рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛) рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреЛрд░реНрдЯ 80 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред

if((namelen >= sizeof(sockaddr_in)) && (((sockaddr_in*)name)->sin_port == htons(HTTPPort))) { SocketContext->intercept = TRUE; } 


рдЖрдк рдЗрд╕ рдЯреВрд▓ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╛рд░реНрдб-рдбрд┐рдлрд╛рдЗрдиреНрдб рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реЙрдЬрд┐рдХ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред HTTP GET рдЕрдиреБрд░реЛрдз рд╕реНрдЯреНрд░рд┐рдВрдЧ "GET" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рддреБрд▓рдирд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред POST рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реЗрд╡рд╛ рднреА рд╣реИ рдЬреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИ - рд╕реЗрд╡рд╛ рдбреЗрдЯрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдереА, рдпрд╣ рддрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдирд╣реАрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕рднреА рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЗрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╕реЗрд╡рд╛ рд╕реЙрдХреЗрдЯ рд╕рд░реНрд╡рд░ рд╣реИ (рдкреЛрд░реНрдЯ 4004 рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реИ) рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рд╕рд┐рд░реНрдл рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд┐рдХрд▓реНрдк (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреАрдмреАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рдкрд░реАрдХреНрд╖рдг рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВред
1. рдПрд▓рдПрд╕рдкреА рдкрд░рд┐рдпреЛрдЬрдирд╛ (рдПрд▓рдПрд╕рдкреА рдлрд╝реЛрд▓реНрдбрд░)

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА Winsock рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрд╕рдбреАрдХреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ 80 рд╡реЗрдВ рдкреЛрд░реНрдЯ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛:

 if((namelen >= sizeof(sockaddr_in)) && (((sockaddr_in*)name)->sin_port == htons(HTTPPort))) { SocketContext->intercept = TRUE; } 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднрд╡рд┐рд╖реНрдп рдХреА рдХреЙрд▓ рдЯреВ рд╕реЗрдВрдб рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЯреНрд░реИрдлрд┐рдХ рдХрд▓реЗрдХреНрд╢рди рд╕рд░реНрд╡рд┐рд╕ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред SEND рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдордиреЗ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛:
 if (IsHTTPRequest(lpBuffers->buf) && SocketContext->intercept) { SetBlockingProvider(SocketContext->Provider); ret = SocketContext->Provider->NextProcTable.lpWSPSend( serviceConnection.GetSocket(), lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno ); SetBlockingProvider(NULL); } 

рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рднрд░реА рд╣реБрдИ DLL рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рдпреА рдХрдиреЗрдХреНрд╢рди рд░рдЦрддрд╛ рд╣реИред
 class ServiceConnectionKeeper; 

рдЗрд╕рдХреА рднреВрдорд┐рдХрд╛ рд╕реЙрдХреЗрдЯ рдХреЛ рдХрдиреЗрдХреНрдЯ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рднрдВрдбрд╛рд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

2. рдХреЙрдорди рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реЛрд▓реНрдбрд░) - рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрд╕рдбреАрдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕рднреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реЗ рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдХреБрдЫ GUID рдЬреЛрдбрд╝рддреЛрдбрд╝ рднреА рдХрд┐рдП рдЧрдП рдереЗред
рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдлрд╝реЛрд▓реНрдбрд░) рдПрд▓рдПрд╕рдкреА рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╣реИред рд╣рдордиреЗ рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ - рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЯреАрд╕реАрдкреА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдЕрдм рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди рд╣рдо рдЯреАрд╕реАрдкреА рдкреНрд░рджрд╛рддрд╛ рдЖрдИрдбреА рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЯреАрд╕реАрдкреА рдХреЗ рдКрдкрд░ рд░рдЦрд╛ред
 if (IsHTTPRequest(lpBuffers->buf) && SocketContext->intercept) { SetBlockingProvider(SocketContext->Provider); ret = SocketContext->Provider->NextProcTable.lpWSPSend( serviceConnection.GetSocket(), lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno ); SetBlockingProvider(NULL); } 


3. рд╕реЗрд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рд╕реЗрд╡рд╛ рдлрд╝реЛрд▓реНрдбрд░) рдПрдХ рдпрд╛рддрд╛рдпрд╛рдд рдХрд▓реЗрдХреНрдЯрд░ рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд┐рд╕ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗред рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕реЙрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕реЗрд╡рд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реНрдХ MSDN рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдП рдЧрдП рд╣реИрдВред рд╕рд░реНрд╡рд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдзрд╛рд░рд╛ "\ r \ n \ r \ n" (рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ 2 рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ) рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╕рд╣реЗрдЬрддреА рд╣реИред

 do { result = recv(clientSocket, buffer, PACKSIZE, 0); if (result > 0) { response += std::string(buffer, result); do { position = response.find(messageTerminator); if (std::string::npos != position) { if (!CollectorServer::Instance()->SaveData(std::string(response.begin(), response.begin() + position))) { return -1; } response = response.substr(position + messageTerminator.size()); } } while (std::string::npos != position); } else { break; } } while (SOCKET_ERROR != result); 

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкреВрд░реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдмрд┐рд▓реНрдб рд░рд┐рдЬрд▓реНрдЯ рдлреЛрд▓реНрдбрд░ рдореЗрдВ NSI рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рд▓реЗрдВ рдФрд░ Nsi рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рд╣рдореЗрдВ рд╕реНрдерд╛рдкрдирд╛ setup.exe рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ
Setup.exe рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдЙрдирдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдЕрдирдкреИрдХ рдХрд░ рджреА рдЬрд╛рдПрдВрдЧреАред LSP.DLL рдХреЛ% SYSTEMROOT% \\ system32 \\ LSP.dll рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд░реНрд╡рд┐рд╕ рдФрд░ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрд╛рдЗрд▓реНрд╕ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рде рд╣реА, рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрддрд┐рд╣рд╛рд╕ рдлрд╝рд╛рдЗрд▓ C: // рдХреА рдЬрдбрд╝ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдЧреАред

рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕рд▓рд╛рд╣

рдпрд╣ рдЖрд▓реЗрдЦ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рд╕рднреА рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ;
рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рд╣рдЯрд╛рдПрдВ;
рдмреНрд▓реЙрдХ рдХрдиреЗрдХреНрд╢рди (рдЬреИрд╕рд╛ рдХрд┐ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХрд░рддрд╛ рд╣реИ);
рдЕрд╡рд░реЛрдзрди SLL рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ (рдпрд╣ MITM рдЗрдВрдЯрд░рд╕реЗрдкреНрд╢рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ) (рдореИрди рдЗрди рдж рдорд┐рдбрд▓)
рдПрд▓рдПрд╕рдкреА рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд░реЗрдХ рдереАрдВ, рддрд╛рдХрд┐ рдЕрдлрд╕реЛрд╕ рди рд╣реЛ рдХрд┐ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рд╣реБрдИ рдереА, рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╣рд░ рдмрд╛рд░ Windows рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ VM рдЫрд╡рд┐ рдХреЛ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдВрдЯреА-рд╡рд╛рдпрд░рд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рднреА рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдУрдПрд╕ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдЖрдкрдХреЗ рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рдЯреНрд░реИрдлрд┐рдХ рдХреЛ рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рддрд░реНрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдорд╛рд░рд╛ рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдбреЗрдЯрд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдиреЗ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣реИред

рдпрд╣ рдЙрдкрдХрд░рдг рдХреЗрд╡рд▓ 32-рдмрд┐рдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЗрд╕реЗ 64-рдмрд┐рдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ 64-рдмрд┐рдЯ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди LspCatalog64Only рдзреНрд╡рдЬ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрд╕рдбреАрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдереЗ, рдЖрдк рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдХреЛрдб рдХреЗ рд╕рднреА рдмреНрд▓реЙрдХ рднреА рдиреЛрдЯ рдХрд┐рдП рдЬреЛ рдЯрд┐рдкреНрдкрдгреА // ADDED рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдПрд▓рдПрд╕рдкреА рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ GUID рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрднреА рднреА рд╡рд╣рд╛рдВ рд╣реИрдВред

0. рдореВрд▓ рд▓реЗрдЦ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ


1. MSDN рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо SDK рдкреНрд░рд▓реЗрдЦрдиред

2. рдПрд▓рдПрд╕рдкреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ ред

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЦреБрдж рдпрд╣рд╛рдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ GITHAB рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреА рдЧрдИ рд╣реИ

Source: https://habr.com/ru/post/In162401/


All Articles