ΠΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ Π² 32-Π±ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Windows
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π‘ΠΌΡΡΠ» Π΅Π³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡ: ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π² ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ. ΠΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΠΈ ΠΎΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ «ΡΠ±ΠΈΡΡ» Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΡ ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π½ΠΈΡΡΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ Π² 32-Π±ΠΈΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Windows (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
- 1 Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅
- 1.1 ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ
- 1.2 ΠΡΠ½ΠΎΠ²Ρ Π²ΡΠ·ΠΎΠ²Π° API-ΡΡΠ½ΠΊΡΠΈΠΉ
- 1.3 ΠΡΠ½ΠΎΠ²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows
- 2. ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
- 2.1 ΠΠΈΡΡΠΈΠ½Π³
- 2.2 ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ
- ΠΡΠ²ΠΎΠ΄
Π¦Π΅Π»ΡΡ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° 32-Π±ΠΈΡΠ½ΠΎΠΌ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅, ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΠ‘ WINDOWS.
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΎΡΡΠ΅ΡΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ WINDOWS, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° API-ΡΡΠ½ΠΊΡΠΈΡΡ . ΠΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°.
1. Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅
1.1 ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΠ‘ WINDOWS:
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Windows ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ API (ApplicationProgramInterface, Ρ. Π΅. ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ). ΠΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ Π΄Π²ΡΡ ΡΡΡΡΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ°ΠΊΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
Π‘ΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ API ΠΈ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ Π² ΡΠ°ΠΉΠ»Π΅ WIN32. HLP, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ Borland C++.
ΠΠ»Π°Π²Π½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΡΠ΅Π΄Π΅ Windows ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΊΠ½ΠΎ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
ΠΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ: ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΡΠΏΠΈΡΠΊΠΈ, ΠΎΠΊΠ½Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Ρ. ΠΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΏΠΎ ΡΡΡΠΈ, ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠΊΠ½Π°ΠΌΠΈ, Π½ΠΎ ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠΌΠΈ ΠΎΡΠΎΠ±ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ. Π‘ΠΎΠ±ΡΡΠΈΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ Ρ ΡΡΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (ΠΈ ΡΠ°ΠΌΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ), ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ ΠΏΡΠΈΡ ΠΎΠ΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΎΠΊΠ½Π°.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Windows ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π³ΠΌΠ΅Π½Ρ. ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° Π½Π° ΡΠ·ΡΠΊΠ΅ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ° ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π°Π΄ΡΠ΅Ρ Π»ΡΠ±ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ 32-Π±ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ EBX.
Π‘Π»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΠ° 5 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±ΡΠ΅ΠΌΠ΅ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΡΠ΅ΠΊΠ° (ΠΎΠ±ΡΠ΅ΠΌΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ). ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΡΡ, ΡΠ»ΡΡΡΠ°ΡΡΠ΅ΠΉ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Windows ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ. ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°Π΄Π°ΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΄Π°ΠΆΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΡ — Π»ΡΠ±Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°.
1.2 ΠΡΠ½ΠΎΠ²Ρ Π²ΡΠ·ΠΎΠ²Π° API-ΡΡΠ½ΠΊΡΠΈΠΉ
Π€ΡΠ½ΠΊΡΠΈΠΈ API Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΡΡ ΠΎΠΆΠΈΠΌ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π² ΡΠ·ΡΠΊΠ°Ρ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΡΡΠ΅ΠΊ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ:
intMessageBox (HWNDhWnd, LPCTSTRlpText, LPCTSTRlpCaption, UINTuType);
Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° Π² Π°ΡΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π±Π»ΠΎΠ½Ρ:
includelib user32. lib
EXTERN MessageBoxA@16:NEAR
ΠΠ_ΠΠ equ 0
STR1 DB «ΠΠ΅Π²Π΅ΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄! «, 0
STR2 DB «Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.», 0
HW DWORD ?
PUSH ΠΠ_ΠΠ
PUSH OFFSET STR1
PUSH OFFSET STR2
PUSH HW
CALL MessageBoxA@16
Π ΡΠ°ΠΊΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ API ΡΡΠ½ΠΊΡΠΈΠΈ MessageBox Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ANSI-ΡΡΠ°Π½Π΄Π°ΡΡ, ΡΠΈΠΌΠ²ΠΎΠ» @ Π² ΡΠΎΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈ ΡΠΈΡΠ»ΠΎ N Π² ΠΊΠΎΠ½ΡΠ΅, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±Π°ΠΉΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ΅ΠΊ.
ΠΠ° Π·Π°ΠΌΠ΅Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ Π²ΡΠ·ΠΎΠ²Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ CALL Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ΅ MASM Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° INVOKE. ΠΡΠ·ΠΎΠ²ΡΡΠ½ΠΊΡΠΈΠΈ:
PUSH par1
PUSH par2
PUSH par3
PUSH par4
CALL NAME_PROC@N
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²ΠΈΠ΄:
INVOKE NAME_PROC, par4, par3, par2, par1
ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅:
PROC PROTO: DWORD, :DWORD, :DWORD, :DWORD
Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
includelib user32. lib
MessageBoxAPROTO :DWORD, :DWORD, :DWORD, :DWORD,
ΠΠ_ΠΠ equ 0
STR1 DB «ΠΠ΅Π²Π΅ΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄! «, 0
STR2 DB «Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.», 0
HW DWORD ?
INVOKE MessageBoxA, HW, OFFSET STR1, OFFSET STR2, MB_OK
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°Π΄Π°ΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ. Π’Π°ΠΊ, ΡΡΡΡΠΊΡΡΡΠ΅:
typedefstructtagMSG { // msg
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΠΊΠΎΠ΄:
MSGSTRUCT STRUC
MSHWND DD ?
MSMESSAGE DD ?
MSWPARAM DD ?
MSLPARAM DD ?
MSTIME DD ?
MSPT DD ?
MSGSTRUCTENDS
1.3 ΠΡΠ½ΠΎΠ²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows
ΠΠ°Π»Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π ΡΠ΅Π»ΠΎΠΌ, Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ:
Β· Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠΎΠ½
Β· Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
Β· Π¦ΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
Β· ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠΎΠ½. Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΠΊΠΎΠ½ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ RegisterClassA, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ WNDCLASS, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠΊΠ½Π΅.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°. ΠΠ° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateWindowExA (ΠΈΠ»ΠΈ CreateWindowA) ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠΊΠ½Π°. ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²Π΅ΡΡΠΌΠ° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π¦ΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π€ΡΠ½ΠΊΡΠΈΡ GetMessage () «ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°Π΅Ρ» ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Π³ΠΎ Π² ΡΡΡΡΠΊΡΡΡΡ MSG.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ TranslateMessage, ΡΠΎ Π΅Π΅ ΠΊΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠΈΡ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ WM_KEYDOWN ΠΈ WM_KEYUP, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΡΡΡΡ Π² WM_CHAR ΠΈ WM_DEADCHAR, Π° ΡΠ°ΠΊΠΆΠ΅ WM_SYSKEYDOWN ΠΈ WM_SYSKEYUP, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΠΈΠ΅ΡΡ Π² WM_SYSCHAR ΠΈ WM_SYSDEADCHAR. Π‘ΠΌΡΡΠ» ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ Π² Π·Π°ΠΌΠ΅Π½Π΅, Π° Π² ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΈ ΠΎΡΠΏΡΡΠΊΠ°Π½ΠΈΠΈ Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎ-ΡΠΈΡΡΠΎΠ²ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΡΠΈ Π² ΠΎΠΊΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠ΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_KEYDOWN, Π·Π°ΡΠ΅ΠΌ WM_KEYUP, Π° Π·Π°ΡΠ΅ΠΌ ΡΠΆΠ΅ WM_CHAR.
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΠΈΠΊΠ»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ GetMessage Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ Π²ΡΡ ΠΎΠ΄Π΅ (ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_QUIT). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΈΠΊΠ» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΠ³ΡΠ°Π΅Ρ Π΄Π²ΠΎΡΠΊΡΡ ΡΠΎΠ»Ρ: ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠΊΠ½Π°, ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
MSG_LOOP:
INVOKE GetMessageA, OFFSET MSG, 0,0,0
CMP AX, 0
JE END_LOOP
INVOKE TranslateMessage, OFFSET MSG
INVOKE DispatchMessageA, OFFSET MSG
JMP MSG_LOOP
END_LOOP:
INVOKE ExitProcess,[MSG.MSWPARAM]
_ERR:
JMP END_LOOP
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
WNDPROC PROC
PUSH EBP
MOV EBP, ESP; ΡΠ΅ΠΏΠ΅ΡΡ EBP ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°
PUSH EBX
PUSH ESI
PUSH EDI
PUSH DWORD PTR [EBP+14H]; LPARAM (lParam)
PUSH DWORD PTR [EBP+10H]; WPARAM (wParam)
PUSH DWORD PTR [EBP+0CH]; MES (message)
PUSH DWORD PTR [EBP+08H]; HWND (hwnd)
CALL DefWindowProcA@16
POP EDI
POP ESI
POP EBX
POP EBP
RET 16
WNDPROC ENDP
Π’Π°ΠΊΠΆΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π° ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π·Π°ΠΌΠ΅Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ ΠΎΠΊΠ½Ρ, ΠΈΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΎΡΡΠΎΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π ΡΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΡΡΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°, ΡΡΠΎ Π΄Π°Π΅Ρ Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΡΡΡΡΠΎΠ²:
Β· ΠΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠΎΡΠΈΠΏ DlgProc PROTO: DWORD:DWORD:DWORD:DWORD
Β· ΠΠΏΠΈΡΠ΅ΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ :
Dialog «Scrolling text multithreading» ,
" MS Sans Serif", 10,
WS_OVERLAPPED or
WS_SYSMENU or DS_CENTER,
3,
50,50,200,100,
DlgButton «Run thread», WS_TABSTOP, 150,5,40,13,IDOK
DlgButton «Shut off», WS_TABSTOP, 150,20,40,13,IDSTOP
DlgButton «Start regedit», WS_TABSTOP, 150,35,40,13,IDPROC
DlgButton «Exit», WS_TABSTOP, 150,35,40,13,IDCANCEL
DlgStatic «Multithreading», SS_LEFT, 5,5,60,9,100
Β· ΠΡΠ·ΠΎΠ² ΠΎΠΊΠ½Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ CallModalDialog: CallModalDialog hInstance, 0, DlgProc, NULL
ΠΠ΄Π΅ DlgProc — ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
1.4 ΠΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Windows ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠΉ Π² Π΅Π΄ΠΈΠ½ΠΎΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅:
1. ΠΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΡΡ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
2. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌΡΡ ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠ².
3. Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ ΠΈΠΌ Π² Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ (DLL).
4. Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΠΈΠΌ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°, Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π‘ΠΌΡΡΠ» Π΅Π³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡ: ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π² ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ. ΠΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΠΈ ΠΎΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ «ΡΠ±ΠΈΡΡ» Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΡ ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ Π΅ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΏΠΎΡΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π½ΠΈΡΡΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Windows Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΅ΡΡΡ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°, ΡΠ΅ΡΡ ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠΉΠ΄Π΅Ρ Π½ΠΈΠΆΠ΅.
ΠΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π·Π°ΠΏΡΡΡΠΈΠ² ΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ ΠΠ₯Π-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ΄Π°Π»ΠΈΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ. ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ CreateProcess. Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π΄Π°Π΄ΠΈΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΈΠΆΠ΅ ΠΎΠ±ΡΡΡΠ½ΡΡΡΡΡ Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ.
Β· 1-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ — ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΈΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
Β· 2-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ — Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ NULL (0) ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ°ΠΊΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Π·Π°ΠΏΡΡΠΊΠ° (Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ). ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ NULL, ΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ°, ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ ΠΏΡΡΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ CreateProcess ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ:
1. ΠΠΎΠΈΡΠΊ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΠΎΡΠΊΡΠ΄Π° Π±ΡΠ»Π° Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°.
2. ΠΠΎΠΈΡΠΊ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅.
3. ΠΠΎΠΈΡΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· GetSystemDirectory). ΠΠ±ΡΡΠ½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ C: WINDOWSSYSTEM.
4. ΠΠΎΠΈΡΠΊ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Windows (ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· GetWindowsDirectory). ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΈΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ C: WINDOWS.
5. ΠΠΎΠΈΡΠΊ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ , ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ PATH ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
Β· 3-ΠΉ ΠΈ 4-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡΡ ΡΠ°Π²Π½ΡΠΌ 0.
Β· 5-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ 0, ΡΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ.
Β· 6-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π·Π°Π΄Π°ΡΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π ΡΠΈΠ»Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΌΡ ΠΎΡΡΡΠ»Π°Π΅ΠΌ ΠΆΠ΅Π»Π°ΡΡΠΈΡ ΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°ΠΌ.
Β· 7-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π―Π²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° Π±ΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ΅Π΄Ρ. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ 0, ΡΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ΅Π΄Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Β· 8-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠ°Π΄Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ NULL, ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Β· 9-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠΊΠ½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠΈΠΆΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΏΠΎΠ»Ρ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ.
Β· 10-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ, Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡ ΡΡΠ° ΡΡΡΡΠΊΡΡΡΠ°:
Β· PROCINF STRUC
Β· hProcess DD?; Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Β· hThread DD?; Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Β· Idproc DD?; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
Β· idThr DD?; ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
PROCINF ENDS
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΎΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ½ΠΈΠΊΠ°Π»Π΅Π½ Π»ΠΈΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ. ΠΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΉΠ΄Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π£ ΡΠΈΡΠ°ΡΠ΅Π»Ρ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠ°Π·Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: Π° ΡΠ΅ΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ GetModuleHandle, ΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½? ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΅ΡΡΡ Π²Π΅Π»ΠΈΡΠΈΠ½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ, Ρ. Π΅. Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠ°Ρ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°Π²Π½Π°Ρ Π°Π΄ΡΠ΅ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Ρ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½Π½ΡΡ DLL-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ 9-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateProcess. ΠΠΎΡΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°:
STARTUP STRUC
cb DD 0
lpReserved DD 0
lpDesktop DD 0
lpTitle DD 0
dwX DD 0
dwY DD 0
dwXSize DD 0
dwYSize DD 0
dwXCountChars DD 0
dwYCountChars DD 0
dwFillAttribute DD 0
dwFlags DD 0
wShowWindow DW 0
cbReserved2 DW 0
lpReserved2 DD 0
hStdInput DD 0
hStdOutput DD 0
hStdError DD 0
STARTUP ENDS
ΠΡΠ°ΠΊ, ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΡΠΌΡΡΠ» ΠΏΠΎΠ»Π΅ΠΉ ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ. cb — ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π² Π±Π°ΠΉΡΠ°Ρ . ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. lpReserved — ΡΠ΅Π·Π΅ΡΠ², Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ. lpDesktop — ΠΈΠΌΡ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π° (ΠΈ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ°Π½ΡΠΈΠΈ). ΠΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Windows NT. lpTitle — Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΎΠ·Π΄Π°ΡΡΠΈΡ ΡΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. ΠΠ»Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π²Π½ΠΎ 0. dwX — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° X Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ³Π»Π° ΠΎΠΊΠ½Π°. dwY — ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Y Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ³Π»Π° ΠΎΠΊΠ½Π°. dwXSize — ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° ΠΏΠΎ X. dwYSize — ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠ½Π° ΠΏΠΎ Y. dwXCountChars — ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΠΎ X. dwYCountChars — ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΠΎ Y. dwFillAttribute — Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ ΡΠ΅ΠΊΡΡΠ°. ΠΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. dwFlags — ΡΠ»Π°Π³ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ. ΠΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ»Π°Π³Π°.
Π’Π°Π±Π»ΠΈΡΠ° 1.
ΠΠ°ΠΊΡΠΎ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ | Π‘ΠΌΡΡΠ» Π·Π½Π°ΡΠ΅Π½ΠΈΡ | |
STARTF_USESHOWWINDOW | 1h | Π Π°Π·ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΠ»Π΅ dwShowWindow | |
STARTF_USESIZE | 2h | Π Π°Π·ΡΠ΅ΡΠΈΡΡ dwXSize ΠΈ dwYSize | |
STARTF_USEPOSITI0N | 4h | Π Π°Π·ΡΠ΅ΡΠΈΡΡ dwX ΠΈ dwY | |
STARTF_USECOUNTCHARS | 8h | Π Π°Π·ΡΠ΅ΡΠΈΡΡ dwXCountChars ΠΈ dwYCountChars | |
STARTF_USEFILLATTR1BUTE | 10h | Π Π°Π·ΡΠ΅ΡΠΈΡΡ dwFillAttribute | |
STARTF_FORCEONFEEDBACK | 40h | ΠΠΊΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊΡΡΡΠΎΡΠ° | |
STARTF_FORCEOFFFEEDBACK | 80h | ΠΡΠΊΠ»ΡΡΠΈΡΡ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΊΡΡΡΠΎΡΠ° | |
STARTF_USESTDHANDLES | 100h | Π Π°Π·ΡΠ΅ΡΠΈΡΡ hStdInput | |
wShowWindow — ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠΊΠ½Π°. cbReserved2 — ΡΠ΅Π·Π΅ΡΠ², Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°Π²Π½ΠΎ 0. hStdInput — Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π²Π²ΠΎΠ΄Π° (Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ). hStdOutput — Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π²ΡΠ²ΠΎΠ΄Π° (Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ). hStdError — Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ (Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ).
ΠΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ CreateThread. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
Β· 1-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ°. ΠΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Windows NT. ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ NULL.
Β· 2-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π Π°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, ΡΠΎ Π±Π΅ΡΠ΅ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΠ΅ΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°Π²Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΡΠ΅ΠΊΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
Β· 3-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°.
Β· 4-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
Β· 5-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π€Π»Π°Π³, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°. ΠΡΠ»ΠΈ ΡΠ»Π°Π³ ΡΠ°Π²Π΅Π½ 0, ΡΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π°Π³Π° ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°Π²Π½ΠΎ CREATE_SUSPENDED (4H), ΡΠΎ ΠΏΠΎΡΠΎΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ResumeThread.
Β· 6-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΡΠ΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠ°. ΠΠΎΡΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΡ ExitThread Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° Π²ΡΡ ΠΎΠ΄Π°. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ TerminateThread
ΠΠΎΠΎΠ±ΡΠ΅ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΊΠ½Π° Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΡ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π° Π²ΡΡ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΡΡ ΡΠ°Π±ΠΎΡΡ (ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Π·ΡΡΡ Π½Π° ΡΠ΅Π±Ρ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΡΡΠ°ΡΠΈ, ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΡΠ°ΠΊ ΡΡΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠ΅Π»ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ.
ΠΠ»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ:
1. Π‘Π΅ΠΌΠ°ΡΠΎΡΡ
2. Π‘ΠΎΠ±ΡΡΠΈΡ
3. ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ
4. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
5. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π‘Π΅ΠΌΠ°ΡΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π΄Π²ΡΡ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΡΠ΅ΠΌΠ°ΡΠΎΡ — ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊ. ΠΡΠ»ΠΈ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ°Π²Π΅Π½ N, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊ ΡΠ΅ΡΡΡΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ N ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ².
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ CreateSemaphore ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΈ Π΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΠ΅ΡΠ΅Π΄ ΠΏΠΎΠΏΡΡΠΊΠΎΠΉ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ, ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ WaitForSingleObject. ΠΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΡΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ReleaseSemaphore. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ΅ΡΡΠΈΠΊ Π΄ΠΎΡΡΡΠΏΠ° Π½Π° 1. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π³ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΡΡΡΡ. ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Π‘ΠΎΠ±ΡΡΠΈΡ. Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ Π½Π° ΡΠ΅ΠΌΠ°ΡΠΎΡ, Π½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
CreateEvent — ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ-ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. 1-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΌΡΡΠ», ΡΡΠΎ ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CreateSemaphore. ΠΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ NULL. 2-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ ΡΠ°Π²Π΅Π½ Π½ΡΠ»Ρ, ΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ResetEvent. ΠΠ½Π°ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ Π½Π΅ΠΌΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. 3-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ 0, ΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ±ΡΠΎΡΠ΅Π½Π½ΠΎΠ΅, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΠ΄Π°Π΅ΡΡΡ ΡΠΈΠ³Π½Π°Π» ΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. 4-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠ΅ΠΌΠ°ΡΠΎΡΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ WaitForSingleObject.
ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠΎΠ½ΡΡΠΈΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ±Π΅ΡΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π² ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠ΅ΠΉ.
InitializeCriticalSection — Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
Β· 1-ΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ, ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π½ΠΈΠΆΠ΅. ΠΠΎΠ»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ, ΠΈ ΡΠΌΡΡΠ» ΠΈΡ Π±Π΅Π·ΡΠ°Π·Π»ΠΈΡΠ΅Π½.
Β· CRITICAL_SECTION STRUCT
Β· DebugInfo DWORD ?
Β· LockCount LONG ?
Β· RecursionCount LONG ?
Β· OwningThread HANDLE ?
Β· LockSemaphore HANDLE ?
Β· SpinCount DWORD ?
CRITICAL_SECTION ENDS
EnterCriticalSection — Π²ΠΎΠΉΡΠΈ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ, Π²ΡΠ·Π²Π°Π² Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΡΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
LeaveCriticalSection — ΠΏΠΎΠΊΠΈΠ½ΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΡΠΈΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ EnterCriticalSection, ΡΡΠ°Π½Π΅Ρ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ LeaveCriticalSection ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
DeleteCriticalSection — ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ «ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΊΡΠΈΡ». ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅, Π²ΡΠ²ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· ΡΡΡΠΎΠΊΠΈ Π² ΠΎΠΊΠ½ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½Π° ΡΡΡΠΎΠΊΠ°.
Π§Π°ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, Π²ΡΠ²ΠΎΠ΄ΡΡΠ΅ΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΡΠ΄Π΅Π»Π°Π½Π° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ Π² ΠΎΠΊΠ½ΠΎ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ.
windows ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ
2. ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
2.1 ΠΠΈΡΡΠΈΠ½Π³
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««
.486 ;
.model flat, stdcall ;
optioncasemap :none ;
; ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ°ΠΉΠ»Ρ
; ~~~~~~~~~~~~~
include .includewindows.inc
include .includeuser32.inc
include .includekernel32.inc
include .macrosmacros.asm
include .includemasm32.inc
; ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
; ~~~~~~~~~
includelib .libuser32.lib
includelib .libkernel32.lib
includelib .libmasm32.lib
include .includedialogs.inc
; ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ²
DlgProcPROTO :DWORD:DWORD:DWORD:DWORD
rotate_caption PROTO: DWORD
; ΠΠ°ΡΠ°ΡΠ΅Π³ΠΌΠ΅Π½Ρ
.data
textBufferOSdb «ΠΠΎΡΠΎΠΊΠΎΠ² Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎ», 0
progdb «c:windowsregedit.exe», 0
processInfo PROCESS_INFORMATION <>
.data?
hWnddd ?
hhwn dd ?
hInstancedd ?
ThreadIDDWORD ?
threadSwitchdd ?
threadCountdd ?
textBufferdb 20 dup (?)
startInfodd ?
; ΠΠΎΠ½ΡΡΠ°Π½ΡΡ
.const
IDSTOP equ 102
IDPROC equ 103
WM_STOP_THREAD equ WM_USER+1
; «„„„„„„„„„„„„„„„„„„„„„„„„„„ΠΠΠ““““““““““““““““““““““““““»""
.code
start:
movhInstance, FUNC (GetModuleHandle, NULL)
;ΠΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠ΄ΠΈΠ°Π»ΠΎΠ³
Dialog «Scrolling text multithreading «, ;ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
" MSSansSerif", 10,; Π¨ΡΠΈΡΡ ΠΈ Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ
WS_OVERLAPPED or; Π‘ΡΠΈΠ»Ρ
WS_SYSMENU or DS_CENTER,; Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎΠΎΠΊΠ½Π°
4,; Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»ΡΠ΅Π½ΠΈΡ
50,50,200,100, ;xy ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ
1024; Π Π°Π·ΠΌΠ΅Ρ Π±ΡΡΡΠ΅ΡΠ°
;ΠΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ
DlgButton «Runthread», WS_TABSTOP, 150,5,40,13,IDOK
DlgButton «Shut off», WS_TABSTOP, 150,20,40,13,IDSTOP
DlgButton «Start regedit», WS_TABSTOP, 150,35,40,13,IDPROC
DlgButton «Exit», WS_TABSTOP, 150,50,40,13,IDCANCEL
;Π’Π΅ΠΊΡΡΠ²Π½ΡΡΡΠΈ
DlgStatic «Multithreading «, SS_LEFT, 5,5,60,9,100
;ΠΡΠ·ΠΎΠ²ΠΎΠΊΠ½Π°
CallModalDialog hInstance, 0, DlgProc, NULL
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
;ΠΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎΠΎΠΊΠ½Π°
DlgProcprochWin:DWORD, uMsg: DWORD, wParam: DWORD, lParam: DWORD
;Π Π°Π·Π±ΠΎΡΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ
Switch uMsg
Case WM_INITDIALOG ;Π½Π°ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ
m2mhWnd, hWin; ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΠ΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ
movthreadCount, 0 ;ΡΡΠ΅ΡΡΠΈΠΊΠΏΠΎΡΠΎΠΊΠΎΠ² = 0
CaseWM_COMMAND; ΡΠ°Π·Π±ΠΎΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΎΠΊ
SwitchwParam
CaseIDOK
movthreadSwitch, 0; ΠΌΠ°ΡΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²
;ΠΡΠ»ΠΈ = 0 ΡΠΎ ΡΠ°Π±ΠΎΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π°
moveax, OFFSETthread_proc1; Π² ΡΠ΅Π³ΠΈΡΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°
invokeCreateThread, NULL, NULL, eax, NULL, NULL, ADDRThreadID; Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΏΠΎΡΠΎΠΊ
Case IDCANCEL ;
jmpquit_dialog; Π·Π°ΠΊΡΡΡΡΠ΄ΠΈΠ°Π»ΠΎΠ³
Case IDSTOP ;ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ°ΠΏΠΎΡΠΎΠΊΠΎΠ²
moveax, OFFSET thread_proc2; Π²ΡΠ·ΠΎΠ²Π²ΡΠΎΡΠΎΠ³ΠΎΠ²ΠΈΠ΄Π°ΠΏΠΎΡΠΎΠΊΠ°
invokeCreateThread, NULL, NULL, eax, NULL, NULL, ADDRThreadID
Case IDPROC ;ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠ°
invokeGetStartupInfo, ADDRstartInfo; ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
;Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ
invoke CreateProcess, NULL, offsetprog, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, ADDRstartInfo, ADDRprocessInfo
EndSw
CaseWM_STOP_THREAD
movthreadSwitch, 1; ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² = 1
Case WM_CLOSE
quit_dialog:
invoke EndDialog, hWin, 0; Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌΠ΄ΠΈΠ°Π»ΠΎΠ³
EndSw
return 0
DlgProcendp
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΏΠΎΡΠΎΠΊΠ°
; ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΊΡΡΡΠΈΡΡ (ΡΠΊΡΠΎΠ»Π»ΠΈΡΡ) Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
thread_proc1proc
;Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
LOCAL tlen: DWORD
LOCAL buffer[128]: BYTE
Local pbuf: DWORD
Local charCount: DWORD
mov charCount, 0
movpbuf, ptr$(buffer)
addthreadCount, 1
@loop:
invoke GetWindowText, hWnd, pbuf, 128; Π±Π΅ΡΠ΅ΠΌΡΠ΅ΠΊΡΡ
invokerotate_caption, pbuf;ΠΊΡΡΡΠΈΠΌΠ½Π° 1 ΡΠΈΠΌΠ²ΠΎΠ»
invokeSetWindowText, hWnd, pbuf;ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌΡΠ΅ΠΊΡΡ
invoke Sleep, 50;Π·Π°Π΄Π΄Π΅ΡΠΆΠΊΠ°
.if threadSwitch == 1;Π΅ΡΠ»ΠΈΠ·Π°ΠΏΡΠ΅Ρ
jmp @stopThread;Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΠΈΠΊΠ»Π°
.endif
jmp @loop
@stopThread:
ret
thread_proc1endp
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΏΠΎΡΠΎΠΊΠ°
thread_proc2proc
invokedwtoa, threadCount, ADDRtextBuffer; ΡΠΈΡΠ»ΠΎ Π² ΡΡΡΠΎΠΊΡ
invokeMessageBox, hWnd, ADDRtextBuffer, ADDRtextBufferOS, MB_OK; Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎ
invokeSendMessage, hWnd, WM_STOP_THREAD, NULL, NULL; ΠΎΡΡΡΠ»Π°Π΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
mov threadCount, 0; ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΡΡΠ΅ΡΡΠΈΠΊ
ret
thread_proc2endp
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
OPTION PROLOGUE: NONE
OPTIONEPILOGUE:NONE
; ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π½Π° 1 ΡΠΈΠΌΠ²ΠΎΠ»
rotate_captionprocpbuf:DWORD
movedx, [esp+4]; Π³ΡΡΠ·ΠΈΠΌ ΡΡΡΠΎΠΊΡ
movcl, [edx]; ΠΏΠ΅ΡΠ²ΡΠΉ Π±Π°ΠΉΡ
addedx, 1; ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ
@rewrite:
moval, [edx]; ΡΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»
addedx, 1; ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π°Π΄ΡΠ΅Ρ
testal, al; ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π° 0
jz @last_rewrite; Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ ΡΡΡΠΎΠΊΠΈ ΡΠΎ Π½Π° Π²ΡΡ ΠΎΠ΄
mov [edx-2], al; Π·Π°ΠΏΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°
jmp @rewrite
@last_rewrite:
mov [edx-2], cl; Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°
movBYTEPTR [edx-1], 0; Π½ΡΠ»Ρ ΡΠ΅ΡΠΌΠΈΠ½Π°ΡΠΎΡ
ret 4; Π±Π°Π»Π°Π½ΡΡΡΠ΅ΠΊΠ°
rotate_captionendp
OPTION PROLOGUE: PrologueDef
OPTION EPILOGUE: EpilogueDef
; ««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««
end start
2.2 ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ
ΠΡΠ²ΠΎΠ΄ Π Ρ ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π±ΡΠ»ΠΈ ΠΎΡΠ²Π΅ΡΠ΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ WINDOWS. Π’Π°ΠΊΠΆΠ΅ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΡΠ΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²WINDOWS. ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΠ΅ΠΉ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ 32-Π±ΠΈΡΠ½ΡΠΉ Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ.