рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдЬреЛ рдЖрдкрдХреЛ
рдХреБрд▓ рдХрдорд╛рдВрдбрд░ рдХреЗ 64 рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЯреАрд╕реАрдкреА) рдореЗрдВ 32 рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбреЗрдореЛ рд╕реНрдЯреЗрдЬ рдкрд░ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ (рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдирд┐рдХрд╛рд▓рдиреЗ рдпрд╛ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде WCX рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЦреИрд░, рдЕрдВрдд рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╣рд┐рд╕реНрд╕реЗ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг
рдЯреАрд╕реА рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди WCX, WFX, WLX, WDX рдХреЗ рд╕рд╛рде DLL рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ (рдореЙрдбреНрдпреВрд▓ рдХреА рд╢реНрд░реЗрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдпреБрдХреНрдд рд╣реИрдВред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рднреА рд▓реЗрдЦрдХреЛрдВ рдиреЗ 64 рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрд╛ рд╣реИред рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ ...
рдкреНрд░рд╢реНрди - рдХреНрдпрд╛ рдореИрдВ рдореМрдЬреВрджрд╛ 32 рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?
рдЙрддреНрддрд░ - рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред
рдпрджрд┐ рдЖрдк рдбрд╛рдпрдиреЗрдорд┐рдХ 32-рдмрд┐рдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ 64-рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдирдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЦреЛрдЬ рдЖрдкрдХреЛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рд╛рдПрдЧреАред рдпрд╣ рдПрдХ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдИрдкреАрд╕реА (рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреАрд╕реА рд╕реНрд░реЛрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдо рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░рддрд┐рд░реВрдкрдг рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░реЗрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦреАрдВрдЪреЗрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

рд╕рдВрднрд╛рд╡рд┐рдд IPC рд╡рд┐рдХрд▓реНрдк
MSDN - рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рдЗрдкреНрд╕ рдХреЛ рдЪреБрдирд╛ред рдпрд╣ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЛ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкрд╛рдЗрдк рдЪреИрдирд▓ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд▓ рд░рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп
- рдкрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдкреАрдврд╝реА
- рдкрд╛рдЗрдк рдирд┐рд░реНрдорд╛рдг
- рдПрдХ рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
- рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдХрд╛ рдирд╛рдо рдЧреБрдЬрд░ рд░рд╣рд╛ рд╣реИ
- рдкреНрд░рддреАрдХреНрд╖рд╛ рдФрд░ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ
рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо UuidCreate () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХ UUID (GUID) рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ (UuidToString) рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдкрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдкрде рднрд░реЗрдВред рдПрдХ рдкрд╛рдЗрдк рдмрдирд╛рдПрдВ (CreateNamedPipe) рдмреНрд▓реЙрдХрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (CreateProcess) рдЪрд▓рд╛рдПрдБред рдкрд╛рдЗрдк рдХрд╛ рдирд╛рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╣рдо рдЧреНрд░рд╛рд╣рдХ (ConnectNamedPipe) рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдВрдж рдХрд░рддреЗ рд╕рдордп
- рдкрд╛рдЗрдк рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ
- рдмрдВрдж рдкрд╛рдЗрдк (рдЖрдо рддреМрд░ рдкрд░ рдореБрдлреНрдд рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрди)
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ (рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯрдирд╛рдорд╛рдЗрдбрдкрд╛рдЗрдк), рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЯрд░реНрдорд┐рдиреЗрдЯрдкреНрд░реЛрд╕реЗрд╕) рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ, рдкрд╛рдЗрдк рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВ (CloseHandle)
рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп
- рдирд╛рдо рдкрд╛рдЗрдк рдорд┐рд▓
- рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдЗрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- рд▓реЛрдб рдореЙрдбреНрдпреВрд▓
- рд╕рдВрджреЗрд╢ рдХреА рдЙрдореНрдореАрдж
рдкрд╛рдЗрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ (CreateFile) рдФрд░ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░реЗрдВ (LoadLibrary) рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрддреЗ (GetProcAddress) рдХреЛ рд╕рд╣реЗрдЬреЗрдВред рд╣рдо рд╕рдВрджреЗрд╢ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЪрдХреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВ рдФрд░ рдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред
рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ
- рдкрд╛рдЗрдк рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- рдЕрдирд▓реЛрдб рдореЙрдбреНрдпреВрд▓
рдкрд╛рдЗрдк (CloseHandle) рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ (FreeLibrary) рдХреЛ рдЕрдирд▓реЛрдб рдХрд░реЗрдВред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмреБрд▓рд╛рддреЗ рд╕рдордп
- рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрдХ рдХрд░реЗрдВ
- рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдкрд╛рд░рд┐рдд рдХрд░реЗрдВ
- рдЬрд╡рд╛рдм рдорд┐рд▓рд╛
- рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ
рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ
__declspec(dllexport) HANDLE __stdcall OpenArchive(tOpenArchiveData *ArchiveData) { if (s_init && ArchiveData) { // serialize uint8_t *p = s_buff; SET_FUNC(p, OPENARCHIVE) SET_CALLTYPE(p, CALL_QUERY) SET_STR_A(p, ArchiveData->ArcName) SET_INT(p, ArchiveData->OpenMode) // send DWORD writeSize = p - s_buff; DWORD writedSize; while (WriteFile(s_pipe, s_buff, writeSize, &writedSize, NULL)) { assert(writeSize == writedSize); // recv DWORD readedSize; if (ReadFile(s_pipe, s_buff, PIPE_BUFF_SIZE, &readedSize, NULL)) { // deserialize uint8_t *p = s_buff; uint8_t func; GET_FUNC(p, func) uint8_t callType; GET_CALLTYPE(p, callType) if (callType == CALL_ANSWER) { assert(func == OPENARCHIVE); GET_INT(p, ArchiveData->OpenResult) HANDLE r; GET_HANDLE(p, r) // result return r; } else if (callType == CALL_QUERY) { CALL_PROC } assert(0); } } ArchiveData->OpenResult = E_NOT_SUPPORTED; } return NULL; }
OpenArchive рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж TC рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ tOpenArchiveData рдХреА рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕рдХреЗ рдкрд╛рд╕ рдЬрд╛рддреА рд╣реИред
typedef struct { char* ArcName; int OpenMode; int OpenResult; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tOpenArchiveData;
рд╣рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреА рд╕реНрдореГрддрд┐ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддреА рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐ (рд╕реВрдЪрдХ) рдХреЗ рд▓рд┐рдП рд╕реВрдЪрдХ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдВрд░реЗрдЦрдг рдХреЗ рдХрд╛рд░рдг, рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреЙрдкреА рдХрд░рдХреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╕рд╛рде рд╣реА, рдХреБрдЫ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди (ArcName, OpenMode) рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдкрд░рд┐рдгрд╛рдо (OpenResult) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдлрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (Cmt *)ред рд╣рдореЗрдВ рдорд╛рд░реНрд╢рд▓ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддреН, рдбреЗрдЯрд╛ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рд▓рд┐рдЦрд┐рдд рдореИрдХреНрд░реЛ SET_ * рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред SET_INT рдмрдлрд░ рдХреЛ 32 рдмрд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЗрдВрдЯ рд▓рд┐рдЦрддрд╛ рд╣реИред SET_STR_A рдмрдлрд░ рдХреЛ рд╕реВрдЪрдХ рдХреА рд╡реИрдзрддрд╛ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ рд╡реИрдзрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рд╡рд░реНрдгреЛрдВ рдХреА рд╕рд░рдгреА рд▓рд┐рдЦрддрд╛ рд╣реИред рдмрдлрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджреЛ рдорд╛рди рд░рдЦреЗ рдЧрдП рд╣реИрдВ: рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрд░реЛрдз рд╣реИред рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдмрдлрд░ рдХреЛ рд▓рд┐рдЦреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рдЗрдк рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп, рджреЛ рдорд╛рди рдкрдврд╝реЗрдВ: рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдЕрдиреБрд░реЛрдз рд╣реИред рдпрджрд┐ рдпрд╣ рдЙрддреНрддрд░ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ, рд╕рдВрд░рдЪрдирд╛ рдХреЛ рднрд╛рдЧ рд▓рд┐рдЦреЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред рдпрджрд┐ рдпрд╣ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╣ рд╕рдм CALL_PROC рдореИрдХреНрд░реЛ рдореЗрдВ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ)ред рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдпрд╣ рдорд╛рдирд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпрд╣ рд╣рд╕реНрддрд░реЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реВрдЪрдХ рд╣реИред рдЗрд╕реЗ рдЯреАрд╕реА рдХреЗ рдмрд╛рдХреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорд╣рддреНрд╡ рдХреЗрд╡рд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ рдПрдХ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛ рд╣реИред 32 рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ, рд╕реВрдЪрдХ 32 рдмрд┐рдЯ рд╣реИ, рдХреНрд░рдорд╢рдГ 64 рдореЗрдВ, 64 рдмрд┐рдЯ рдореЗрдВред рдФрд░ рдпрд╣ рдПрдХ 32 рдмрд┐рдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ 64 рдФрд░ рдлрд┐рд░ 32 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред
рджреЛ рдлрд╝рдВрдХреНрд╢рди (SetChangeVolProc, SetProcessDataProc) рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдлреАрдбрдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рддрдереНрдп рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рддреЗ рд╣реИрдВред CALL_PROC рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╕рдВрджреЗрд╢ рдорд┐рд▓рдиреЗ рдкрд░
- рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ
- рдЕрдирдЬрд┐рдк рд╡рд┐рдХрд▓реНрдк
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рди
- рдкрд░рд┐рдгрд╛рдо рдкреИрдХ рдХрд░реЗрдВ
- рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ
рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдЪрдХреНрд░
while (s_loop) { DWORD readedSize; if (ReadFile(s_pipe, s_buff, PIPE_BUFF_SIZE, &readedSize, NULL)) { // deserialize, process, serialize uint8_t *p = s_buff; uint8_t func; GET_FUNC(p, func) uint8_t callType; GET_CALLTYPE(p, callType) assert(callType == CALL_QUERY); if (func == OPENARCHIVE) { tOpenArchiveData openArchiveData = {0}; GET_STR_A(p, openArchiveData.ArcName) GET_INT(p, openArchiveData.OpenMode) HANDLE r = OpenArchive(&openArchiveData); p = s_buff; SET_FUNC(p, OPENARCHIVE) SET_CALLTYPE(p, CALL_ANSWER) SET_INT(p, openArchiveData.OpenResult) SET_HANDLE(p, r) } else ... ... { assert(0); } DWORD writeSize = p - s_buff; DWORD writedSize; if (!WriteFile(s_pipe, s_buff, writeSize, &writedSize, NULL) || writeSize != writedSize) { return -6; } } else if (GetLastError() != ERROR_TIMEOUT) { break; } }
рд╕рдм рдХреБрдЫ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рд╣рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ, рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ (GET_ *) рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рднреЗрдЬреЗрдВред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
int __stdcall ChangeVolProc(char *ArcName, int Mode) { uint8_t *p = s_buff; SET_FUNC(p, CHANGEVOLPROC) SET_CALLTYPE(p, CALL_QUERY) SET_STR_A(p, ArcName) SET_INT(p, Mode) DWORD writeSize = p - s_buff; DWORD writedSize; assert(WriteFile(s_pipe, s_buff, writeSize, &writedSize, NULL) || writeSize == writedSize); DWORD readedSize; assert(ReadFile(s_pipe, s_buff, PIPE_BUFF_SIZE, &readedSize, NULL)); p = s_buff; uint8_t func; GET_FUNC(p, func) uint8_t callType; GET_CALLTYPE(p, callType) assert(func == CHANGEVOLPROC && callType == CALL_ANSWER); int r; GET_INT(p, r) return r; }
рд╣рдорд╛рд░реЗ рд╢реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░реЗрдЧрд╛ (рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде)ред
рдпрд╣ рд╕рдм рд╕рд░реЛрдЧреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдкреНрддрд┐, рд╕реНрдЯрдм рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕рд╛рде рд╣реИред
рд╕рдорд╛рдзрд╛рди рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖: рдпрд╣ рд╕рдм рдореЙрдбреНрдпреВрд▓ рдХреА рдЧрддрд┐ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред
рд╢рд╛рдпрдж рдпрд╣ рд╕рдм ...
рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрднреА рднреА рдХрдИ рдореБрджреНрджреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдЪреБрдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЗрд╡рд▓ рдПрдХ рдиреНрдпреВрдирддрдо рдбреЗрдореЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд┐рд╕реНрддрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕реЗрдЯ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рд╣реИ, рдФрд░ рдирд┐рд░реНрдпрд╛рдд рддрд╛рд▓рд┐рдХрд╛ рдЙрдкрд▓рдмреНрдз рдореЙрдбреНрдпреВрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдмрд╛рдд рдХрд░рддреА рд╣реИред рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдбрдмреНрд▓реНрдпреВрдПрд▓рдПрдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрддред рдЖрджрд┐
рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб
рд╕реНрд░реЛрдд рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк
рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП рдкреАрд▓реНрд╕ рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдореА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг: msi.wcx рдореЙрдбреНрдпреВрд▓, msi.exe рдкреНрд░реЛрдЧреНрд░рд╛рдо, msi.wcx64 рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдФрд░ рдореИрдВ рдЖрдкрдХреА рд░рд╛рдп рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛