Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ β€” это просто

МногиС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ самому ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для Windows это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° Π³Ρ€Π°Π½ΠΈ фантастики. Но Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° для ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Π½Π°Π²ΠΎΡ€ΠΎΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ дСвайса Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Но вСдь Ρ‚ΠΎΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ созданиС слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈΠ»ΠΈ ΠΈΠ³Ρ€. Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ простого Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного ΠΈ я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… это ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ.

Π‘ΠΏΠ΅Ρ€Π²Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ опрСдСлится Π² Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Ρ‚ΠΎ язык программирования Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· простых, ΠΈ это Π½Π΅ Π‘ΠΈ ΠΈΠ»ΠΈ ассСмблСр, Π° бСйсик. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ΠΎΠ² бСйсика β€” PureBasic. Из ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ ΠΎΠ½ Π½Π΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹, Π½ΠΎ Ρƒ Π½Π΅Π³ΠΎ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для компиляции ΠΈ нСбольшоС ΡˆΠ°ΠΌΠ°Π½ΡΡ‚Π²ΠΎ позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ компиляции состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… этапов. Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ ΠΎΠ½ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π‘Π½Π°Ρ‡Π°Π»Π° транслятор «пСрСгоняСт» basic-ΠΊΠΎΠ΄ Π² ассСмблСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отдаСтся FASM’Ρƒ (компилятор ассСмблСра), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π”Π°Π»Π΅Π΅ Π² Π΄Π΅Π»ΠΎ вступаСт Π»ΠΈΠ½ΠΊΠ΅Ρ€ polink, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ исполняСмый Ρ„Π°ΠΉΠ». Как компилятор ассСмблСра, Ρ‚Π°ΠΊ ΠΈ Π»ΠΈΠ½ΠΊΠ΅Ρ€ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΈ Ссли Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΈ компиляции, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π΅ исполняСмый Ρ„Π°ΠΉΠ», Ρ‚ΠΈΠΏΠ° EXE ΠΈΠ»ΠΈ DLL, Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Ρ€Π΅ΠΆΠΈΠΌΠ° ядра (SYS).

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π±Π΅ΡΠΏΠ»Π°Ρ‚Π½ΡƒΡŽ Π΄Π΅ΠΌΠΎ Π²Π΅Ρ€ΡΠΈΡŽ PureBasic 4.61 x86 ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠΏΠΎΠΌΠΎΠΉΠΊΠ΅, Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ.
Если Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ для x64 систСмы, ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ эту Π²Π΅Ρ€ΡΠΈΡŽ, Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ.

Дистрибутивы ΠΈΠΌΠ΅ΡŽΡ‚ нСбольшиС Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, ΠΎΠΊΠΎΠ»ΠΎ 3 ΠœΠ‘ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой вСрсии ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.
Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ, распаковываСм ΠΈ запускаСм, ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ² ΠΏΠΎ Ρ„Π°ΠΉΠ»Ρƒ Β«PureBasic PortableΒ». ΠŸΡ€ΠΈ этом запустится IDE ΠΈ Π²Ρ‹Π»Π΅Π·Π΅Ρ‚ окошко с сообщСниСм Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΌΠΎ-вСрсия ΠΈ списком ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Из Π½Π΅Π³ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сущСствСнным являСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ числа строк ΠΊΠΎΠ΄Π°, Ρ€Π°Π²Π½ΠΎΠ΅ 800, Π° для создания простых Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² этого ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ограничСния Π² нашСм случаС, Π½Π΅ сущСствСнны.

Окно IDE с Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° скринС.

Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° выполняСтся Ρ‡Π΅Ρ€Π΅Π· мСню Β«ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€Β» (это Ссли ΠΊΡ‚ΠΎ Π½Π΅ понял).
Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ опрСдСлимся Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ программирования Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ с простых Π²Π΅Ρ‰Π΅ΠΉ, скаТСм, выполнСния матСматичСских ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’ΠΎΡ‚ ΠΏΡƒΡΡ‚ΡŒ наш Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ самоС, вСдь банальная ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° производимая Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра это ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎ!

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ это ΠΊΡƒΡ‡Π° бСссмыслСнного ΠΊΠΎΠ΄Π°, Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ.

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρƒ Π½Π΅Π΅ имя DriverEntry() ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΎΠ½Π° Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² этом Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ такая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°. Если посмотритС Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строках ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Π΅ΠΉ пСрСдаСтся ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅. Π’ этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ происходит инициализация Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π’Π°ΠΌ ΠΆΠ΅ назначаСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, которая Π² нашСм случаС ΠΈΠΌΠ΅Π΅Ρ‚ имя UnloadDriver(). ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ CreateDispatch() ΠΈ CloseDispatch() Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ соСдинСния ΠΈ отсоСдинСния ΠΏΡ€ΠΎΠ³ΠΈ ΠΈΠ· ΡŽΠ·Π΅Ρ€ΠΌΠΎΠ΄Π°.
ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° DeviceIoControl() Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы WinAPI Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DeviceIoControl(), ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅ связью с ΡŽΠ·Π΅Ρ€ΠΌΠΎΠ΄ΠΎΠΌ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ΄Π° располоТСна Ρ‚Π°ΠΊ называСмая ДатаБСкция (DataSection), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находятся ΠΈΠΌΠ΅Π½Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, сохранСнныС Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ юникода (для этого использована ΠΎΠ΄Π½Π° ΠΈΠ· Ρ„ΠΈΡˆΠ΅ΠΊ ассСмблСра FASM).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΊΠ°ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с внСшним ΠΌΠΈΡ€ΠΎΠΌ. Π­Ρ‚ΠΎ происходит Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ DeviceIoControl(). Π’ Π½Π΅ΠΉ отслСТиваСтся ΠΎΠ΄Π½ΠΎ сообщСниС, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β€” #IOCTL_MyPlus, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отправляСт ΡŽΠ·Π΅Ρ€ΠΌΠΎΠ΄Π½Π°Ρ ΠΏΡ€ΠΎΠ³Π°, ΠΊΠΎΠ³Π΄Π° Π΅ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π²Π° числа Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра (ΠΊΡ€ΡƒΡ‚ΠΎ Π·Π²ΡƒΡ‡ΠΈΡ‚, ΠΏΡ€Π°Π²Π΄Π°?). Когда Ρ‚Π°ΠΊΠΎΠ΅ сообщСниС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ, Ρ‚ΠΎ считываСм ΠΈΠ· систСмного Π±ΡƒΡ„Π΅Ρ€Π°, адрСс указатСля Π½Π° структуру со слагаСмыми, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ слоТСниС ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π² систСмный Π±ΡƒΡ„Π΅Ρ€. БобствСнно это основная Π·Π°Π΄Π°Ρ‡Π° нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

Π’ΠΈΠ΄ΠΈΡ‚Π΅ сколько понадобилось ΠΊΠΎΠ΄Π° для выполнСния ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ матСматичСской ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ β€” слоТСния Π΄Π²ΡƒΡ… чисСл?

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ с этим Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. Она написана Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ PureBasic.

ΠŸΡ€ΠΈ стартС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вызываСтся функция OpenDriver(), которая Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. Для упрощСния, имя Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°, имя слуТбы ΠΈ описаниС слуТбы Π·Π°Π΄Π°Π½Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ β€” Β«pbDrPlusΒ». Если Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° нСудачная, Ρ‚ΠΎ выводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сообщСниС ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Plus() осущСствляСт связь с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. Π•ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ хэндл, доступа ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ ΠΈ слагаСмыС числа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² структуру ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, пСрСдаСтся Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слоТСния чисСл Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«ResultΒ».

Π”Π°Π»Π΅Π΅ слСдуСт ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ GUI ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°, скопированного ΠΈΠ· Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ.

Когда Π·Π°ΠΊΡ€ΠΎΡŽΡ‚ ΠΎΠΊΠ½ΠΎ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, закрываСтся связь с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΈ производится Π΅Π³ΠΎ дСинсталляция ΠΈΠ· систСмы.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слоТСния чисСл 8 ΠΈ 2 Π½Π° ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅.

Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΠ΅ Β«ExamplesΒ», PureBasic Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠΏΠΎΠΌΠΎΠΉΠΊΠ΅, ссылку Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π²Π°Π» Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π’Π°ΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° прямого доступа ΠΊ ΠΏΠΎΡ€Π°ΠΌ ΠΊΠΎΠΌΠΏΠ° ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ядра.

PS.
ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ€Π°Π±ΠΎΡ‚Π° Π² ядрС Ρ‡Ρ€Π΅Π²Π°Ρ‚Π° ΠΌΠ΅Π»ΠΊΠΈΠΌΠΈ нСоТиданностями аля, BSOD (синий экран смСрти), поэтому экспСримСнтируйтС остороТно ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ всё сохраняйтС ΠΏΠ΅Ρ€Π΅Π΄ запуском Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

Π—Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, я отвСтствСнности Π½Π΅ нСсу!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

На ΠΊΠ°ΠΊΠΎΠΌ языкС ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°?

ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ…, курсовых ΠΈ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‚ здСсь.

На ΠΊΠ°ΠΊΠΎΠΌ языкС Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°?
Π£ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.Π‘Ρ‚Π°Ρ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€ ΠΈ сканСр Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с 8 ΠΈ 10.Π₯ΠΎΡ‡Ρƒ сам Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ для Π½ΠΈΡ….

На ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ассСмблСрС ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹?
ВсСм Π΄ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток! Π˜Π·ΡƒΡ‡Π°Π» с Π³ΠΎΡ€Π΅ΠΌ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ассСмблСр. Π’ Linux, компилятор Π±Ρ‹Π» nasm. Π£Π·Π½Π°Π».

На ΠΊΠ°ΠΊΠΎΠΌ языкС ΠΏΠΈΡˆΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄ линукс
На ΠΊΠ°ΠΊΠΎΠΌ языкС ΠΏΠΈΡˆΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄ линукс ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ срСдС?

На ΠΊΠ°ΠΊΠΎΠΌ языкС ΠΏΠΈΡˆΡƒΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½Ρ‹Π΅ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈΠ³Ρ€Ρ‹?
Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΊΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ? Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ³Ρ€Ρƒ, это я понимаю.

Волько это Ρ‚Π΅Π±Π΅ Π½Π΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΆΠΊΠΈ ΠΊΠ»Π΅ΠΏΠ°Ρ‚ΡŒ!

Π”Π°Π²Π°ΠΉ, напиши. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΡ‹ΡˆΠΈ Π½Π΅ слоТно Π±ΡƒΠ΄Π΅Ρ‚ для Π½Π°Ρ‡Π°Π»Π°?

Допустим, ΡΠ»Ρ‹ΡˆΠ°Π», Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ понимаю, ΠΊΠ°ΠΊ соотносится эль-76 ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€?

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· 1 ΠΌΠΈΠ½ΡƒΡ‚Ρƒ

НС Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ ΡΠ»ΡŒΠ±Ρ€ΡƒΡΡ‹ ΠΈ эль-76.

Ну спасибо, ΠΊ Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΠΊΠ°ΠΌ мСня Π΅Ρ‰Π΅ Π½Π΅ подшивали, Π²Ρ€ΠΎΠ΄Π΅ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ Π΄Ρ€Π΅ΠΌΡƒΡ‡ΠΈΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ «ΠΏΡ€ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΡ‹ΡˆΠΈ Π½Π° Ρ„ΠΎΡ€Ρ‚Ρ€Π°Π½Π΅». ΠŸΠΈΡΠ°Ρ‚ΡŒ Π΅Π³ΠΎ, СстСствСнно, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ собираСтся. Π’Ρ‹ это Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΎΡ‚ мСня? Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π» Ρ‡Ρ‚ΠΎ это «Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ», ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅.
Вряд-Π»ΠΈ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ станСт Π΄ΠΎΠ±Ρ‹Π²Π°Ρ‚ΡŒ огонь Ρ‚Ρ€Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π² ΠΊΠ°Ρ€ΠΌΠ°Π½Π΅ Π·Π°ΠΆΠΈΠ³Π°Π»ΠΊΠ°.

Π’ΠžΠ’! НаконСц-Ρ‚ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅. ПослС Ρ‡Π΅Π³ΠΎ всС свои вопросы снимаю. А Ссли чСстно, Ρ‚ΠΎ я попросту ΠΏΠΎΠ΄ΡƒΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ΅ появился ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π·Π°Π»Ρ‘Ρ‚Π½Ρ‹ΠΉ ΡƒΠΌΠ½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ услыхал ΡƒΠΌΠ½Ρ‹Ρ… слов Ρ‚ΠΈΠΏΠ° «Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€» ΠΈΠ»ΠΈ «ΡΠ»ΡŒ-76» ΠΈ Π½Π°Ρ‡Π°Π» Π³Π½ΡƒΡ‚ΡŒ ΠΏΠ°Π»ΡŒΡ†Ρ‹. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ извиняй, обознался Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² устройств для Ρ‡Π°ΠΉΠ½ΠΈΠΊΠΎΠ²

#1 Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°dE fENDER Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

#2 Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°dE fENDER Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π’ этой Ρ‚Π΅ΠΌΠ΅ я ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽ Π΄Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΡŽ ΡƒΡ€ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ устроСна систСма взаимодСйствия ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ ПО ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ОБ Windows, Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ исходныС ΠΊΠΎΠ΄Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² устройств ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ с Π΅Π³ΠΎ собствСнным устройством.

Π’Π°ΠΊΠΆΠ΅ эти ΡƒΡ€ΠΎΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅Π² Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚ с графичСскими Ρ‡ΠΈΠΏΠ°ΠΌΠΈ, ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ 3dfx, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² доступных исходных ΠΊΠΎΠ΄Π°Ρ… Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² этих Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚. УпомянутыС исходники ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ с наимСньшим количСством ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»ΠΎΠΊ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΠΎΠ΄ Windows XP/Windows 2003 Server, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ основной Ρ†Π΅Π»Π΅Π²ΠΎΠΉ систСмой. Π’ Π±ΠΎΠ»Π΅Π΅ соврСмСнной Windows Vista/7 нСсколько измСнилась модСль Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сильно это Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΎ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ подсистСму. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ для ΠΈΡ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ придСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ вСсьма Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΠ΄ Ρ…64 вСрсиями Vista/7 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Ρ€ΡˆΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм просто Ρ‚Π°ΠΊ нСльзя Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи. Подпись стоит порядка 500 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π² Π³ΠΎΠ΄ (150, Ссли Π½Π°ΠΉΡ‚ΠΈ ΠΊΡƒΠΏΠΎΠ½ Π½Π° скидку), ΠΈΡ… Π½Π΅ Π»ΡŽΠ±ΡΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ частным Π»ΠΈΡ†Π°ΠΌ ΠΈ Π΄Π°ΠΆΠ΅ нСбольшим организациям. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π² подписанном Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅ обнаруТится ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Π΅ΠΉ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ…Π°ΠΊΠ΅Ρ€Ρ‹ – Ρ‚ΠΎ подпись Π΄Π°Π½Π½ΠΎΠ³ΠΎ [ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΎΠ³ΠΎ] Π»ΠΈΡ†Π° аннулируСтся ΠΈ Ρƒ Π½Π΅Π³ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ. Π•Ρ‰Π΅ Π΅ΡΡ‚ΡŒ такая ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, ΠΊΠ°ΠΊ WHQL-сСртификация, Π½ΠΎ Π΅Π΅ я Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΏΠΎΠΊΠ° здСсь ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ.

Π’Π΅ΡΡŒΠΌΠ° привСтствуСтся, Ссли Π΄Ρ€ΡƒΠ³ΠΈΠ΅ люди Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π°Π²Π°Ρ‚ΡŒ здСсь свои собствСнныС ΡƒΡ€ΠΎΠΊΠΈ, Π½Π΅ выходящиС Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Ρ‚Π΅ΠΌΡ‹. Π’Π°ΠΊΠΆΠ΅ здСсь ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ вопросы, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ свои ΠΈΠ΄Π΅ΠΈ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡƒΡ€ΠΎΠΊΠΎΠ² ΠΈ ΠΎΡ‚ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ± своих ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ…/Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ….

Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ трСбуСтся ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ знакомство с Π»ΡŽΠ±Ρ‹ΠΌ языком программирования. Π”ΡƒΠΌΠ°ΡŽ, для этого Π²ΠΏΠΎΠ»Π½Π΅ достаточно школьного / вузовского курса для нСпрограммистов. Если ΠΆΠ΅ Π² соврСмСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… образования знакомство с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ Π±Ρ‹Π»ΠΎ прСдусмотрСно/Π·Π° Π΄Π°Π²Π½ΠΎΡΡ‚ΡŒΡŽ Π»Π΅Ρ‚ курс Π·Π°Π±Ρ‹Ρ‚ ΠΈΠ»ΠΈ просто Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСпонятно – ΠΎΡ‚ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π² Ρ‚Π΅ΠΌΠ΅, я Π½Π°ΠΏΠΈΡˆΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ€ΠΎΠΊΠΈ, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅ΠΉ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ.

#3 Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°White Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

#4 Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°dE fENDER Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

Π£Ρ€ΠΎΠΊ 0. Установка ΠΈ настройка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния

Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния:

Установка Visual Studio
Π― Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Visual Studio 2010 Ultimate. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ компилятор ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π΅ΡΡ‚ΡŒ ΠΈ Π² WDK. Но для написания ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π² особСнности для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°, ΠΎΠ½Π° Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅ΠΉ Π²Ρ‹Π·ΠΎΠ²Π° компилятора ΠΈΠ· консоли. Если Π΅Π΅ всС ΠΆΠ΅ планируСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΠ΅Ρ€Π΅Π΄ установкой WDK.

Π‘Π΅Ρ€Π΅ΠΌ диск со студиСй Π² iso-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² Daemon Tools, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дисковод Π² VMWare. ЗапускаСм с диска setup.exe, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Β«Install Microsoft Visual Studio 2010Β». На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС ΠΏΠΎΠ΄ Windows 2003 ΠΌΠΎΠΆΠ΅Ρ‚ появится сообщСниС, Ρ‡Ρ‚ΠΎ трСбуСтся Windows Imaging Component. Π©Π΅Π»ΠΊΠ°Π΅ΠΌ ΠΏΠΎ этой строкС, запускаСтся Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ – скачиваСм подходящий ΠΏΠΎ языку ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы (Ρƒ мСня английский, Π·Π½Π°Ρ‡ΠΈΡ‚ wic_x86_enu.exe), устанавливаСм. Π—Π°Π½ΠΎΠ²ΠΎ запускаСм setup.exe с диска. НаТимаСм Next, соглашаСмся с Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹ΠΌ соглашСниСм, Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠ° установки. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Custom, измСняСм ΠΏΡƒΡ‚ΡŒ установки – для избСТания ошибок Visual Studio ΠΈ всС Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ инструмСнты слСдуСт ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ максимально ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ Π±Π΅Π· русских Π±ΡƒΠΊΠ² ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². Мой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – C:\Programs\VS10. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ страница – Π²Ρ‹Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². УстанавливаСм Π² соотвСтствии с рисунком:

Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
Рис 0.1 – Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² установщикС Visual Studio

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ…, ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Β«Visual C#Β». C# Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ возмоТностСй самой Visual Studio ΠΈ написания Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚. НаТимаСм Install. ΠšΡ€ΠΎΠΌΠ΅ самой студии ставится ΠΊΡƒΡ‡Π° бСсполСзной, Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΈ Π²Ρ€Π΅Π΄Π½ΠΎΠΉ дряни. Если Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ Π±Ρ‹Π»Π° старая вСрсия Windows Installer’Π° – потрСбуСтся ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°. ПослС установки – Finish, Exit.

Установка WDK
ΠœΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ скачанный iso-ΠΎΠ±Ρ€Π°Π· Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано с Visual Studio. ЗапускаСм KitSetup.exe, Π½Π° этапС Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² устанавливаСм Π³Π°Π»ΠΎΡ‡ΠΊΠΈ Π² соотвСтствии с рисунком:

Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π€ΠΎΡ‚ΠΎ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°
Рис 0.2 – Π’Ρ‹Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² установщикС WDK

Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Visual Studio ΠΈ WDK Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ машинС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ планируСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ я поставил ΠΈΡ… Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ машинС с Windows 7 Ρ…64 ΠΈ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π» Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΏΠΎΠ΄ Windows 2003 Server Ρ…86.
Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π° дискС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², учитывая Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ (Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ русских Π±ΡƒΠΊΠ²), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ C:\Projects. ЗапускаСм Visual Studio, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ настройки (мСню Tools/Option), Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π² Π΄Π΅Ρ€Π΅Π²Π΅ Β«Projects and Solutions/GeneralΒ», Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Projects location Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ/ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ созданный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³.

Π’Π°ΠΊΠΆΠ΅ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Far Manager 2 ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ. Π•Π³ΠΎ прСимущСство Π½Π°Π΄ Windows/Total Commander’Π°ΠΌΠΈ ΠΈ Explorer’Π°ΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅Π³ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π²ΠΈΠ΄Π½ΠΎ содСрТимоС консоли (ΠΊΠΎΠΌΠ°Π½Π΄Π° ctrl + O), ΠΊΡƒΠ΄Π° выдаСтся полСзная информация ΠΏΡ€ΠΈ компиляции ΠΈ запускС ΠΊΠΎΠ½ΡΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡƒΡ‚ΡŒ установки ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ PATH.

Π’ дальнСйшСм рассмотрим ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ для Windows 9x. Для этого потрСбуСтся Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² для Windows 9x ΠΏΡ€ΠΎΡ‰Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

На ΠΊΠ°ΠΊΠΎΠΌ языкС программирования ΠΏΠΈΡˆΡƒΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°

НСдавно ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠΏΡΡ‚ΡŒ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ. И Π²ΠΎΡ‚ Π²Ρ‡Π΅Ρ€Π° я, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ, сдал Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈ Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ эту Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΡ‚Π°Ρ‚ΡŒΡŽ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ³Π΄Π° ΠΌΠ½Π΅ снова придСтся Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Π±Ρ‹Π»ΠΎ ΠΎΡ‚ Ρ‡Π΅Π³ΠΎ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ.

Π›ΡŽΠ΄ΠΈ, Π·Π½Π°ΡŽΡ‰ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ IOCTL, DEVICE_EXTENSION, MajorFunction ΠΈ DriverEntry Π½Π΅ Π½Π°ΠΉΠ΄ΡƒΡ‚ здСсь Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π» слово Π”Π”Πš, ΠΈ ΠΊΡ‚ΠΎ Π΄ΠΎ сСго дня Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ заглядывал Π² исходники Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ². И Π΅Ρ‰Π΅, я Π±ΡƒΠ΄Ρƒ довольно-Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅, Π΄Π°ΠΆΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, поэтому напомню ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ данная ΡΡ‚Π°Ρ‚ΡŒΡ рассчитана Π½Π° людСй с ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ программирования, ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹Π» Ρƒ мСня, ΠΊΠΎΠ³Π΄Π° я занялся написаниСм Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, с Ρ‡Π΅ΠΌ сталкиваСтся программист, Ρ€Π΅ΡˆΠΈΠ²ΡˆΠΈΠΉ Π·Π°Π½ΡΡ‚ΡŒΡΡ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ, это ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ отсутствиС русскоязычной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ Ρ‚Π΅ΠΌΠ΅. Π—Π° Π³ΠΎΠ΄ поисков ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ всСго Ρ‚Ρ€ΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° русском, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хотя Π±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ говорится ΠΎ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°Ρ…:

————————
1. Π‘Π²Π΅Π½ Π¨Ρ€Π°ΠΉΠ±Π΅Ρ€ «ΠΠ΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ возмоТности Windows 2000». Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ «ΠŸΠΈΡ‚Π΅Ρ€» 2002 Π³ΠΎΠ΄.
Π—Π΄Π΅ΡΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ описан ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.
——————
2. П. И. Π ΡƒΠ΄Π°ΠΊΠΎΠ², К. Π“. Π€ΠΈΠ½ΠΎΠ³Π΅Π½ΠΎΠ² «Π―Π·Ρ‹ΠΊ ассСмблСра: ΡƒΡ€ΠΎΠΊΠΈ программирования» Π”ΠΈΠ°Π»ΠΎΠ³ МИЀИ 2001 Π³ΠΎΠ΄.
ΠžΡ‡Π΅Π½ΡŒ полСзная ΠΊΠ½ΠΈΠ³Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π±Π΅Π· всякий Wizard-ΠΎΠ².
——————————
3. Π‘Π²Π΅Ρ‚Π»Π°Π½Π° Π‘ΠΎΡ€ΠΎΠΊΠΈΠ½Π°, АндрСй Π’ΠΈΡ…ΠΎΠ½ΠΎΠ², АндрСй Π©Π΅Ρ€Π±Π°ΠΊΠΎΠ² «ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈ систСм бСзопасности». Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ «Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³» 2002 Π³ΠΎΠ΄.
Π—Π΄Π΅ΡΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ описываСтся многоуровнСвая модСль Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ².

Π― Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΡŽ ΠΊΠ°ΠΊ Π½Π° ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ освСщСния Ρ‚Π΅ΠΌΡ‹ написания Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², Ρ‚Π°ΠΊ ΠΈ Π½Π° 100% ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ здСсь написано (Π½ΠΎ всС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ здСсь исходники ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Ρ‹ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ работоспособными). Π‘ΡƒΠ΄Ρƒ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ всСм, ΠΏΡ€ΠΈΡΠ»Π°Π²ΡˆΠΈΠΌ ΠΌΠ½Π΅ (01_artem@mail.ru) ΠΈΠ»ΠΈ Π²Ρ‹ΡΠΊΠ°Π·Π°Π²ΡˆΠΈΠΌ Π² Ρ„ΠΎΡ€ΡƒΠΌΠ΅ свои замСчания.

Π˜Ρ‚Π°ΠΊ, я ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡΡŒ ΠΊ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ, Ρ€Π΅ΡˆΠΈΠ²ΡˆΠ΅ΠΌΡƒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π”Ρ€Π°ΠΉΠ²Π΅Ρ€ уровня ядра ΠΏΠΎΠ΄ Win2000/NT. НадСюсь, эти Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ сил.

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ. Для Π½Π°Ρ‡Π°Π»Π° Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Visul C++ 6.0, MSDN ΠΈ NTDDK установку ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этом порядкС. Π›ΠΈΡ‡Π½ΠΎ я ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ UltraEdit для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с тСкстами Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², Π½ΠΎ, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, исходный ΠΊΠΎΠ΄ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±ΠΈΡ€Π°Ρ‚ΡŒ Π² любом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Ρ…ΠΎΡ‚ΡŒ Π² NotePad.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ (ΠΏΡƒΡΡ‚ΡŒ это Π±ΡƒΠ΄Π΅Ρ‚ C:myDriver). Π’ этой ΠΏΠ°ΠΏΠΊΠ΅ создадим 5 Ρ„Π°ΠΉΠ»ΠΎΠ²:
1. myDrv.c
2. myDrv.h
3. myDrv.rc
4. MAKEFILE
5. SOURCES

НачнСм с послСднСго Ρ„Π°ΠΉΠ»Π°. Π’ SOURCES скопируйтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

#define FIRST_IOCTL_INDEX 0x800
#define FILE_DEVICE_myDRV 0x00008000

#define TEST_SMTH CTL_CODE(FILE_DEVICE_myDRV, \
FIRST_IOCTL_INDEX + 101, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)

#include «ntddk.h»
#include «myDrv.h»
#include «parallel.h»

#define NT_DEVICE_NAME L»\\Device\\myDrv»
#define DOS_DEVICE_NAME L»\\DosDevices\\myDrv»

//структура Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ устройства
typedef struct _DEVICE_EXTENSION
<
PDRIVER_OBJECT DriverObject;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
HANDLE Handle;

//ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
NTSTATUS
DriverDeviceControl(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);

VOID
DriverUnload(IN PDRIVER_OBJECT DriverObject);

NTSTATUS
DriverOpen(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);

NTSTATUS
DriverClose(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);

NTSTATUS
DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
<
PDEVICE_OBJECT deviceObject;
UNICODE_STRING deviceNameUnicodeString;
UNICODE_STRING deviceLinkUnicodeString;
PDEVICE_EXTENSION extension;
NTSTATUS ntStatus;

if (!NT_SUCCESS(ntStatus)) return ntStatus;

DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverDeviceControl;
DriverObject->DriverUnload = DriverUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE] = DriverOpen;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DriverClose;

extension = (PDEVICE_EXTENSION) deviceObject->DeviceExtension;
extension->DeviceObject = deviceObject;
extension->DriverObject = DriverObject;

// Create counted string version of our Win32 device name.
RtlInitUnicodeString(&deviceLinkUnicodeString, DOS_DEVICE_NAME);

// Create a link from our device name to a name in the Win32 namespace.
ntStatus = IoCreateSymbolicLink(&deviceLinkUnicodeString, &deviceNameUnicodeString);
if (!NT_SUCCESS(ntStatus))
<
IoDeleteDevice(deviceObject);
return ntStatus;
>

return STATUS_SUCCESS;
>

//———————————————————————————————-
VOID
DriverUnload(IN PDRIVER_OBJECT DriverObject)
<
UNICODE_STRING deviceLinkUnicodeString;
PDEVICE_EXTENSION extension;
PIRP pNewIrp = NULL;
ULONG m_size;
NTSTATUS ntStatus;
extension = DriverObject->DeviceObject->DeviceExtension;

// Create counted string version of our Win32 device name.
RtlInitUnicodeString(&deviceLinkUnicodeString, DOS_DEVICE_NAME);

// Delete the link from our device name to a name in the Win32 namespace.
IoDeleteSymbolicLink(&deviceLinkUnicodeString);

// Finally delete our device object
IoDeleteDevice(DriverObject->DeviceObject);
>

//————————————————————————————————
NTSTATUS
DriverOpen(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
<
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
>

//————————————————————————————————
NTSTATUS
DriverClose(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
<
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
>

//————————————————————————————————
NTSTATUS
DriverDeviceControl(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
<
NTSTATUS ntStatus;
PIO_STACK_LOCATION irpStack;
PDEVICE_EXTENSION extension;
PULONG ioBuffer;
ULONG ioControlCode;
ULONG port = 0;

Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
irpStack = IoGetCurrentIrpStackLocation(Irp);
extension = DeviceObject->DeviceExtension;
ioBuffer = Irp->AssociatedIrp.SystemBuffer;
ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;
switch (ioControlCode)
<
case TEST_SMTH:
ioBuffer[0] =(ULONG)DriverEntry;//Π’ Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π° адрСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DriverEntry
Irp->IoStatus.Information = 4;
break;

default:
Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
break;
>

ntStatus = Irp->IoStatus.Status;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return ntStatus;
>

Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΈΠΌ функциям ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, НО ΠΈΡ… сигнатура (состав ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с Ρ‚ΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния) ТСстко Π·Π°Π΄Π°Π½Ρ‹ систСмой. [2]:ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° начинаСтся с ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ DriverEntry(), которая автоматичСски вызываСтся систСмой Π½Π° этапС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π­Ρ‚Π° функция Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС дСйствия ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° наша функция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Ρ‚ΠΈΠΏΠ° PDRIVER_OBJECT.

ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° систСмы создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° (driver object), ΠΎΠ»ΠΈΡ†Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π· Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π² памяти. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° прСдставляСт собой структуру, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для функционирования Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ адрСса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ процСссС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° (Π² DriverEntry()) ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² устройств (device object), ΠΎΠ»ΠΈΡ†Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ устройства, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. Π­Ρ‚ΠΎΡ‚ самый device object Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ функционирования Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈ создаСтся (ΠΊΠ°ΠΊ ΠΈ Π² нашСм случаС) Π΄Π°ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ устройству.

Π”Π°Π»Π΅Π΅, Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строках DriverEntry ΠΌΡ‹ опрСдСляСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Π½Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Π΅, Π² Ρ‚.Ρ‡. ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° device object, ΠΈ Π΄Π²Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ строки UNICODE_STRING с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ устройств. БистСмныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ устройства, созданным Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ, посрСдством указатСля Π½Π° Π½Π΅Π³ΠΎ. Однако для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ устройства прСдставляСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΌΡƒ осущСствляСтся ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ (Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ CreateFile()).

Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ занСсти Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° адрСса основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… программистом Π² тСкст Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Массив MajorFunction являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· элСмСнтов структурной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ этот массив ΠΌΡ‹ ΠΈ заносим адрСса основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Ρ‚.Π΅. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ систСмой автоматичСски Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия прилоТСния ΠΈΠ»ΠΈ устройства). Π—Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ функция ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ return с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ.

Ѐункция DriverUnload() вызываСтся ΠΏΡ€ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствия ΠΏΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° устройства, созданного Π² DriverEntry().

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ DriverOpen ΠΈ DriverClose Π² нашСм случаС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ просто STATUSS_SUCCESS. ΠšΡΡ‚Π°Ρ‚ΠΈ, всС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ строго фиксированы.

Π˜Ρ‚Π°ΠΊ, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΌΡ‹ написали. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π΄ΠΎ Π΅Π³ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’.ΠΊ. процСсс компиляции ΠΈΠ΄Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ для этой Ρ†Π΅Π»ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ bat-Ρ„Π°ΠΉΠ»ΠΎΠΌ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ нСбольшой bat-Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ, допустим, Crt.bat ΠΈ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТаниСм:

NTDDK Ρƒ мСня установлСно Π² ΠΊΠΎΡ€Π΅Π½ΡŒ Π‘:, Ссли Ρƒ Вас ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, Ρ‚ΠΎ вмСсто C:NTDDKbin ΠΈ C:NTDDK ΠΏΡ€ΠΎΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ°ΠΏΠΊΠ°ΠΌ.

Π˜Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запустим наш Crt.bat. ПослС окончания компиляции Π² ΠΏΠ°ΠΏΠΊΠ΅ C:myDriverobjfrei386 Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ myDrv.sys. Наш Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΏΠΎΠΊΠ° ΡƒΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ/Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ запросу посылаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ адрСс ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· своих ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ займСмся написаниСм прилоТСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ с нашим Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ. Π•Ρ‰Π΅ Ρ€Π°Π· напоминаю, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΏΠΎΠ΄ Win2000. Π­Ρ‚Π° ОБ позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ/Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΡƒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°.

Π’ΠΎΡ‡Π½Π΅Π΅, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ/Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΡƒ слуТб (service), Π½ΠΎ Ρ‚.ΠΊ. Π² Win2000 Π² качСствС слуТбы ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° эти Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°, подразумСвая, Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, наш Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€.

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ диспСтчСр управлСния слуТбами SC Manager (Service Control Manager). ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с интСрфСйсом SC, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ дСскриптор диспСтчСра слуТб. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ OpenSCManager(). ДСскриптор диспСтчСра слуТб Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ функциям CreateServise() ΠΈ OpenService(). ДСскрипторы, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ этими функциями, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ слуТбС. К ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ относятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ControlService(), DeleteService() ΠΈ StartService(). Для освобоТдСния дСскрипторов ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Ρ‹Π·ΠΎΠ² CloseServiceHandle().

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° исходный тСкст простого консольного прилоТСния, написанного Π½Π° Visual C++ 6.0:

#include
#include «LoadDRV.h»
#include
#include

void main()
<
LPTSTR m_name = new char[20];
strcpy(m_name, «myDrv.sys»);

if (drvLoad(m_name)) TestSmth();

drvUnLoad(m_name);
delete m_name;
>

DeviceIoControl(hDevice, IOCTL_TEST_SMTH, NULL, 0,
&test, 4, &ReturetLength, NULL);

printf(«TestSmth= %in»,test);
return test;
>

///**************Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ************************
bool drvLoad(char* name)
<
printf (name);
hSCManager=NULL;
hService=NULL;
bool status;

if(OpenManager())
<
if(drvCreateService(name))
<
if(drvStartService(name))
<
status=TRUE;
printf(«n Driver is now load. n»);
>
>
>

hDevice = CreateFile («//./myDrv», GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);

bool OpenManager()
<
bool status;
status=FALSE;

if(hSCManager!=NULL)
<
CloseServiceHandle (hSCManager);
hSCManager=NULL;
>

hSCManager=OpenSCManager (NULL,NULL,SC_MANAGER_ALL_ACCESS);
if (hSCManager == NULL)
<
error(_OpenSCManager);
> else status=TRUE;

//———————————————————————
bool drvCreateService(PCHAR pDrvName)
<
LPTSTR lpBuffer;
lpBuffer = new char[256];
bool status = FALSE;
LPTSTR awPath; // ΠΏΡƒΡ‚ΡŒ ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ pDrvName

// Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡƒΡ‚ΡŒ ΠΊ pDrvName, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»Π΅ΠΆΠ°Ρ‚ΡŒ рядом с exe-шником

GetCurrentDirectory(256, lpBuffer);
strcat(lpBuffer,»\»);
strcat(lpBuffer,pDrvName);
awPath = lpBuffer;

hService = CreateService(hSCManager,pDrvName,pDrvName,SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,awPath,NULL,NULL,NULL,NULL,NULL);

if(!hService)
<
error(_CreateService);
status = drvOpenService(pDrvName);//ΠŸΡ‹Ρ‚Π°Π΅ΠΌΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ слуТбу
>
else status=TRUE;

delete lpBuffer;
return status;
>

bool status;
status=FALSE;
if(hService!=NULL) CloseService();

hService=OpenService(hSCManager,name,SERVICE_ALL_ACCESS);
if (!hService) error(_OpenService);
else status=TRUE;
return status;
>

//———————————————————————
bool drvStartService(PCHAR name)
<
bool status;
status=FALSE;
if(!StartService(hService,0,NULL))
<
error(_StartService);
printf(«Deleting service. «);
drvDeleteService(name)
>
else status=TRUE;
return status;
>

//———————————————————————
bool drvDeleteService(PCHAR name)
<
bool status;
status=FALSE;
CloseService();
if(!DeleteService(hService)) error(_DeleteService);
else status=TRUE;
return status;
>

if (hDevice!=INVALID_HANDLE_VALUE)
<
if(!CloseHandle(hDevice)) error(_CloseHandle);
hDevice=INVALID_HANDLE_VALUE;
>

if (hService)
<
status = ControlService(hService,SERVICE_CONTROL_STOP,&ServiceStatus);
if(!status) error(_SERVICE_CONTROL_STOP);

status = DeleteService(hService);
if(!status) error(_DeleteService);

status = CloseServiceHandle(hService);
if(!status) error(_CloseServiceHandle);
>

if(!CloseServiceHandle(hSCManager)) error(_CloseServiceHandle);
if (status) printf(«Driver Unload. SUCCESSn»);
return status;
>

//———————————————————————
void error(error_index erIndex)
< DWORD err;
err=GetLastError();
switch(erIndex)
<
case _OpenSCManager:
printf(«OpenSCManager failed with Error=%in»,err);
break;

case _GetFullPathName:
printf(«GetFullPathName failed with Error=%in»,err);
break;

case _CreateService:
switch (err)
<
case 1073:
printf(«The specified service already exists.n»);
printf(«opening this service. «);
break;
default:
printf(«CreateService failed with Error=%in»,err);
>
break;

case _OpenService:
printf(«OpenService failed with Error=%in»,err);
break;

case _StartService:
printf(«StartService failed with Error=%in»,err);
break;

case _DeleteService:
printf(«DeleteService failed with Error=%in»,err);
break;

case _SERVICE_CONTROL_STOP:
printf(«SERVICE_CONTROL_STOP failed with Error=%in»,err);
break;
case _CreateFile:
printf(«CreateFile failed with Error=%in»,err);
break;
case _CloseHandle:
printf(«CloseHandle failed with Error=%in»,err);
break;
case _CloseServiceHandle:
printf(«CloseServiceHandle failed with Error=%in»,err);
break;

#define FIRST_IOCTL_INDEX 0x800
#define FILE_DEVICE_myDrv 0x00008000

#define TEST_SMTH CTL_CODE(FILE_DEVICE_myDrv, \
0x800 + 101, \
METHOD_BUFFERED, \
FILE_ANY_ACCESS)

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€, Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π»Π΅ΠΆΠΈΡ‚ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ exe-Ρ„Π°ΠΉΠ» Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° исходный тСкст:

Π’ main() ΠΌΡ‹ создаСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° (myDrv.sys) ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ это имя Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° drvLoad(), которая выполняСт всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ слуТб, ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ CreateFile(), которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ дСскриптор, Π½ΡƒΠΆΠ½Ρ‹ΠΉ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π­Ρ‚ΠΎΡ‚ дСскриптор, Π² частности, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DeviceIoControl.

Если Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ TestSmth(), Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ создаСм ΠΈ посылаСм Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ IRP-ΠΏΠ°ΠΊΠ΅Ρ‚ (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° DeviceIoControl()). ΠŸΡ€ΠΈΠ½ΡΠ² этот ΠΏΠ°ΠΊΠ΅Ρ‚, наш Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСс своСй ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ DriverEntry. ПослС этого Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€. ВсС.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ написали ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ (дальшС Π½Π΅ΠΊΡƒΠ΄Π°) Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ с Π½ΠΈΠΌ. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π» ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ П. И. Π ΡƒΠ΄Π°ΠΊΠΎΠ², К. Π“. Π€ΠΈΠ½ΠΎΠ³Π΅Π½ΠΎΠ², ΠΏΠΎ возмоТности дСлая ссылки Π½Π° Π½Π΅Π΅ Π² Π²ΠΈΠ΄Π΅: [2].

Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Π½Π°ΠΏΠΈΡˆΡƒ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π° Π±Π°Π·Π΅ этого Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для LPT-ΠΏΠΎΡ€Ρ‚Π°.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *