рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рдореЗрдореЛрд░реА - рдХреНрдпреЛрдВ?

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

рдПрдХ рдкреНрд░рд╢реНрди рд╢реЗрд╖ рд╣реИ - рдпрд╣ рдХреНрдпреЛрдВ рд╣реИ? рдЖрдк рд╕реНрд╡реИрдк рдлрд╝рд╛рдЗрд▓, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдХреНрд░реИрд╢ рдбрдВрдк рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдореЛрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдВрдмреА рдмрд╣рд╕ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕реЗ рдкрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╛рдореЛрд╣ рдХреЗ рд╕рдорд╛рди рд╣реИ - рд╣рд░ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рд╣рд╛рде рд░рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИред

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

рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╕реА + + рдХреЗ рд╕рдорд╛рди рд╕рдВрджрд┐рдЧреНрдз рд░реВрдк рд╕реЗ рдЫрджреНрдордХреЛрдб рдореЗрдВ рд╣реЛрдВрдЧреЗред рдХрдИ рдкрддреНрд░ рд╣реЛрдВрдЧреЗ рдФрд░ рдмрд╣реБрдд рд╕рд╛рдл рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрд▓реАрдирд░ рдХреЛрдб рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИред

So. рджреВрд░ рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА, рдкрд╛рд╕рд╡рд░реНрдб рдпрд╛ рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рдирдВрдмрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж - рдмрд╕ рдПрдХ рд░рд╣рд╕реНрдп) рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рди рдХрд░реЗрдВ:
 { const int secretLength = 1024; WCHAR secret[secretLength] = {}; obtainSecret( secret, secretLength ); processWithSecret( what, secret, secretLength ); } 
рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрд┐рд╕реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдбрд╛рдпрдирд╛рд╕реЛрд░ рдЬреИрд╕реА рдПрдХ рдкреНрд░рд╛рдЪреАрди рддрдХрдиреАрдХ, рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдореМрдЬреВрдж рд╣реИ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡рд┐рдВрдбреЛрдЬ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рдФрд░ рдорд╢реАрди рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрдорддреМрд░ рдкрд░, рдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЖрдИрдбреАрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛:
 //MAX_FILE_PATH == 1024 error_status_t rpcRetrieveFile( [in] const WCHAR fileName[MAX_FILE_PATH], [out] BYTE_PIPE filePipe ); 
рдпрд╣рд╛рдВ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдЬреЛ рдордирдорд╛рдиреА рд▓рдВрдмрд╛рдИ рдХреЗ рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЗ рддрд╣рдд рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред

рдпрд╣ рд╡рд┐рд╡рд░рдг MIDL рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ (.h) рд╣реИ
 error_status_t rpcRetrieveFile ( handle_t IDL_handle, const WCHAR fileName[1024], BYTE_PIPE filePipe); 

рдпрд╣рд╛рдВ MIDL рдиреЗ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛, рдФрд░ рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд┐рдЫрд▓реЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реИрдВред

рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ:
 void retrieveFile( handle_t binding ) { WCHAR remoteFileName[MAX_FILE_PATH]; retrieveFileName( remoteFileName, MAX_FILE_PATH ); CBytePipeImplementation pipe; rpcRetrieveFile( binding, remoteFileName, pipe ); } 
рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реИ - рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдирд╛рдо) MAX_FILE_PATH - 1 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдкрдВрдХреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╢реВрдиреНрдп рдЪрд░рд┐рддреНрд░ (рдЖрдк рдЕрд╢рдХреНрдд рдЪрд░рд┐рддреНрд░ рдХреЛ рдирд╣реАрдВ рднреВрд▓ рдЧрдП) рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░реНрдЯреА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ - рдкреВрд░реНрдг рдкрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдЗрд╕реЗ рдЦреЛрд▓рддреА рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреА рд╣реИред

рд╣рд░ рдХреЛрдИ рдЖрд╢рд╛рд╡рд╛рдж рд╕реЗ рднрд░рд╛ рд╣реИ, рдЙрддреНрдкрд╛рдж рдХреЗ рдХрдИ рд░рд┐рд▓реАрдЬ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рдЕрднреА рддрдХ рд╣рд╛рдереА рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИред рд╣рд╛рдереА рдпрд╣рд╛рдБред C ++ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░
 const WCHAR fileName[1024] 
рдпрд╣ рдПрдХ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд╣реИред RpcRetrieveFile () рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдкрд░рдд рд╣реИ рдЬреЛ рдЙрд╕реА MIDL рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреИрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА WinAPI NdrClientCall2 () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╡рд┐рдВрдбреЛрдЬ, рдХреГрдкрдпрд╛ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд░рдкреАрд╕реА рдХреЙрд▓ рдХрд░реЗрдВ," рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ NdrClientCall2 () рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реВрдЪреА рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ MIDL рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ IDL рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдкреНрд░рд┐рдВрдЯрдл () рдХреЗ рд╕рдорд╛рдиред

NdrClientCall2 () рдзреНрдпрд╛рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджреВрд╕рд░реА рддрд░рдл рдкреИрдХ рдХрд░рддрд╛ рд╣реИ (рдЗрд╕реЗ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдЧреЗ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд░ "рдкреНрд░рдХрд╛рд░ рдХрд╛ 1024 рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА" рд╣реИред

рдЕрдм рдХреЛрдб рдореЗрдВ рд╣рдо рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдХреЙрд▓ рдорд┐рд▓рддреЗ рд╣реИрдВ:
 processWithSecret( whatever ); retrieveFile( binding ); 
ProcessWithSecret () рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдПрдХ рдЧреБрдкреНрдд рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП 2 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдЦрд╛рддреА рд╣реИ, рдФрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рддреА рд╣реИред рдЕрдЧрд▓рд╛, рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд () рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ 18 рд╡рд░реНрдгреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ (18 рд╡рд░реНрдг + рдЕрдВрддрд┐рдо рд╢реВрдиреНрдп - рдХреЗрд╡рд▓ 19, рдпрд╛рдиреА 38 рдмрд╛рдЗрдЯреНрд╕) рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдареАрдХ рдЙрд╕реА рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдлрд┐рд░ рдПрдХ рд░рд┐рдореЛрдЯ рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкреИрдХреЗрдЯ рдореЗрдВ рдкреВрд░реЗ рдЕрд░реЗрдВрдЬрдореЗрдВрдЯ (38 рдмрд╛рдЗрдЯреНрд╕ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ 2048) рдХреЛ рдкреИрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреИрдХреЗрдЯ рдХреЛ рдлрд┐рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрддреНрдпрдзрд┐рдХ рдЕрдирдкреЗрдХреНрд╖рд┐рдд

рдЧреБрдкреНрдд рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ рдХрднреА рднреА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд░рд╣рд╕реНрдп рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рдИ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рджреЛрд╖ рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ "рдЙрдкрдпреЛрдЧ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдХреМрди рдкрд╛рдЧрд▓ рд╣реИ?

рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рди рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк codepad.org рдкрд░ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ
 const int bufferSize = 32; void first() { char buffer[bufferSize]; memset( buffer, 'A', sizeof( buffer ) ); } void second() { char buffer[bufferSize]; memset( buffer, 'B', bufferSize / 2 ); printf( "%s", buffer ); } int main() { first(); second(); } 
рдЗрд╕рдХрд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рдХрд╛рд░реНрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо 16 рд╡рд░реНрдгреЛрдВ 'рдмреА' рдФрд░ 16 рд╡рд░реНрдг 'рдП' рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИред

рдЕрдм рдкрд┐рдЪрдХрд╛рд░реА рдФрд░ рдЯрд╛рд░реНрдЪ рд▓рд╣рд░рд╛рдП рдЬрд╛рдиреЗ рдФрд░ рдЧреБрд╕реНрд╕рд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ std :: рд╡реЗрдХреНрдЯрд░, std :: string рдФрд░ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрд╡рд┐рддреНрд░ рдпреБрджреНрдз 9 рд╣рдЬрд╛рд░ рд╕реЗ рдХрдо рдирд╣реАрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдпрд╣рд╛рдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - рдЖрд░рдкреАрд╕реА рдХреЗ рдЖрдВрддреНрд░ рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рд╡рд╣рд╛рдВ рд▓рд┐рдЦреЗ рдЧрдП рдХреЙрд▓рд┐рдВрдЧ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдЧрд╛ред рдирддреАрдЬрддрди, рдирд┐рдХрдЯрддрдо рдкрддреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ (рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ) рдпрджрд┐ рдореЗрдореЛрд░реА рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХреА рдЧрдИ рдереА рддреЛ рд╡рд┐рдлрд▓рддрд╛ рд╣реЛрдЧреАред рдЗрди рдирд┐рдХрдЯрддрдо рдкрддреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ? рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ - рдЙрд╕рдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛ рдХрд┐ rpcRetrieveFile () рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ RPC рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрджрд▓рдХрд░ рдпрд╛ рджреЛрдиреЛрдВ рддрд░рдл рдХреЛрдб рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрди: рд▓рд┐рдЦрдХрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

SecureZeroMemory () рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ - рдпрджрд┐ рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд╣рд╕реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрдо рд╕реЗ рдХрдо рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╕рд░рдгреА рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧреАред рдбрд╛рд░реНрд╡рд┐рди рдкреБрд░рд╕реНрдХрд╛рд░ рдорд┐рд▓рдирд╛ рдХрдард┐рди рд╣реИред

рджрд┐рдорд┐рддреНрд░реА рдореЗрд╢реНрдЪреЗрд░реАрдХреЛрд╡,
рдбреЗрд╡рд▓рдкрд░ рдЙрддреНрдкрд╛рдж рд╡рд┐рднрд╛рдЧ

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


All Articles