Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΡΠ΅ΡΠ΅, Π»ΡΠ±Π°Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ Π² Π³Π»Π°Π²Π°Ρ 11 ΠΈ 12, Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π° Π² ΡΠ»ΡΠΆΠ±Ρ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΠΎΠΊΠΈΠΌ ΠΊΡΡΠ³ΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈΠ»ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ.
Windows ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π»ΡΠΉ ΡΡΠ΄ ΡΠ»ΡΠΆΠ±; Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠ»ΡΠΆΠ±Ρ telnet, ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠ°ΠΊΡΠΈΠΌΠΈΠ»ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ»ΡΠΆΠ±Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΡ ΡΡΠ΅ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ»ΡΠΆΠ±Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Administrative Tools (ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅), ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠΊΠ½Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΎΡΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² Π³Π»Π°Π²Π΅ 6 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ JobShell (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 6.3), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ Π΅Π³ΠΎ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠ»ΡΠΆΠ±Ρ Windows Services ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊ ΡΠΎΡΠΌΠ΅, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ΅ΠΉ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ Windows Services.
Π Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΠΆΠ±Ρ Windows, ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ Π΅Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΠ»ΡΠΆΠ±ΠΎΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π·Π΄Π΅ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΡΡΠ΅ΡΠ° ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠ»ΡΠΆΠ±Ρ.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ Windows Services: ΠΎΠ±Π·ΠΎΡ
Π‘Π»ΡΠΆΠ±Ρ Windows Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ (Service Control Manager, SCM). ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ serverNP ΠΈΠ»ΠΈ serverSK, Π² ΡΠ»ΡΠΆΠ±Ρ Windows ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΡΡΠΈ ΡΡΠ°ΠΏΠ°, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ SCM.
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° main(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ Π² SCM, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° ΠΈ ΠΈΠΌΠ΅Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ»ΡΠΆΠ±.
2. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π° main() Π² ΡΡΠ½ΠΊΡΠΈΡ ServiceMain(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»ΡΠΆΠ±Ρ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ SCM ΠΎ ΡΠ²ΠΎΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ. ΠΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π°, ΠΏΠΎ ΡΡΡΠ΅ΡΡΠ²Ρ, ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΉ Π²ΠΈΠ΄, Ρ ΠΎΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠΌΡ ServiceMain() ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅Π»Π΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ, ΠΏΡΠΈΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ»ΡΠΆΠ± ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ.
3. ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ ΠΎΡ SCM.
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠΎΠ² Π±ΡΠ΄ΡΡ Π΄Π°Π²Π°ΡΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΡ, ΠΊΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ»ΡΠΆΠ±, ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠΌΠΈ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ , Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΠ»ΡΠΆΠ±Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΈΡ. 13.1 Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.
Π€ΡΠ½ΠΊΡΠΈΡ main()
ΠΠ°Π΄Π°ΡΠ΅ΠΉ Π½ΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ main(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ SCM, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ Π² SCM ΠΈ Π·Π°ΠΏΡΡΠΊ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΡΠ»ΡΠΆΠ±Ρ (service control dispatcher). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ StartServiceControlDispatcher, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π΅ΠΉ ΠΈΠΌΡ (ΠΈΠΌΠ΅Π½Π°) ΠΈ ΡΠΎΡΠΊΡ (ΡΠΎΡΠΊΠΈ) Π²Ρ ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ»ΡΠΆΠ±.
BOOL StartServiceCtrlDispatcher(LPSERVICE_TABLE_ENTRY lpServiceStartTable)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ lpServiceStartTable, ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² SERVICE_TABLE_ENTRY, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠΌΡ ΠΈ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ. ΠΠΎΠ½Π΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ Π΄Π²ΡΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ NULL.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE, Π΅ΡΠ»ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ ΠΏΡΠΎΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΡΠ»ΡΠΆΠ±Π° ΡΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΡΠ΅Π΅ΡΡΡΠ° (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services), ΡΡΠ½ΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ StartService-ControlDispatcher, ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Ρ SCM. SCM ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΠΆΠ±Ρ Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠΎΠΊΠ° Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΡΠ»ΡΠΆΠ±Ρ. SCM Π½Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π² Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ»ΡΠΆΠ± Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ; Π·Π°ΠΏΡΡΠΊ ΡΠ»ΡΠΆΠ±Ρ ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ StartService, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ»ΡΠΆΠ±Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΠ»ΡΡΠ°Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 13.1.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 13.1. main: ΡΠΎΡΠΊΠ° Π²Ρ ΠΎΠ΄Π° main ΡΠ»ΡΠΆΠ±Ρ#include "EvryThng.h"
void WINAPI ServiceMain(DWORD argc, LPTSTR argv[]);
static LPTSTR ServiceName = _T("SocketCommandLineService");
/* ΠΠ»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΠΊΠ° Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΡΠ»ΡΠΆΠ±Ρ. */
VOID _tmain(int argc, LPTSTR argv[]) {
SERVICE_TABLE_ENTRY DispatchTable[] = {
{ ServiceName, ServiceMain },
{ NULL, NULL }
};
if (!StartServiceCtrlDispatcher(DispatchTable)) ReportError(_T("ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠ° ΡΠ»ΡΠΆΠ±Ρ."), 1, TRUE);
/* ServiceMain() Π½Π°ΡΠ½Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π΅ */
/* Π·Π°ΠΏΡΡΡΠΈΡ SCM. ΠΠΎΠ·Π²ΡΠ°Ρ ΡΡΠ΄Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, */
/* ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ»ΡΠΆΠ±. */
return;
}
Π€ΡΠ½ΠΊΡΠΈΠΈ ServiceMain()
ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΈΠ³ΡΡΠΈΡΡΡΡΠ΅ΠΉ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 13.1, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ. ΠΠΎ ΡΡΡΠΈ, ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌΠΎΠΉ Π² ΡΠ»ΡΠΆΠ±Ρ, ΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° Π±ΡΠ΄Π΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² Π΅Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ SCM. Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ serverSK ΠΈ serverNP. Π§Π°ΡΡΠΎ Π²Π½ΡΡΡΠΈ ΡΠ»ΡΠΆΠ±Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π°. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 13.2 ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΠΏΡΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π°Π΄Π°ΠΏΡΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 12.2. Π ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΠ»ΡΠΆΠ±Ρ Windows, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±Π΅ΠΈΡ ΡΠ»ΡΠΆΠ±.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ ServiceMain() ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ main() Ρ Π΅Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΠΈΡ ΡΡΡΠΎΠΊΡ, ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅: ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΡΠΆΠ±Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π° Ρ ΡΠΈΠΏΠΎΠΌ void, Π° Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° int, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ main().
ΠΠ»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ SCM Π΄Π»Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ»ΡΠΆΠ±ΠΎΠΉ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»ΡΠΆΠ±Ρ
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠ»ΡΠΆΠ±Ρ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ SCM, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΡΠΆΠ±ΠΎΠΉ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π² ΡΠ΅ΡΠ²Π΅ΡΠ΅ serverSK, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΠ»Π°Π³ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠ°ΠΆΠ΄Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ»ΡΠΆΠ±Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ RegisterServiceCtrlHandlerEx. ΠΡΠ·ΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ServiceMain() ΠΈ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ SCM ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ»ΡΠΆΠ±Ρ.
RegisterServiceCtrlHandlerEx(LPCTSTR lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡlpServiceName β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈΠΌΡ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΠΏΠΎΠ»Π΅ ΡΠ°Π±Π»ΠΈΡΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
lpHandlerProc β Π°Π΄ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. Π Π°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² NT5, ΠΏΡΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ RegisterServiceCtrlHandlerEx Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Register-ServiceCtrlHandler. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ» Π²Π²Π΅Π΄Π΅Π½ Π² NT5.
lpContext β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ»ΡΠΆΠ±Ρ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ.
Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ SEPARARE_STATUS_HANDLE, ΡΠ°Π²Π½ΠΎ 0, Π° Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ»ΡΠΆΠ±Ρ
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΠ»ΡΠΆΠ±Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ SERVICE_START_PENDING, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ SetServiceStatus. Π€ΡΠ½ΠΊΡΠΈΡ SetServiceStatus Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΅ΡΠ΅ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΡ SCM ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠ»ΡΠΆΠ±Ρ. ΠΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΡΠ»ΡΠΆΠ±Ρ, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΠ΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΎΡΠ»ΠΈΡΠ½ΡΠΌΠΈ ΠΎΡ SERVICE_STATUS_PENDING, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π». 13.3.
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ»ΡΠΆΠ±Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΠΎΡΡ.
ΠΠ°Π»Π΅Π΅, Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΠ»ΡΠΆΠ±Ρ ΠΌΠΎΠΆΠ΅Ρ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ SetServiceStatus, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΠ±ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅, Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΡΡΡΠΈΠ΅ ΡΡΠ΅ΠΏΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΡΠΈΡΠ΅ΠΌ Π΄Π»Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ»ΡΠΆΠ±Ρ ΡΠ°ΡΡΠΎ Π²ΡΠ΄Π΅Π»ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , Π²ΡΡΡΡΠΏΠ°ΡΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠ»ΠΈ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»ΠΎΡΡ, ΡΠΎ SCM ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.