Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
ΠΡΡΠ³Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° — ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ². Π§Π°ΡΡΠΎ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π΅Π» ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ±Π΅Π» ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎΡΡ Π² ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ½ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ (ΡΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΌΠΈΡ ΠΈΠΌΠ΅Π½Π°Ρ ). Π ΡΠ°Π· ΡΠ°ΠΊ, ΡΠΎ Π²ΠΎ Π²ΡΠ΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
Π€Π°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π² Windows ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. Π ΠΏΠ΅ΡΠ²ΡΡ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΡΡ Π²Π΅ΡΡΠΈΡΡ Windows (ΠΏΠΎ 3. x Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ) ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π»ΠΈΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ MS-DOS. ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Windows ΠΎΠΏΠΈΡΠ°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ 0×21. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π½ΠΈΡ , 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Windows ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΆΠ΅ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ MS-DOS Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ. Π€ΡΠ½ΠΊΡΠΈΠΈ Win32 API Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ — ΡΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Windows API.
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ ΡΠΎΠΌΠ°ΠΌΠΈ Π² Windows API
Π Windows 3. x ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° MS-DOS. Π ΠΏΠ΅ΡΠ²ΡΡ Π²Π΅ΡΡΠΈΡΡ Windows Π²ΠΎΠΎΠ±ΡΠ΅ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ Π΄ΠΈΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π°Π΄ΡΠ΅ΡΠΎΠ²ΡΠ²Π°Π»Π°ΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ MS-DOS, Π² ΠΏΠΎΠ·Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Windows for Workgroup 3.11, Π² ΡΠ°ΡΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΈΡΠΊΡ ΠΈ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ Π² 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΌ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ Π² Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡΠΌ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈΠ· Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° Π² ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ² ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡ Π΄ΠΈΡΠΊΡ, ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠ»ΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ DOS-Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ), ΡΠΎ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄ΠΈΡΠΊΡ ΠΈ ΡΠ°ΠΉΠ»Π°ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π° MS-DOS, ΠΊΠ°ΠΊ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Windows.
Π€Π°ΠΉΠ»Ρ (file) Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ (directory ΠΈΠ»ΠΈ folder, ΠΏΠ°ΠΏΠΊΠΈ). Π ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ². ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΡΡΠΎΠ³ΠΎ Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ — Π΄Π°Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ , Π½ΠΎ ΡΠ°ΠΌ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ (ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ). ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΎΠΌΠ΅ (volume) ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ — ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ (root directory). ΠΠ»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π±ΡΠΊΠ²Ρ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠ³ΠΎ Π°Π»ΡΠ°Π²ΠΈΡΠ°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ «a».
ΠΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² (file name) ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² (directory name, folder name) Π² Windows API, ΠΊΠ°ΠΊ ΠΈ Π² MS-DOS, ΡΠΎΡΡΠΎΡΡ ΠΈΠ· ΠΈΠΌΠ΅Π½ΠΈ, Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 8 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 3 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 12 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΡΠΎΡΠΊΡ. ΠΠ»Ρ ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ ΠΈΠΌΡ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ. ΠΡΠΈΡΠ΅ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅, ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Π²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠΉΡΠΈ Π½Π° ΠΏΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, Π»ΠΈΠ±ΠΎ ΠΎΡ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠΎΠΌΠ° Π΄ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π½ΡΠΆΠ½ΡΠΉ ΡΠ°ΠΉΠ».
ΠΠΌΡ ΡΠΎΠΌΠ°, ΠΏΡΡΡ Π΄ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° (path name). ΠΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠΎΠΌΠ°, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΠΊΠΎΡΠ°Ρ ΡΠ΅ΡΡΠ° ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π½Π° ΠΏΡΡΠΈ ΠΊ ΡΠ°ΠΉΠ»Ρ, ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌΠΈ ΠΊΠΎΡΡΠΌΠΈ ΡΠ΅ΡΡΠ°ΠΌΠΈ, Π·Π°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅, ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΡΠΎΡΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: E: MkaBookSamples1a. cpp
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠ°ΠΉΠ» 1a. cpp, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Samples, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Book ΠΈ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½ΠΈΠΌ, Π² ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Mka, Ρ ΡΠ°Π½ΡΡΠΈΠΉΡΡ Π½Π° ΡΠΎΠΌΠ΅ E.
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΌΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° (current directory). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΠΌΠ° (Π΄ΠΈΡΠΊΠ°) (current drive). ΠΠ»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°, Π½Π°Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΠΌΠ°, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ Π΄ΠΈΡΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π½Π΅ΠΌ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ½ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ ΡΠΎΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠΌ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π΄ΠΈΡΠΊ, ΠΈ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ Π΄Π»Ρ ΠΏΡΠ΅ΠΆΠ½Π΅Π³ΠΎ Π΄ΠΈΡΠΊΠ°.
Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
1a.cpp — Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» 1a. cpp Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π΄ΠΈΡΠΊΠ°
E:1a.cpp — Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» 1a. cpp Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠΎΠΌΠ° E
E:1a.cpp — Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» 1a. cpp Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠΎΠΌΠ° E
1a.cpp — Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» 1a. cpp Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π΄ΠΈΡΠΊΠ° Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ «.» (ΡΠΎΡΠΊΠ°) ΠΈ «.» (Π΄Π²Π΅ ΡΠΎΡΠΊΠΈ) Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ E: MkaBookSamples, ΡΠΎΠ³Π΄Π°:
.1a.doc — Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» E: MkaBookSamples1a. cpp
.Chapter2.doc — Π·Π°Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ» E: MkaBookChapter2. doc
Π ΡΠΈΡΡΠ΅ΠΌΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ CON, COM2, LPT1, PRN ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° 144 ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠΈΡ ΡΡΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, ΡΠΎ ΡΠ°ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π² Windows 3. x ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ — ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΠΎΡΠΊΡΡΡΠΈΠ΅, ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΡΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΏΠΈΡΡ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅; ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. Π€ΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ°, ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΡΠΌΠ΅Π½Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ 0×21, Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ C-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
HFILE _lcreat (lpszFilename, fnAttribute);
HFILE _lopen (lpszFilename, fnOpenMode);
LONG _llseek (hf, lOffset, nOrigin);
UINT _lread (hf, hpvBuffer, cbBuffer);
UINT _lwrite (hf, hpvBuffer, cbBuffer);
long _hread (hf, hpvBuffer, cbBuffer);
long _hwrite (hf, hpvBuffer, cbBuffer);
HFILE _lclose (hf);
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ. Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ — _hread ΠΈ _hwrite — ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ² Π·Π° ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΠΎΠ΄ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ, ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠ΅ 65 535 Π±Π°ΠΉΡ (64K), ΡΠΎ Π΅ΡΡΡ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°. ΠΠ»Ρ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Windows 3. x ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ.
ΠΠ΅ΡΠ΄ΠΎΠ±Π½ΡΠΌ Π² ΡΡΠ½ΠΊΡΠΈΡΡ Windows API Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π΄Π»Ρ ΡΠ»Π°Π³ΠΎΠ² ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ _lcreat ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ fnAttribute ΡΠ°Π²Π½ΡΠΉ 0, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π° 2 — ΡΠΊΡΡΡΠΎΠ³ΠΎ. ΠΠ»ΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ _llseek ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ nOrigin ΡΠ°Π²Π½ΡΠΉ 1 ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ, Π° Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ°ΠΉΠ»Π°. ΠΡΠ΅ ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΡΠ°ΠΊ ΠΈ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΡΠ»Π°, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ² ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² Windows Ρ Π΅Π½Π΄Π»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ Ρ Π΅Π½Π΄Π»Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² MS-DOS. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅: Π² Windows ΠΏΡΠΈΠ½ΡΡΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 Π΄Π»Ρ Ρ Π΅Π½Π΄Π»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΌ; ΡΠΎ Π΅ΡΡΡ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ Π΅Π½Π΄Π»Π° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
HANDLE hObject;
hObject = Get…(…); // ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Ρ Π΅Π½Π΄Π» ΠΎΠ±ΡΠ΅ΠΊΡΠ°
if (hObject) {// ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π΅Π³ΠΎ…
// Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅
} else {
// ΠΎΡΠΈΠ±ΠΊΠ°!}
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠΈΠ±ΠΎΡΠ΅Π½ — Ρ Π΅Π½Π΄Π» ΡΠ°ΠΉΠ»Π°, ΡΠ°Π²Π½ΡΠΉ 0, Π² MS-DOS ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌΡ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° (stdout), Π° Π½Π΅ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠΌΡ. ΠΠ»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Ρ Π΅Π½Π΄Π»Π° ΡΠ°ΠΉΠ»Π° Π½Π΅ 0, Π° -1. ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π² windows. h ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» HFILE_ERROR, ΡΠ°Π²Π½ΡΠΉ -1. ΠΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
HFILE hFile;
hFile = _lcreat («c:\myfile.dat», 0);
if (hFile ≠ HFILE_ERROR) {
// Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅
…
_lclose (hFile);
} else {
// ΠΎΡΠΈΠ±ΠΊΠ°!}
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ Π² Windows ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ, ΠΏΠΎΠΈΡΠΊΠ°, ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
HFILE OpenFile (lpszFileName, lpOpenBuff, fuMode);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ lpOpenBuf ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΡΡΡΠΊΡΡΡΡ OFSTRUCT. Π ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΊΡΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΊΡΡΡΠΈΡ (ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ) ΡΠΎΠ³ΠΎ-ΠΆΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎΠ·ΠΆΠ΅. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ fuMode ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅ΠΆΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΡΠΊΡΡΡΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ (ΡΠ»Π°Π³ΠΈ OF_READ, OF_WRITE, OF_READWRITE), Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ — ΠΎΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» (OF_CREATE), ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (OF_SHARE_…).
ΠΠΎΠΌΠΈΠΌΠΎ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π° Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΏΠΎΡΠΎΠ±Π½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΡΠ΅ΠΌ-ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ fuMode):
ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° OF_DELETE,
ΠΏΠΎΠΈΡΠΊ ΡΠ°ΠΉΠ»Π° OF_SEARCH,
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° OF_EXIST,
ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΏΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠΉ Π² ΡΡΡΡΠΊΡΡΡΠ΅ OFSTRUCT OF_REOPEN,
ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΡ OFSTRUCT OF_PARSE,
ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π°ΡΡ ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΡΡΡΡΠΊΡΡΡΠ΅ OFSTRUCT OF_VERIFY,
Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΉΠ» (ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ OF_PROMPT ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΠΉΠ», Π½ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°) OF_CANCEL
ΠΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Windows Π½ΠΎΡΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΠΈ GetWindowsDirectory ΠΈ GetSystemDirectory Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΌ win.com — ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Windows ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ (ΠΎΠ±ΡΡΠ½ΠΎ windowssystem).
UINT GetWindowsDirectory (lpszSysPath, cbSysPath)
UINT GetSystemDirectory (lpszSysPath, cbSysPath);
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ Windows Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° — Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ, Π° ΠΈΠ· Π½Π΅Π³ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΏΡΡΡ (Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π΄Π°ΠΆΠ΅ Π²Π°ΠΆΠ½Π΅Π΅ Π·Π½Π°ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠΈΠΉ):
Int GetModuleFileName (hInstance, lpszFileName, cbFileName);
ΠΡΠ΅ ΠΏΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. Π€ΡΠ½ΠΊΡΠΈΡ GetTempDrive Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΡΠΊΠ²Ρ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ Π΄ΠΈΡΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ chDriveLetter Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ). ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΆΠ΅ΡΡΠΊΠΈΠΉ Π΄ΠΈΡΠΊ (ΠΎΠ±ΡΡΠ½ΠΎ C), Π° Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ Π΄ΠΈΡΠΊ. ΠΡΠΎΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ — GetTempFileName ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ TEMP, Π»ΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°, ΡΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΌΠ°, Π»ΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π΅ Π·Π°Π΄Π°Π½, ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΆΠ΅ΡΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° (ΠΎΠ±ΡΡΠ½ΠΎ C).
BYTE GetTempDrive (chDriveLetter);
Int GetTempFileName (chDriveLetter, lpszPrefixString, uUnique, lpszTempFileName);
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π½Π΅ Π±ΡΠ΄Π΅Ρ — Π΄Π»Ρ Π΅Π³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΊΡΡΡΠΈΡ Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π²Π°Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ SetHandleCount ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ΄Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΊΡΡΡΡ Π΄ΠΎ 20 ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ°Π·Ρ.
UINT SetHandleCount (cHandles);
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠΊΡΠ΄Π½Π° — Windows ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΈ Π²ΠΈΠ΄Π° Π΄ΠΈΡΠΊΠΎΠ²ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²: ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ (DRIVE_FIXED), ΡΠΌΠ΅Π½Π½ΡΠ΅ (DRIVE_REMOVABLE) ΠΈ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠ΅ (DRIVE_REMOTE):
UINT GetDriveType (nDriveNumber);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ nDriveNumber Π·Π°Π΄Π°Π΅Ρ Π½ΠΎΠΌΠ΅Ρ Π΄ΠΈΡΠΊΠ°: ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ «A» ΠΈΠΌΠ΅Π΅Ρ Π½ΠΎΠΌΠ΅Ρ 0, «C» — 2 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏ Π΄ΠΈΡΠΊΠ° (DRIVE_FIXED, DRIVE_REMOVABLE, DRIVE_REMOTE), Π»ΠΈΠ±ΠΎ, Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ, 0.
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ, ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈ ΡΠΎΠΌΠ°ΠΌΠΈ Π² Win32 API
Π‘ΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π² Win32 API ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΡΠ΅Π΄ΡΡΠ² Π² Windows API. ΠΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ , Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ — ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊ Π΄Π»Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡΠ²ΠΎΠ΄ΠΈΡ 255 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π±ΡΡΠ΅ΡΠΎΠ² ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΡΡ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ! Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΡΡ, ΡΠ°ΡΡΠΎ Π½Π°ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π΄ΠΎΠ±ΡΡΠΉ Π΄Π΅ΡΡΡΠΎΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ², Π° ΠΈΡ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 255 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΡΠΉ, Π΄Π° Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ 5−10 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠΌΡ, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΠ»Ρ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΠΏΡΡΠΈ ΡΠΎ ΡΡΠΎΠ»Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠΎ ΡΡΠΎ Π΄Π΅Π»ΠΎ ΡΠΈΡΡΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠ½ΠΎΠ΅ — ΠΏΠΎΠΊΠ° ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Ρ ΠΎΡΡ-Π±Ρ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π±ΠΈΡΠ°ΡΡ ΡΡΠΊΠ°ΠΌΠΈ, ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΏΡΡΠ΅ΠΉ Π½ΠΈΠΊΡΠΎ ΠΈ Π½Π΅ Π΄Π΅Π»Π°Π», Π½ΠΎ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π½Π°Π±ΠΈΡΠ°ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ±ΡΡΠ½ΠΎ Π»ΠΈΡΡ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ — ΠΏΡΠΈ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π°Π±ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ, Π° Π½Π΅ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ. ΠΡΠΎ Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΡΠΎΠ²ΠΎΡΠΈΡΡΠ΅Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΈΠΌΠ΅Π½.
ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π°Π΄ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ°, ΡΠ·Π½Π°Π² Π΄Π»ΠΈΠ½Ρ ΠΈΠΌΠ΅Π½ΠΈ, Π·Π°ΡΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΈΠΌΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π½Π°Π΄ΠΎ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Win32 ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ UNICODE, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π½Π΅ ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ, Π° Π΄Π²Π°, ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π±ΡΡΠ΅ΡΠ°.
ΠΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΈΠΌΠ΅Π½ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π»ΠΈΠ½Π½ΡΡ . ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π·Π°ΠΏΡΡΠΊ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows ΠΈ Π·Π°Π΄Π°Ρ MS-DOS, ΠΊΠΎΡΠΎΡΡΠ΅, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ ΡΡΠ°ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π»ΠΈ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ, ΡΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°, ΠΏΠΎΠ΄ΡΠΈΠ½ΡΡΡΠΈΠ΅ΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ MS-DOS. ΠΡΠ΅ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Windows ΠΈ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ MS-DOS ΠΈΠΌΠ΅ΡΡ Π΄Π΅Π»ΠΎ Ρ ΡΡΠΈΠΌΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π Win32 API ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (GetShortPathName ΠΈ GetFullPathName) Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ· Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ°ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ — ΠΏΠΎΠ»Π½Π°Ρ Π΄Π»ΠΈΠ½Π° ΠΏΡΡΠΈ (Π΄Π°ΠΆΠ΅ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΈΠΌΠ΅Π½) ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π²ΡΡΠΈΡΡ 144 ΡΠΈΠΌΠ²ΠΎΠ»Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ 32Ρ ΡΠ°Π·ΡΡΠ΄Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° (Windows-95 ΠΈΠ»ΠΈ Windows NT) Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π·Π°ΠΏΡΡΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ, Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΈΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ MS-DOS ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ ΡΡΠ°ΡΡΠΌΠΈ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Windows Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ — ΡΠΌΠΎΡΡΡ ΠΏΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ: Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ (Π΄Π»ΠΈΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ 144 ΡΠΈΠΌΠ²ΠΎΠ»Π°), ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ (ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΈΡ Π΄Π»ΠΈΠ½Π° ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅).
DWORD GetFullPathName (lpszFile, cchPath, lpszLongPath, plpszFileNamePart);
DWORD GetShortPathName (lpszLongPath, lpszShortPath, cchBuffer);
Π€ΡΠ½ΠΊΡΠΈΡ GetFullPathName Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΡΡΡ, Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ lpszFile. ΠΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΡΠΈ, ΡΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΉΠ» Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅. Π€ΡΠ½ΠΊΡΠΈΡ GetShortPathName Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ — ΠΎΠ½Π° ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
ΠΡΡΠ³Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° — ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ². Π§Π°ΡΡΠΎ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ±Π΅Π» ΠΎΡΠ΄Π΅Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ±Π΅Π» ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈ Π²Π½ΡΡΡΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎΡΡ Π² ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ½ΡΡΠΎ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π² Π΄Π²ΠΎΠΉΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ (ΡΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΌΠΈΡ ΠΈΠΌΠ΅Π½Π°Ρ ). Π ΡΠ°Π· ΡΠ°ΠΊ, ΡΠΎ Π²ΠΎ Π²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ°Π·Π±ΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π½Π°Π΄ΠΎ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· Π½Π° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ², Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΠΊΠ°Π²ΡΡΠΊΠΈ (Π»ΠΈΠ±ΠΎ Π½Π΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ , Π΅ΡΠ»ΠΈ Π² ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅Ρ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²). ΠΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ ΡΡΠ°ΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Win32. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ»ΠΈΠ΄Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°Π»ΠΈ, ΡΡΠΎ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΎΡΠ»Π°ΠΆΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ»ΡΠΆΠΈΠ²ΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ ΠΈΠΌ Π²Π΅ΡΠΎΠΉ ΠΈ ΠΏΡΠ°Π²Π΄ΠΎΠΉ, Π²Π΄ΡΡΠ³ Π΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ, Π½Π°ΡΠΊΠ½ΡΠ²ΡΠΈΡΡ Π½Π° ΠΏΡΠΎΠ±Π΅Π» Π² ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°. Π ΠΏΠΎΠΉΠΌΠ°ΡΡ Π²ΡΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ. Π’Π°ΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΡΠΊΠ°ΠΊΠΈΠ²Π°Π»ΠΈ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² Ρ ΠΎΡΠΎΡΠΈΠ΅, ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Watcom C/C++ 10.5 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΡΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ Π² ΡΠ°ΠΌΠΎΠΉ ΡΡΠ΅Π΄Π΅.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π½ΡΠ°Π½Ρ, ΠΏΡΠ°Π²Π΄Π° ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ, ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ» «.» (ΡΠΎΡΠΊΠ°) ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π² ΡΠ°ΠΌΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ΄ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ ΡΠ°ΡΡΡ ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠ°Π²ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ. ΠΡΠ° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡ ΡΠΏΡΠ°Π²Π° Π½Π°Π»Π΅Π²ΠΎ Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΠΎΠ»Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎΡΠΊΠΈ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΠΈΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΠΈΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π΄Π²Π΅ ΠΊΠΎΡΡΠ΅ ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠ΄. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ «\.A:» ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΎΠΌΡ «A» (Π·Π°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π° C ΡΡΠΎ ΠΈΠΌΡ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΊΠ°ΠΊ «\\.\A:»).
ΠΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Windows API ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΈ Π² Win32 API, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ , ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠ°Π²Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ; ΡΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ SetHandleCount ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π² Windows NT ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠ΅ΡΡΠ»Π° ΡΠΌΡΡΠ» — Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, ΡΡΠ½ΠΊΡΠΈΠΈ _lread ΠΈ _lwrite ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ _hread ΠΈ _hwrite ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΡΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π² Win32 API, ΠΎΠ±Π»Π°Π΄Π°ΡΡΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ _lread ΠΈ _lwrite ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ ReadFile, ReadFileEx, WriteFile ΠΈ WriteFileEx.
Π Π°Π±ΠΎΡΠ° Ρ ΡΠΎΠΌΠ°ΠΌΠΈ
Win32 API ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΡΠΎΠΌΠ°ΠΌΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΡ Π²Π΅ΡΡΠΈΠΉ Windows, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ MS-DOS. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Win32 API Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π΅ ΠΎΠ΄Π½Ρ Π±ΡΠΊΠ²Ρ, ΠΈ Π½Π΅ Π½ΠΎΠΌΠ΅Ρ ΡΠΎΠΌΠ°, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ Π² MS-DOS, Π° ΠΏΡΡΡ ΠΊ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ ΡΠΎΠΌΠ°. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΡΡΡΠΎΠΊΠ° Π²ΠΈΠ΄Π° X, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Windows 3. x ΠΈ Win32s Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ° 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΎΠΌΠ° (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ join). Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠΎΠΌΠ° Π² ΡΠ΅Π»ΠΎΠΌ ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΡΠΎΠ³ΠΎ ΡΠΎΠΌΠ° ΠΌΠΎΠ³ΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ — ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ ΠΆΠ΅ΡΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ°, Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ CD-ROM ΠΈΠ»ΠΈ RAM Π΄ΠΈΡΠΊΡ.
ΠΡΠ°ΠΊ, ΠΊΠΎΡΠΎΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Win32 API Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΌΠ°ΠΌΠΈ.
DWORD GetLogicalDrives (void);
DWORD GetLogicalDriveStrings (nBufferSize, lpszBuffer);
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΠΌΠ°Ρ . Π€ΡΠ½ΠΊΡΠΈΡ GetLogicalDrives Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π²ΠΎΠΉΠ½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π² 1 Π±ΠΈΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΈΠΌΠ΅ΡΡΠΈΠΌΡΡ ΡΠΎΠΌΠ°ΠΌ. ΠΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ GetLogicalDriveStrings Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΠΈΠΌΠ΅Π½ ΠΊΠΎΡΠ½Π΅Π²ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² ΡΠΎΠΌΠΎΠ². ΠΠΌΠ΅Π½Π° ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ `', Π° Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ `'.
Π Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠΈΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² Windows NT, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ — Π² Windows-95 (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ Π² Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ 4.0.950a) ΠΎΠ½Π° ΡΠΎΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°. Π’ΠΎΡΠ½ΠΎ Π΅Π΅ Π½Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Win32s. Π‘ΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ GetLogicalDriveStrings, Π»ΠΈΠ±ΠΎ, ΠΏΡΠΈ Π΅Π΅ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ, ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetLogicalDrives (Π½Π΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 2B).
ΠΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ Π½ΡΠ°Π½Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡ Π½Π΅Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΡΡΠ΅Ρ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ Π·Π°ΡΠ°Π½Π΅Π΅ Π΄Π»ΠΈΠ½Ρ (ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Win32 API, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ). ΠΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΡΠ΅Ρ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ Π·Π°ΠΏΠ°ΡΠΎΠΌ ΠΈ Π½Π°Π΄Π΅ΡΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ. ΠΡΡΡΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΠ½Π°ΡΠ°Π»Π° ΡΠ·Π½Π°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π΅Π³ΠΎ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅:
DWORD dwSize = GetLogicalDriveStrings (0, NULL); // ΡΠ·Π½Π°ΡΡ Π΄Π»ΠΈΠ½Ρ
LPTSTR lpszStrings = new TCHAR [ dwSize+1 ]; // +1 = Π΄Π»Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° `'
GetLogicalDriveStrings (dwSize, lpszStrings);
for (LPTSTR p = lpszStrings; *p; p += lstrlen (p) + 1) {
// `p' ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΌΠ°}
delete lpszStrings;
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ — GetDriveType — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΡΠΎΠΌΠ°. Π ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌ Windows API ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π» Π°Π½Π°Π»ΠΎΠ³ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠ°Π» Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠΎΠΌΠ° Π½ΠΎΠΌΠ΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° ΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π½ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΏΠΎΠ² ΡΠΎΠΌΠΎΠ² — CD-ROMΡ ΠΈ RAM Π΄ΠΈΡΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΎΠΏΠΎΠ·Π½Π°Π²Π°Π»ΠΈΡΡ.
UINT GetDriveType (lpszRoot);
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΈΠΏ ΡΠΎΠΌΠ°, Π»ΠΈΠ±ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΎΠΌ Π·Π°Π΄Π°Π½ Π½Π΅Π²Π΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½. Π ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ° ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈΡ , ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ»ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΡ GetVolumeInformation Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌΠ΅. Π‘ Π΅Π΅ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΌΠ΅ΡΠΊΡ ΡΠΎΠΌΠ° (Π² Windows API Π΄Π»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΡΠ°ΡΡΠΎ ΠΈΡΠΊΠ°Π»ΠΈ ΡΠ°ΠΉΠ» ΡΠΈΠΏΠ° «ΠΌΠ΅ΡΠΊΠ° ΡΠΎΠΌΠ°» Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΌΠ°), ΡΠ΅ΡΠΈΠΉΠ½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠΌΠ°, ΡΠΈΠΏ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (NTFS, HPFS, CDFS, FAT), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π΄Π»ΠΈΠ½Ρ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎΠΌΠΎΠΌ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ.
BOOL GetVolumeInformation (
lpszRoot,
lpszVolume, nVolumeSize,
lpdwSerialNumber, lpdwMaxNameLength, lpdwFlags,
lpszFileSystemName, nFileSystemName);
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π²ΠΈΠ΄Π΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΈΠ±Π°Π»Π°ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ Π΄ΠΈΡΠΊΠΎΠ². Π’Π°ΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΡΡΡΠ΄Π½ΠΎ ΡΠ΅ΡΠΊΠΎ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌ, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (Windows 3. x + Win32s, Windows-95, Windows-98, Windows NT) ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ²ΠΎΠΈ Π΄ΠΈΡΠΊΠΈ Π² ΠΎΠ±ΡΠ΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠΏΠΈΡΠΎΠΊ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ — Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠ° OS/2, Macintosh, Unix ΠΈ ΠΏΡΠΎΡΠ΅Π΅).
ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π² ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΎΠΌΠ°. Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetDiskFreeSpace:
BOOL GetDiskFreeSpace (
lpszRoot,
lpdwSectorsPerCluster, lpdwBytesPerSector,
lpdwFreeClusters, lpdwTotalClusters);
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄Π°Π½Π½ΡΡ , ΡΠ°Π·ΠΌΠ΅ΡΠ΅ ΡΠΎΠΌΠ° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°Ρ ΠΈ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ². ΠΠ»Π°ΡΡΠ΅Ρ — ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠ»Π°ΡΡΠ΅ΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΠΆΠ΅ΡΡΠΊΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠΎΠΌΠ°, ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΡΡ Π΅Π΄ΠΈΠ½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΡΠΎΠΌΠ΅. Π’Π°ΠΊ, Π²ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΠΎΠΌΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΡΠΎΡΠ° (ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΎ 512 Π±Π°ΠΉΡ Π΄Π»Ρ ΠΆΠ΅ΡΡΠΊΠΈΡ ΠΈ Π³ΠΈΠ±ΠΊΠΈΡ Π΄ΠΈΡΠΊΠΎΠ² ΠΈ 2048;2192 Π±Π°ΠΉΡ Π΄Π»Ρ CD-ROM)
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ SetVolumeLabel Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΠΌΠ°:
BOOL SetVolumeLabel (lpszRoot, lpszVolume); // Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Win32s!
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ°Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ². Π Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌ MS-DOS 0×44? (device I/O control, IOCTL), ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΡΠΈΡΠ΅. Π ΡΠΈΡΠ»Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ — Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ·Π½Π°ΡΡ, Π·Π°ΠΌΠ΅Π½ΡΠ»ΡΡ-Π»ΠΈ ΡΠΎΠΌ Π² ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΡΠΎ ΡΠΌΠ΅Π½Π½ΡΠΌΠΈ Π½ΠΎΡΠΈΡΠ΅Π»ΡΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π³ΠΈΠ±ΠΊΠΈΠΉ Π΄ΠΈΡΠΊ), ΡΠ·Π½Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΎΡΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠΌ (Π΄ΠΎΡΠΎΠΆΠΊΠΈ Π΄ΠΈΡΠΊΠ°), ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ Π΄ΠΈΡΠΊΠ° Π½Π° ΡΠ°Π·Π΄Π΅Π»Ρ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°Π·Π±ΠΈΡΡ Π΄ΠΈΡΠΊ Π½Π° ΡΠ°Π·Π΄Π΅Π»Ρ ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. Π€ΡΠ½ΠΊΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎ Π±Ρ Π΅ΠΉ Π±ΡΠ» ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Ρ Π΅Π½Π΄Π», ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π΄Π°Π½Π½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΎΡ Ρ Π΅Π½Π΄Π», ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CreateFile (ΡΠΌ. Π½ΠΈΠΆΠ΅), ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π΅ΠΉ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, Π² Π²ΠΈΠ΄Π΅ \.A: — Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊ ΡΠΎΠΌΡ A (Π±ΡΠΊΠ²Π°, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠΎΡ Π΄ΠΈΡΠΊ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ Π΄ΠΎΡΡΡΠΏ), ΠΈΠ»ΠΈ \.PhysicalDrive0 — Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΆΠ΅ΡΡΠΊΠΎΠΌΡ Π΄ΠΈΡΠΊΡ 0 (ΡΠΈΡΡΠ° — Π½ΠΎΠΌΠ΅Ρ ΠΆΠ΅ΡΡΠΊΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ°, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ, ΠΎΠ±ΡΡΠ½ΠΎ 0 ΠΈΠ»ΠΈ 1). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ «ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΠΊΠΎΡΠ°Ρ ΡΠ΅ΡΡΠ°» Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½Ρ Π΄Π²Π°ΠΆΠ΄Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ «\\.\A:».
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄ΠΈΡΠΊΠ°ΠΌ Π² Windows NT Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ!
BOOL DeviceIoControl (// Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Win32s!
hDevice, dwIoControlCode,
lpvInBuffer, cbInBuffer,
lpvOutBuffer, cbOutBuffer,
lpcbBytesReturned,
lpoOverlapped);
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄ΡΡ ΠΎΠ±Π·ΠΎΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΅ΡΠ΅ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌΠΈ (ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΌΠ°). ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Windows NT, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅Π΄ΠΊΠΎ — ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ°ΡΠ°ΡΡΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ Win32.
BOOL DefineDosDevice (dwFlags, lpszDeviceName, lpTargetPath);
DWORD QueryDosDevice (lpszDeviceName, lpBuffer, cbMaxSize);
ΠΠ±Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΆΠ΅ΡΡΠΊΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ ΠΊ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ Π² Windows NT ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ: Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΡΡΡΠΎΠΉΡΡΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΡ DeviceParallel0 ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ-ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠΈΠΏΠ° LPT1, Π²ΠΎΡΠ΅Π΄ΡΠΈΠ΅ Π² ΠΎΠ±ΠΈΡ ΠΎΠ΄ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½, Π±ΠΎΠ»Π΅Π΅ Π΄ΡΠ΅Π²Π½ΠΈΡ , ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠ΅ IBM PC XT. ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π² Windows NT ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ² «Π² ΡΡΠΈΠ»Π΅ MS-DOS» ΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ, Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ MS-DOS) ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ DefineDosDevice ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π΄Π°ΡΡ ΡΠ°ΠΌΠΎΠΌΡ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅, Π° ΡΡΠ½ΠΊΡΠΈΡ QueryDosDevice ΡΠ·Π½Π°ΡΡ Π»ΠΈΠ±ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΈΠΌΠ΅Π½. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌΠΎΡΡΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΠΌΠ΅Π΅ΡΡΡ ΠΎΠ΄Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½Π½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ — ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Win32 API, Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ ERROR_CALL_NOT_IMPLEMENTED, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ GetLastError. ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
DefineDosDevice (0, «Z:», buffer);
if (GetLastError () ≠ ERROR_SUCCESS) {
// Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° — ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ
} else {
// Π²ΡΠ΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ}
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ, ΡΡΠΎ Π² Windows 98 ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠ½ΠΊΡΠΈΡ GetLastError Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ ERROR_SUCCESS. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡΡ… ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ — Π² ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 2B — ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠΎΠΌΠ°ΠΌΠΈ
ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΎΠΌΠ°ΠΌΠΈ ΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. ΠΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° 1B, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π ΠΎΠΊΠ½Π΅, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΡΠΎΡΡΠΎ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠΎΠΌΠΎΠ² ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½ΠΈΡ , Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΡΡΡΠΎΠΉΡΡΠ² DOS.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌΠ°Ρ Π² ΠΎΠΊΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ-Π±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ:
Π₯ΡΠΆΠ΅ Π½Π΅ΠΊΡΠ΄Π°. ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ 1B. CPP ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ WM_PAINT (ΡΡΠ½ΠΊΡΠΈΡ Cls_OnPaint), ΡΠ°ΠΊ, ΡΡΠΎ Π±Ρ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ ΠΎ Π² ΡΡΠΎΠΌ ΡΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡΠΌ ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΠΌ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π°. ΠΡΠ΅ Ρ ΡΠΆΠ΅ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΠ±ΡΠ°ΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡΠ΅ΠΌ ΠΎΠΊΠΎΡΠΊΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ «Cannot read from drive A:». ΠΡΠΎ ΠΎΠΊΠΎΡΠΊΠΎ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ, ΠΏΠΎΠ²Π΅ΡΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_PAINT, ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΠΎΠΌΡ-ΠΆΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ … ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅ (ΡΡΠΎ Π±Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ SetErrorMode, ΠΎΡΠΊΠ»ΡΡΠΈΠ² Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ).
Π§ΡΡΡ Π»ΡΡΡΠ΅. Π‘ΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π°, ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π³Π΄Π΅-ΡΠΎ Π² ΠΏΠ°ΠΌΡΡΠΈ Π²Π΅ΡΡ ΡΠ΅ΠΊΡΡ, Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ WM_PAINT. ΠΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π»ΡΡΡΠ΅ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π² ΡΠ°Π·Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΠΌΠΈΠ½ΡΡΡ — ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° ΠΎΠ½ΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΎΡΡΠ°Π·ΠΈΡ, ΠΈ, ΠΊΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ — Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π°. ΠΠ΅ΡΠ²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡ ΡΠ΅ΡΠ°ΡΡ ΡΠ΅ΠΉΡΠ°Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ — ΡΡΠΎΠ³ΠΎ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²Π²Π΅Π΄Ρ ΠΌΠ΅Π½Ρ Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΠ±Π½ΠΎΠ²ΠΈΡΡ (Refresh) ΠΈΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° — ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ ΠΈ ΠΌΡΡΠΈ, ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
ΠΡΠ΅ Π»ΡΡΡΠ΅. Π§ΡΡΡ ΡΠ°Π·ΠΎΠ²ΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± — ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠΊΠ½Π°, Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΡΡΡΡ ΠΈ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΆΠΈΠΌ Π½Π° Windows. Windows ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠΊΠΎΠ½, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ — ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΡΠ»Π°ΠΆΠΊΠΈ, ΡΠΏΠΈΡΠΊΠΈ, ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ-ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΠΎΡ ΠΎΠΊΠ½ΠΎΠΌ-ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ ΠΌΡ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠΎ ΡΠ΅ΠΊΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌ, ΡΠΎ Π΅ΡΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ ΠΎΠΊΠ½ΠΎ-ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, Π·Π°Π½ΠΈΠΌΠ°ΡΡΠ΅Π΅ Π²ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠΊΠ½Π°ΠΌΠΈ ΡΠΌΠΎΡΡΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ . ΠΠ°ΡΠ΅ΠΌ, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π² Π²Π΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ΅ΠΊΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ. ΠΠΊΠ½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ½Π°Π±ΠΆΠ΅Π½ΠΎ ΠΏΠΎΠ»ΠΎΡΠ°ΠΌΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠΎΠΉ ΠΈ ΠΌΡΡΡΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ΅ΠΊΡΡΠ° Π² Π±ΡΡΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π° — ΠΈ Π²ΡΠ΅ ΡΠ°ΠΌΠΎ, Π±Π΅Π· ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠ΄Π΅Π»Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ — ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΠΌΠ΅Ρ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΎΠΊΠ½Π°), ΠΏΡΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π½Π΅ Π·Π°Π±ΡΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ ΠΎΠΊΠ½ΠΎ-ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ WM_PAINT ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΈΡΠ°Π½ΠΎ Π½Π° ΡΠ°Π±ΠΎΡΡ Π² Win32, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ Win32 API Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌΠ°Ρ . ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ Windows 3. x Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² Windows API, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠΌΡΠ»ΡΡΠΎΡΡ, Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ Π² ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΠΎΠ±Π΅ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ , Π½ΠΎ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Windows API (ΡΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠΌΡΠ»ΡΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠΌΠΈ, ΠΎΠΏΠΈΡΠ°ΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ MS-DOS — ΠΏΡΠΎΡΡΠΎ ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ).
Π€ΡΠ½ΠΊΡΠΈΠΈ DefineDosDevice ΠΈ QueryDosDevice, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π² ΡΠΈΡΠ»Π΅ ΠΏΡΠΎΡΠΈΡ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² Π²ΠΈΠ΄Π΅ 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ Windows NT, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ» ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Win32 Π² Windows NT.
Π€Π°ΠΉΠ» 2B. CPP
#define STRICT
#include
#include
#define UNUSED_ARG (arg) (arg)=(arg)
#ifndef __NT__
// ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ Windows API
#include «2b16.cpp»
// ΡΠ΅ΠΊΡΡ ΡΠ°ΠΉΠ»Π° 2b16. cpp ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅
#endif
static char szWndClass[]= «test volume functions» ;
static HINSTANCE hInstance;
BOOL Cls_OnCreate (HWND hwnd, LPCREATESTRUCT lpCreateStruct)
{UNUSED_ARG (lpCreateStruct);
char *temp, *p, *s;
DWORD n, i, sernum, complen, flags, spc, bps, fc, tc;
char file_system[ 128 ], buffer[ 1024 ];
UINT count, errmode;
HWND hwndView;
RECT rc;
HFILE hf;
static OFSTRUCT ofs;
static char tempfile[] = «c:\test.txt»;
static char devZ[] = «Z:»;
// ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠΊΠ½ΠΎ-ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, Π·Π°Π½ΠΈΠΌΠ°ΡΡΠ΅Π΅ Π²ΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΠΊΠ½Π°
GetClientRect (hwnd, &rc);
// ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ Π² CREATESTRUCT ΡΠΊΠ°Π·Π°Π½Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π°, Π½ΠΎ ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΠΎΠ½ΠΈ
// ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ ΠΊΠ°ΠΊ Π½ΡΠ»Π΅Π²ΡΠ΅, Ρ ΠΎΡΡ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. Π€ΡΠ½ΠΊΡΠΈΡ GetClientRect
// Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
hwndView = CreateWindow (
" EDIT", «» ,
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_READONLY,
0, 0, rc. right, rc. bottom, hwnd, (HMENU)1, hInstance, NULL);
if (!IsWindow (hwndView)) {
// Π΅ΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ, ΡΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
// ΡΠΎΠΎΠ±ΡΠΈΠ² ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅
MessageBox (NULL, «Cannot create viewer window!», NULL, MB_OK);
return FALSE;}
// Π΄Π»Ρ ΠΊΡΠ°ΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠΎΠ½ΠΎΡΠΈΡΠΈΠ½Π½ΡΠΉ ΡΡΠΈΡΡ (ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠΌ. GDI)
SetWindowFont (hwndView, GetStockObject (ANSI_FIXED_FONT), FALSE);
// ΡΡΠ½ΠΊΡΠΈΡ SetWindowFont Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Π°, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ
// Π² windowsx. h ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ — ΡΠΌ. ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
// Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Ρ Π΅Π½Π΄Π» ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°
// (ΠΏΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π½Π°Π΄ΠΎ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ 4 Π±Π°ΠΉΡΠ° — ΡΡΠΎ Π±Ρ ΠΈ Π²
// Windows API ΠΈ Π² Win32 API ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ)
SetWindowLong (hwnd, 0, (LONG)hwndView);
// 1. ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ Π·Π°ΡΠ°Π½Π΅Π΅, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΠ΅Ρ
// ΡΠΎΠΌΠΎΠ² ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ² DOS. ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Ρ Π·Π°ΡΠ°Π½Π΅Π΅
// Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ c: test. txt (ΡΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π½Π°Π΄ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅
// ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ TEMP ΠΈΠ»ΠΈ TMP, ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ
// ΠΊΠ°ΡΠ°Π»ΠΎΠ³ — Π² ΠΆΠΈΠ·Π½ΠΈ ΡΠ°ΡΡΠΎ ΠΎΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π΄ΠΈΡΠΊ
// ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ Π΄ΠΈΡΠΊ — Π²ΡΡΠΊΠΎΠ΅ Π±ΡΠ²Π°Π΅Ρ — ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΡΠ°ΠΌ — Π½ΠΎ ΡΡΠΎ
// Π²ΡΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΎ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°).
// 2. Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΌΡ ΡΠΎΠ±Π΅ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π΅Π³ΠΎ ΠΎΠΊΠ½Ρ
// ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ» ΡΠ΄Π°Π»ΠΈΠΌ.
// 3. Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Windows API, ΡΡΠΎ Π±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ
// ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌΠΈ
hf = _lcreat (tempfile, 0);
if (hf == HFILE_ERROR) {
// ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ — ΡΠΎΠΎΠ±ΡΠ°Π΅ΠΌ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ (ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π±ΡΠ΄Π΅Ρ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΎ
// ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ WM_DESTROY
MessageBox (NULL, «Cannot create temporary file!», NULL, MB_OK);
return FALSE;}
// ΠΏΠΈΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
_lwrite (hf, «******** GET VOLUME INFORMATION ********rnrn», 44);
SetLastError (ERROR_SUCCESS);
n = GetLogicalDriveStrings (0, NULL);
if (GetLastError () ≠ ERROR_SUCCESS) {
// Π€ΡΠ½ΠΊΡΠΈΡ GetLogicalDriveStrings Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Win32s ΠΈ (Π² ΠΊΠ½ΠΈΠ³Π°Ρ
// ΡΠ°ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ) Π² Windows-95, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ ΠΈ ΡΠ°ΠΊ, Π½ΠΎ Ρ ΠΌΠ΅Π½Ρ
// Π² Windows-95 Π²Π΅ΡΡΠΈΠΈ 4.00.950a, Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΄Π»Ρ Π ΠΎΡΡΠΈΠΈ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
// Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΆΠ΅ Π½Π΅Ρ, ΡΠΎ ΡΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ GetLogicalDrives
// ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΠ½ΠΎ Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ Win32
n = GetLogicalDrives ();
// ΡΠ·Π½Π°Π΅ΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅Π³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²
count = 0;
for (i = 1; i; i <<= 1) if (n & i) count++;
// ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΡΡΡΠΎΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²
temp = new char [ count * 4 + 1 ];
if (temp) {
p = temp;
for (i = 0; i < 32; i ++) if (n & (1L << i)) {
*p++ = (char)('A' + i); *p++ = ':'; *p++ = '\'; *p++ = '';}
*p++ = '';}
} else {
// Π΅ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ GetLogicalDriveStrings ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΅Π΅
temp = new char [ n + 1 ];
if (temp) GetLogicalDriveStrings (n, temp);
}
if (temp) {
// ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅
errmode = SetErrorMode (SEM_FAILCRITICALERRORS);
// Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½Π°, ΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ Π΅Π΅ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ
for (p = temp; *p; p += lstrlen (p) + 1) {
wsprintf (buffer, «Root: %s», p);
switch (GetDriveType (p)) {
case 0: s = «???»; break;
case 1: s = «invalid»; break;
case DRIVE_REMOVABLE: s = «REMOVABLE»; break;
case DRIVE_FIXED: s = «FIXED»; break;
case DRIVE_REMOTE: s = «REMOTE»; break;
case DRIVE_CDROM: s = «CD-ROM»; break;
case DRIVE_RAMDISK: s = «RAM DISK»; break;
default: s = «what?!»; break;}
// ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ `s' ΠΊ ΡΠΈΠΏΡ
// LPSTR — ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Windows API Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠΌ
// Π΄Π°Π½Π½ΡΡ (tiny, small, medium) ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 16-ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅
// Π° Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Windows ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½Ρ 32-Ρ ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅
wsprintf (buffer+lstrlen (buffer), «type=%s volume='», (LPSTR)s);
sernum = complen = flags = 0; file_system[0] = '';
if (
GetVolumeInformation (
p, buffer+lstrlen (buffer), 64,
&sernum, &complen, &flags,
file_system, sizeof (file_system)))
{// Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π½Π° -> ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π±ΠΎΠ»Π΅Π΅
// ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ
wsprintf (buffer+lstrlen (buffer), «' serial=%08lXrn», sernum);
_lwrite (hf, buffer, lstrlen (buffer));
spc = bps = fc = tc = 0L;
GetDiskFreeSpace (p, &spc, &bps, &fc, &tc);
bps *= spc;
wsprintf (
buffer,
" comp. length=%lu cluster=%lu total=%luK free=%luKrn" ,
complen, bps, bps*tc/1024, bps*fc/1024);
_lwrite (hf, buffer, lstrlen (buffer));
wsprintf (buffer, «file system ='%s' flags=», file_system);
s = buffer + lstrlen (buffer);
if (flags & FS_CASE_IS_PRESERVED) {
lstrcpy (s, «CASE_PRESERVED «); s+= lstrlen (s);}
if (flags & FS_CASE_SENSITIVE) {
lstrcpy (s, «CASE_SENSITIVE «); s+= lstrlen (s);}
if (flags & FS_UNICODE_STORED_ON_DISK) {
lstrcpy (s, «UNICODE «); s+= lstrlen (s);}
if (flags & FS_PERSISTENT_ACLS) {
lstrcpy (s, «ACL «); s+= lstrlen (s);}
if (flags & FS_FILE_COMPRESSION) {
lstrcpy (s, «MAY_COMPRESS «); s+= lstrlen (s);}
if (flags & FS_VOL_IS_COMPRESSED) {
lstrcpy (s, «COMPRESSED «); s+= lstrlen (s);}
lstrcpy (s, «rn»);
_lwrite (hf, buffer, lstrlen (buffer));
} else {
// Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π°, ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ°Π΅ΠΌ
lstrcpy (
buffer+lstrlen (buffer),
" ' ***** NO VOLUME INFORMATION! rn");
_lwrite (hf, buffer, lstrlen (buffer));}}
delete temp;
// Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ
SetErrorMode (errmode);} else {
// Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° (Π½Π΅ Ρ Π²Π°ΡΠΈΠ»ΠΎ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΡΡΡΡΠΎΠΉΡΡΠ²)
// ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠ΅ΠΊΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ, ΡΡΠΎ Π±Ρ Π½Π΅
// Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎΠ± ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎΡΡΠΎΡΠ½ΠΎ
_lwrite (hf, «NOT ENOUGHT MEMORY TO GET INFORMATION! rn», 40);}
// ΠΏΠΈΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
_lwrite (hf, «rn******** READ DOS DEVICES MAP ********rnrn», 44);
// ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°Π·Π½Π°ΡΠ°Π΅ΠΌ Z: ΠΊΠ°ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ win.com
GetWindowsDirectory (buffer, sizeof (buffer));
SetLastError (ERROR_SUCCESS);
DefineDosDevice (0, devZ, buffer);
if (GetLastError () ≠ ERROR_SUCCESS) {
// ΡΡΠ½ΠΊΡΠΈΡ DefineDosDevice Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° — ΡΡΠΎ Π½Π΅ Windows NT!
_lwrite (hf, «NOTE: DefineDosDevice () is not implemented! rn», 45);
} else {
// Π΅ΡΠ»ΠΈ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠ΄Π°Π»ΠΎΡΡ — ΡΡΠΎ NT, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ
// Ρ ΠΎΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ Windows 98
buffer[ QueryDosDevice (NULL, buffer, 1024) ] = `';
// ΡΡΠ½ΠΊΡΠΈΡ QueryDosDevice Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅Ρ
// ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Windows 98 ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ 0, Ρ ΠΎΡΡ ΡΠ°ΠΌ Π±ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΡΡΠΎΡ.
for (p = buffer; *p; p += lstrlen (p) + 1) {
_lwrite (hf, ««, 15 — lstrlen (p));
_lwrite (hf, p, lstrlen (p));
_lwrite (hf, «= «, 3);
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² file_system Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
QueryDosDevice (p, file_system, sizeof (file_system));
_lwrite (hf, file_system, lstrlen (file_system));
_lwrite (hf, «rn», 2);}
GetWindowsDirectory (buffer, sizeof (buffer));
// ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ
DefineDosDevice (
DDD_REMOVE_DEFINITION | DDD_EXACT_MATCH_ON_REMOVE, «Z:», buffer);}
// ΡΠ·Π½Π°Π΅ΠΌ Π΄Π»ΠΈΠ½Ρ ΡΠ°ΠΉΠ»Π° Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΈ Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ
n = _llseek (hf, 0L, 1);
temp = new char [ (int)n + 1 ];
if (temp) {
// Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΌΡΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΎΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» `'
_llseek (hf, 0L, 0);
temp[ _lread (hf, temp, (int)n) ] = '';
// ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
SetWindowText (hwndView, temp);
// Π½Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ Π±ΡΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½
delete temp;
} else {
// Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅ Ρ Π²Π°ΡΠΈΠ»ΠΎ — ΡΠΎΠΎΠ±ΡΠ°Π΅ΠΌ
SetWindowText (hwndView, «*** Cannot load text ***»);}
// Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ — ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΠΌΠ° ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅Ρ
_lclose (hf);
OpenFile (tempfile, &ofs, OF_DELETE);
return TRUE;}
void Cls_OnSize (HWND hwnd, UINT state, int cx, int cy)
{UNUSED_ARG (state);
// ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
HWND hwndView = (HWND)GetWindowLong (hwnd, 0); if (IsWindow (hwndView)) MoveWindow (hwndView, 0,0, cx, cy, TRUE);}
void Cls_OnDestroy (HWND hwnd)
{// ΠΏΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π΅ (Π»ΡΡΡΠ΅ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ
// ΡΠ°ΠΌΠΈΠΌ, Ρ ΠΎΡΡ Π² ΠΊΡΠ°ΠΉΠ½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ Π·Π° Π²Π°Ρ)
HWND hwndView = (HWND)GetWindowLong (hwnd, 0);
if (IsWindow (hwndView)) DestroyWindow (hwndView);
PostQuitMessage (0);}
void Cls_OnSetFocus (HWND hwnd, HWND hwndOldFocus)
{UNUSED_ARG (hwndOldFocus);
// ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΊΡΡΠ° Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ — Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°, ΡΡΠΎ Π±Ρ
// ΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ°
HWND hwndView = (HWND)GetWindowLong (hwnd, 0);
if (IsWindow (hwndView)) SetFocus (hwndView);}
LONG WINAPI _export WinProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{switch (uMsg) {
HANDLE_MSG (hWnd, WM_CREATE, Cls_OnCreate);
HANDLE_MSG (hWnd, WM_DESTROY, Cls_OnDestroy);
HANDLE_MSG (hWnd, WM_SIZE, Cls_OnSize);
HANDLE_MSG (hWnd, WM_SETFOCUS, Cls_OnSetFocus);
default: break;}
return DefWindowProc (hWnd, uMsg, wParam, lParam);}
static BOOL init_instance (HINSTANCE hInstance)
{WNDCLASS wc;
wc.style = 0;
wc.lpfnWndProc = WinProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 4; // Π΄Π»Ρ Ρ Π΅Π½Π΄Π»Π° ΠΎΠΊΠ½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ°
wc.hInstance = hInstance;
wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szWndClass;
return RegisterClass (&wc) == NULL? FALSE: TRUE;}
int PASCAL WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{UNUSED_ARG (lpszCmdLine);
MSG msg;
HWND hWnd;
if (!hPrevInst) {
if (!init_instance (hInst)) return 1;}
hWnd= CreateWindow (
szWndClass, // class name
" window header", // window name
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, CW_USEDEFAULT, // window position
CW_USEDEFAULT, CW_USEDEFAULT, // window size
NULL, // parent window
NULL, // menu
hInst, // current instance
NULL // user-defined parameters);
if (!hWnd) return 1;
ShowWindow (hWnd, nCmdShow);
UpdateWindow (hWnd);
while (GetMessage (&msg, NULL, NULL, NULL)) {
TranslateMessage (&msg);
DispatchMessage (&msg);}
return msg. wParam;}
Π€Π°ΠΉΠ» 2B16. CPP
// Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
#include
#include
// ΡΡΠ½ΠΊΡΠΈΠΈ GetLastError ΠΈ SetLastError Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² Windows API, ΡΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ ΠΈΡ
#define ERROR_SUCCESS 0
static int error_code = ERROR_SUCCESS;
int GetLastError (void)
{return error_code;}
int SetLastError (int err)
{int prev = error_code; return error_code = err;}
// ΡΡΠ½ΠΊΡΠΈΡ GetLogicalDriveStrings Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Windows API, ΠΏΡΠΈΡΠ΅ΠΌ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ // ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ Win32 ΠΎΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π·Π°Π³Π»ΡΡΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΈ ΡΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ
int GetLogicalDriveStrings (DWORD size, char* buf)
{UNUSED_ARG (size);
UNUSED_ARG (buf);
SetLastError (1);
return 0;}
// ΡΡΠ½ΠΊΡΠΈΡ GetLogicalDrives Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Windows API, Π½ΠΎ Π½Π°ΠΌ ΠΎΠ½Π° Π½ΡΠΆΠ½Π°
// Π΄Π»Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ — ΡΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π΅
DWORD GetLogicalDrives (void)
{DWORD dwDevices = 0L;
unsigned n, uTotal, uCurrent, uTest;
// Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ
_dos_getdrive (&uCurrent);
_dos_setdrive (uCurrent, &uTotal);
for (n = 1; n <= uTotal; n++) = 1L << (n -1);
// Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΏΡΠ΅ΠΆΠ½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ
_dos_setdrive (uCurrent, &uTotal);
return dwDevices;}
// ΡΡΠ½ΠΊΡΠΈΡ GetDriveType Π² Win32 API ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΌ Π² Windows;
// ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Win32 API UINT GetDriveType (LPSTR) ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ
// Windows API UINT GetDriveType (UINT), Π·Π°ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΏΠ°ΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΡ // ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
#ifndef DRIVE_CDROM
#define DRIVE_CDROM 5
#endif
#ifndef DRIVE_RAMDISK
#define DRIVE_RAMDISK 6
#endif
UINT GetDriveType (char* pRoot)
{char c;
if (pRoot) {
c = (char)AnsiUpper ((LPSTR)(DWORD)(UINT)(unsigned char)(pRoot[ 0 ]));
if (c >= 'A' && c <= 'Z') return GetDriveType (c — 'A');}
return 0;}
// ΡΡΠ½ΠΊΡΠΈΡ GetVolumeInformation Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² Windows API. ΠΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π΅ // Π² ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π·Π°ΠΎΠ΄Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ.
#define FS_CASE_IS_PRESERVED 1
#define FS_CASE_SENSITIVE 2
#define FS_UNICODE_STORED_ON_DISK 4
#define FS_PERSISTENT_ACLS 16
#define FS_FILE_COMPRESSION 32
#define FS_VOL_IS_COMPRESSED 64
BOOL GetVolumeInformation (
char *pRoot, char* pVolume, int cbVolume,
DWORD *sernum, DWORD *complen, DWORD *flags,
char *pFS, int cbFS)
{BOOL fReturnCode = FALSE;
char c;
unsigned uDrive, uCurrent, n;
UNUSED_ARG (cbVolume);
UNUSED_ARG (cbFS);
if (pRoot) {
c= (char)AnsiUpper ((LPSTR)(DWORD)(UINT)(unsigned char)(pRoot[ 0 ]));
if (c >= 'A' && c <= 'Z') {
uDrive = (unsigned)(c — 'A' + 1);
_dos_getdrive (&uCurrent);
_dos_setdrive (uDrive, &n);
_dos_getdrive (&n);
if (uDrive == n) {// ΡΠ±Π΅Π΄ΠΈΠΌΡΡ, ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ
// ΡΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ Π²ΡΠ΅ ΡΡΠΎ ΡΡΠΎΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠ½Π΅Π΅:
pVolume[0] = '';
*sernum = 0L;
*complen = 12;
*flags = (long)FS_CASE_IS_PRESERVED;
pFS = '';
// ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, Π΅ΡΡΡ Π»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ — Π΅ΡΠ»ΠΈ ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌ
// TRUE, ΡΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π½Π°ΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΠ° ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠ·Π½Π°ΡΡ
// ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΌΠ°
if (!access (pRoot, F_OK)) fReturnCode = TRUE;}
// Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ
_dos_setdrive (uCurrent, &n);}}
return fReturnCode;}
// ΡΡΠ½ΠΊΡΠΈΡ GetDiskFree Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² Windows API, ΡΠΌΡΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ
// ΡΡΠ½ΠΊΡΠΈΠΈ _dos_getdiskfree ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
void GetDiskFreeSpace (char* pRoot, DWORD* spc, DWORD* bps, DWORD* fc, DWORD* tc)
{char c;
diskfree_t df;
if (pRoot) {
c = (char)AnsiUpper ((LPSTR)(DWORD)(UINT)(unsigned char)(pRoot[ 0 ]));
if (c >= 'A' && c <= 'Z') {
if (!_dos_getdiskfree (c — 'A' + 1, &df)) {
*spc = df. sectors_per_cluster;
*bps = df. bytes_per_sector;
*fc = df. avail_clusters;
*tc = df. total_clusters;}}}}
// ΡΡΠ½ΠΊΡΠΈΠΈ DefineDosDevice ΠΈ QueryDosDevice Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Windows API.
// ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΈΡ Π·Π°Π³Π»ΡΡΠΊΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ NT
#define DDD_REMOVE_DEFINITION 1
#define DDD_EXACT_MATCH_ON_REMOVE 2
BOOL DefineDosDevice (DWORD dwFlags, LPSTR lpDosDevice, LPSTR lpPath)
{UNUSED_ARG (dwFlags);
UNUSED_ARG (lpDosDevice);
UNUSED_ARG (lpPath);
SetLastError (1);
return FALSE;}
DWORD QueryDosDevice (LPSTR lpDosDevice, LPSTR lpPath, DWORD ucchMax)
{UNUSED_ARG (lpDosDevice);
UNUSED_ARG (lpPath);
UNUSED_ARG (ucchMax);
SetLastError (1);
return 0L;}
Π Π΅Π·ΡΠΌΠ΅ ΠΡΠ±ΠΎΠΏΡΡΠ½ΠΎ, ΡΡΠΎ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ — Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΎΠΌΠ°Ρ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΡΠ΅Π½ΠΈΡ Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΎΠΌ Π² ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΠΎΠ²ΡΠ΅ — Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΡΡΡ Π΄ΠΈΡΠΊΠ΅ΡΡ. Π Π°Π·Π½ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ΅Π°Π³ΠΈΡΡΡΡ Π½Π° ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ°Π·Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ — Windows-95, ΡΠ±Π΅Π΄ΠΈΠ²ΡΠΈΡΡ ΡΡΠΎ ΡΠΎΠΌΠ° Π½Π΅Ρ, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΡΠ»ΠΈ, Π° Windows NT ΠΈΠ»ΠΈ Windows 3. x Π²ΡΠ΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠ΅.
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ SetErrorMode, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠ΅Π½ΠΈΡ Ρ Π΄ΠΈΡΠΊΠ°. ΠΡΠ±ΠΎΠΏΡΡΠ½ΠΎ, ΡΡΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Win32 API ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ RISC ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² — ΡΡΡΠ°Π½Π½ΠΎ, Π½ΠΎ Π½Π° ΠΎΠ±ΡΡΠ½ΡΡ Intel Pentium ΠΎΠ½Π° ΡΠΎΠΆΠ΅ ΡΡΠ°Π±ΠΎΡΠ°Π»Π°. Π ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡΡ ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΠ΅ΡΡΠ° ΡΠ΅Π°ΠΊΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ (Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ SetErrorMode) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2B Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° 2Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ :
Π) ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ Windows-95 Π Π΅Π°Π»ΡΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π΅ΡΠ΅ ΠΈ Π½Π° ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ Ρ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Windows-98, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π»ΠΎΡΡ ΠΎΡ Windows-95, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½ΡΠ°Π½ΡΠ° Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ DefineDosDevice ΠΈ QueryDosDevice. ΠΈ Windows 3.11 + Win32s
Π΄ΠΈΡΠΊ A — 3.5″, Π΄ΠΈΡΠΊΠ΅ΡΠ° Π½Π΅ Π²ΡΡΠ°Π²Π»Π΅Π½Π° Π΄ΠΈΡΠΊ C — EIDE HDD, ΡΠΎΠΌ «Bootable»
Π΄ΠΈΡΠΊ D — SCSI HDD, ΠΏΠΎΠ΄ Windows 3.11 Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ΅ΡΠ΅Π· ASPI Π΄ΡΠ°ΠΉΠ²Π΅Ρ, ΡΠΎΠΌ «SCSI_VOL»
Π΄ΠΈΡΠΊ E — IDE CD-ROM, Π΄ΠΈΡΠΊ Π½Π΅ Π²ΡΡΠ°Π²Π»Π΅Π½ Π) ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ Windows NT
Π΄ΠΈΡΠΊ A — 3.5″, Π΄ΠΈΡΠΊΠ΅ΡΠ° Π½Π΅ Π²ΡΡΠ°Π²Π»Π΅Π½Π° Π΄ΠΈΡΠΊ C — SCSI HDD,
Π΄ΠΈΡΠΊ D — IDE CD-ROM, Π΄ΠΈΡΠΊ Π½Π΅ Π²ΡΡΠ°Π²Π»Π΅Π½ ΠΡΠ΅Π³ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ 6 ΡΠ΅ΡΡΠΎΠ² — Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈΡΡ 16ΡΠΈ ΠΈ 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠ΅Π΄Π΅ Windows 3.11 + Win32s, Windows-95 ΠΈ Windows NT Server 4.0. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΎΠ² ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
Π‘ΡΠ΅Π΄Π° Windows 3.11+Win32s, 16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
******** GET VOLUME INFORMATION ********
Root: A: type=REMOVABLE volume='' ***** NO VOLUME INFORMATION!
Root: C: type=FIXED volume='' serial=0
maximal component length=12 cluster=16 384 total=82 2272K free=71712K
file system ='' flags=CASE_PRESERVED
Root: D: type=FIXED volume='' serial=0
maximal component length=12 cluster=32 768 total=106 5792K free=45408K
file system ='' flags=CASE_PRESERVED
Root: E: type=REMOTE volume='' ***** NO VOLUME INFORMATION!
******** READ DOS DEVICES MAP ********
NOTE: DefineDosDevice () is not implemented!
16ΡΠΈ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ Π΄ΠΈΡΠΊΠ°ΠΌ Π² ΡΡΠ½ΠΊΡΠΈΠΈ access (Π² ΡΠΌΡΠ»ΡΡΠΈΠΈ GetVolumeInformation), ΡΡΠΎ Π΄Π»Ρ Π΄ΠΈΡΠΊΠΎΠ² A (Π³ΠΈΠ±ΠΊΠΈΠΉ Π΄ΠΈΡΠΊ) ΠΈ E (CD-ROM) ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ «Cannot read from drive …»;
ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ CD-ROM ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ.
Π‘ΡΠ΅Π΄Π° Windows 3.11+Win32s, 32Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
******** GET VOLUME INFORMATION ********
Root: A: type=REMOVABLE volume='' ***** NO VOLUME INFORMATION!
Root: C: type=FIXED volume='BOOTABLE' serial=0
maximal component length=12 cluster=16 384 total=82 2272K free=71728K
file system ='FAT' flags=
Root: D: type=RAM DISK volume='SCSI_VOL' serial=0
maximal component length=12 cluster=32 768 total=106 5792K free=45408K
file system ='FAT' flags=
Root: E: type=CD-ROM volume='SCSI_VOL' serial=0
maximal component length=12 cluster=0 total=0K free=0K
file system ='FAT' flags=
******** READ DOS DEVICES MAP ********
NOTE: DefineDosDevice () is not implemented!
Π Π΅Π°ΠΊΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³Π°Ρ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Win32 API, Π° Π½Π΅ ΠΈΡ ΡΠΌΡΠ»ΡΡΠΈΡ Π½Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ).
ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π΄ΠΈΡΠΊΡ A Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π΄ΠΈΡΠΊΡ E (CD-ROM) ΡΡΠ½ΠΊΡΠΈΡ GetVolumeInformation (ΠΏΡΠΈΡΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² Win32s, Π° Π½Π΅ Π΅Π΅ ΡΠΌΡΠ»ΡΡΠΈΡ Ρ Π½Π°Ρ) Π΄Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ (?!) ΠΏΠΎΠ»ΡΡΠ΅Π½Π°, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠ·Π½Π°ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΌ Π΄ΠΈΡΠΊΠ΅ E — Ρ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ (Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ «no volume information»).
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΎ, ΡΡΠΎ ΡΠΈΠΏ Π΄ΠΈΡΠΊΠ° E — CD-ROM — ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° — CDFS (ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° CD Π΄ΠΈΡΠΊΠΎΠ²) ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½Π° ΠΊΠ°ΠΊ FAT, Π° ΠΌΠ΅ΡΠΊΡ ΡΠΎΠΌΠ° ΠΏΠΎΠ·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π΄ΠΈΡΠΊΠ° Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΈΡΠ½ΠΎ Π΄Π»Ρ MSCDEX. EXE, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΈΡΠΊΠ°ΠΌ Ρ CDFS Π² ΡΡΠ΅Π΄Π΅ MS-DOS; ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π΄ΠΈΡΠΊΠ° MSCDEX ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π² ΠΊΡΡΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ Π΄ΠΈΡΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄Π°ΠΆΠ΅ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠ°Π½ΡΡΠ΅ Π²ΡΡΠ°Π²Π»Π΅Π½, Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ. ΠΡΠΎ, ΠΊΡΡΠ°ΡΠΈ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ — ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΠΎΠΌΠ΅ Ρ CDFS Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠΎΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΈΠ²ΠΎΠ΄Π΅! ΠΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ°ΠΉΠ»Π° Π½Π° CD-ROM Π»ΡΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅, Π° ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, ΡΡΠΎ Π±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ°ΠΉΠ»Π°.