ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²
ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 11.2, Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ CreateFile, ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠΌΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. Π§Π°ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΈ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°Π½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠΎΡΠΌΠ°:
\\.\pipe\[path]pipename
ΠΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°Π½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠΎΡΠΌΠ°:
\\servername\pipe\[path]pipename
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ (.) Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²
ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΈ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°Π½Π°Π»Π°. ΠΡΠ°ΡΠΊΠ°Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π½ΠΈΠΆΠ΅, Π° ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.2.
β’ GetNamedPipeHandleState β Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΠΊΠ°Π½Π°Π» Π² Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ Π»ΠΈ ΠΎΠ½ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠ»ΠΈ Π±Π°ΠΉΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊΠΎΠ²ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠ°Π½Π°Π»Π° ΠΈ ΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.
β’ SetNamedPipeHandleState β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ΅ΠΆΠΈΠΌΠ° (NpMode) ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π΅ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π½Π΅Π΄ΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΠΉ. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.2.
β’ GetNamedPipeInfo β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π»ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠ°Π·ΠΌΠ΅ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² ΠΈ ΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateFile ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ CallNamedFile, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ ConnectNamedPipe, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π»ΠΈΡΡ Π² ΡΠ»ΡΡΠ°Π΅ Windows NT:
Bool ConnectNamedPipe(HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped)
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ lpOverlapped ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ°Π²Π½ΡΠΌ NULL, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ConnectNamedPipe ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ. Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ TRUE. ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ CreateNamedPipe ΠΈ ConnectNamed-Pipe, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ FALSE. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ GetLastError Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ERROR_PIPE_CONNECTED.
ΠΠΎΡΠ»Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ ConnectNamedPipe ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ReadFile ΠΈ Π·Π°ΠΏΠΈΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ WriteFile. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ DisconnectNamedPipe, ΡΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ (ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ°Π½Π°Π»Π°) Π΄Π»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ.
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, WaitNamedPipe, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ, ΠΊΠΎΠ³Π΄Π° Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π΅Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ConnectNamedPipe, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ WaitNamedPipe, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π³ΠΎΡΠΎΠ² ΠΊ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ CreateFile. ΠΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΌ, Π²ΡΠ·ΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ CreateFile ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ Π² ΡΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈΠ»ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ConnectNamedPipe Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ WaitNamedPipe ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΊΠ°Π·Π°Π½, ΠΎΡΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ CreateNamedPipe.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΊ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΊΠ°Π½Π°Π»Π°ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΎΡ Π½Π΅ ΡΠ°Π·ΠΎΡΠ²Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (Π²ΡΠ½ΡΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ReadFile Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ FALSE), ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ:
/* ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°. */
hNp = CreateNamedPipe("\\\\.\\pipe\\my_pipe", β¦);
while (β¦ /* Π¦ΠΈΠΊΠ» ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°.*/) {
ConnectNamedPipe(hNp, NULL);
while (ReadFile(hNp, Request, β¦) {
β¦
WriteFile(hNp, Response, β¦);
}
DisconnectNamedPipe(hNp);
}
CloseHandle(hNp);
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ, Π΄Π°Π²Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π΄ΡΡΠ³ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π² ΡΠ΅ΡΠΈ, Π΅ΡΠ»ΠΈ Π΅ΠΌΡ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΠΈΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (ServerName):
/* ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π΄Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. */
WaitNamedPipe("\\\\ServerName\\pipe\\my_pipe", NMPWAIT_WAIT_FOREVER);
hNp = CreateFile("\\\\ServerName\\pipe\\my_pipe", β¦);
while (β¦/*Π¦ΠΈΠΊΠ» Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ.*/ {
WriteFile(hNp, Request, β¦);
β¦
ReadFile(hNp, Response);
}
CloseHandle (hNp); /* Π Π°Π·ΠΎΡΠ²Π°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. */
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΡΡΡΠ·Π°ΡΡΡΡ Π·Π° ΡΠ΅ΡΡΡΡΡ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ WaitNamedPipe Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΊ ΡΡΠΎΠΌΡ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π΅ΡΠ΅ Π½Π΅ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ; Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠΏΡΡΠ΅Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π½Π° Web-ΡΠ°ΠΉΡΠ΅. ΠΠ°Π»Π΅Π΅, Π² ΡΠ΅Π΄ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π²ΡΠ·ΠΎΠ² CreateFile ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π΅ΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ConnectNamedPipe. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ ConnectNamedPipe Π²Π΅ΡΠ½Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ FALSE, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΡΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΊ Π½Π΅ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ²
ΠΠ° ΡΠΈΡ. 11.2 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΠΈΠΏΠΈΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
β’ ΠΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ°Π½Π°Π»Π°, ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π΄ΠΎΠ»Π³ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ°Π½Π°Π»Π°.
β’ ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠΎΠ².
β’ ΠΠ°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
ΠΡΡΡΠ΅ΡΠ°ΡΡΡΡΡΡ Π·Π΄Π΅ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ WriteFile ΠΈ ReadFile ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, ΠΈ Windows ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ:
BOOL TransactNamedPipe(HANDLE hNamedPipe, LPVOID lpWriteBuf, DWORD cbWriteBuf, LPVOID lpReadBuf, DWORD cbReadBuf, LPDWORD lpcbRead, LPOVERLAPPED lpOverlapped)
Π‘ΠΌΡΡΠ» Π²ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π·Π΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΡΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ WriteFile ΠΈ ReadFile, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°. Π£ΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ, ΡΠ°ΠΊ ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ, Π° ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ lpcbRead ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π³Π»Π°Π²Π° 14) Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠΏΠΈΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°.
Π€ΡΠ½ΠΊΡΠΈΡ TransactNamedPipe ΡΠ΄ΠΎΠ±Π½Π° Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΈΡ. 11.2, ΠΎΠ½Π° ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ²[32].
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
BOOL CallNamedPipe(LPCTSTR lpPipeName, LPVOID lpWriteBuf, DWORD cbWriteBuf, LPVOID lpReadBuf, DWORD cbReadBuf, LPDWORD lpcbRead, DWORD dwTimeOut)
Π€ΡΠ½ΠΊΡΠΈΡ CallNamedPipe Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½Π° ΡΠΎΠ·Π΄Π°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡ Π² ΡΠ΅Π±Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
CreateFile
WriteFile
ReadFile
CloseHandle
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° Π·Π° ΡΡΠ΅Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΠΎΡ.
Π‘ΠΌΡΡΠ» ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ TransactNamedPipe, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠ°Π½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΈΠΌΡ. Π€ΡΠ½ΠΊΡΠΈΡ CallNamedPipe Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ (ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΠ° OVERLAPPED). Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΏΡΠΈ Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ (dwTimeOut) (Π² ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ) ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Π° Π½Π΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ dwTimeOut ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
β’ NMPWAIT_NOWAIT
β’ NMPWAIT_WAIT_FOREVER
β’ NMPWAIT_USE_DEFAULT_WAIT, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ CreateNamedPipe.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°Π»ΠΈΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»Π°Ρ