Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore

ДнСс ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π°ΠΌΠ΅ Ρ€Π°Π·ΠΊΠ°Π·Π° Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π·Π°Π΅Π΄Π½ΠΎ с ΠΌΠΎΠΌΡ‡Π΅Ρ‚Π°Ρ‚Π° ΠΎΡ‚ УнивСрситСта Иннополис Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ тСхнологията Active Restore, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠΌ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° своитС устройства възмоТно Π½Π°ΠΉ-Ρ€Π°Π½ΠΎ слСд срив. Π’Π΅ΠΌΠ°Ρ‚Π° Ρ‰Π΅ бъдС Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Windows прилоТСния, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ характСристикитС Π½Π° тяхното създаванС ΠΈ стартиранС. Под статията - ΠΌΠ°Π»ΠΊΠΎ информация Π·Π° нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° ΡΡŠΡ‰ΠΎ ΠΈ практичСско Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ прилоТСния.

Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore

Π’ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ статии Π²Π΅Ρ‡Π΅ ΠΎΠ±ΡΡŠΠΆΠ΄Π°Ρ…ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Active Restore, ΠΈ ΠΊΠ°ΠΊ студСнтитС ΠΎΡ‚ Иннополис Π³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚. услугаДнСс искам Π΄Π° сС спра Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ прилоТСния, Π΄ΠΎ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ искамС Π΄Π° 'ΠΏΠΎΠ³Ρ€Π΅Π±Π΅ΠΌ' нашия сСрвиз Π·Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅. Ако всичко Π²ΡŠΡ€Π²ΠΈ ΠΏΠΎ ΠΏΠ»Π°Π½, Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π°:

  • Π—Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ самия сСрвис ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ
  • Π‘Π²ΡŠΡ€ΠΆΠ΅ΠΌ сС с ΠΎΠ±Π»Π°ΠΊΠ°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½Π°Ρ‚Π° копия, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ
  • Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² какъв Ρ€Π΅ΠΆΠΈΠΌ Π΅ систСмата – Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ стартиранС ΠΈΠ»ΠΈ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ
  • Π’ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ
  • Позволим Π½Π° потрСбитСля Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‰Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

Какво Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅?

Π—Π° Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π²ΡŠΠΏΡ€ΠΎΡ, Π½Π΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π°Ρ‚Π° ΠΎΡ‚ извиквания, ΠΊΠΎΠΈΡ‚ΠΎ систСмата ΠΏΡ€Π°Π²ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΡŠΡ‚ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ си ΠΎΠΏΠΈΡ‚Π²Π° Π΄Π° създадС Ρ„Π°ΠΉΠ».

Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore
Pavel Yosifovich β€” Windows Kernel Programming (2019)

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΡŠΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° функцията CreateFile, която Π΅ обявСна Π² заглавния Ρ„Π°ΠΉΠ» fileapi.h ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π² Kernel32.dll. Но самата Ρ‚Π°Π·ΠΈ функция Π½Π΅ създава Ρ„Π°ΠΉΠ»Π°, Π° само провСрява Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° Π²Ρ…ΠΎΠ΄Π° ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° функцията NtCreateFile (прСдставката Nt ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ функцията Π΅ Π½Π°Ρ‚ΠΈΠ²Π½Π°). Π’Π°Π·ΠΈ функция Π΅ обявСна Π² заглавния Ρ„Π°ΠΉΠ» winternl.h ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π² ntdll.dll. Вя подготвя ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅Ρ‚ΠΎ Π² ядрСно пространство, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° систСмСн ΠΏΠΎΠ²ΠΈΠΊ Π·Π° създаванС Π½Π° Ρ„Π°ΠΉΠ». Π’ Ρ‚ΠΎΠ·ΠΈ случай сС ΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ Kernel32 Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΅ само ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π·Π° Ntdll. Π•Π΄Π½Π° ΠΎΡ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Ρ‚ΠΎΠ²Π° Π΅, Ρ‡Π΅ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Microsoft ΠΌΠΎΠΆΠ΅ Π΄Π° промСня Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π½Π° нативния свят, Π±Π΅Π· Π΄Π° засяга стандартнитС интСрфСйси. Microsoft Π½Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° голяма част ΠΎΡ‚ тях. ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π½Π΅Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ Ρ‚ΡƒΠΊ.

ΠžΡΠ½ΠΎΠ²Π½ΠΎΡ‚ΠΎ прСдимство Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ прилоТСния Π΅, Ρ‡Π΅ ntdll сС Π·Π°Ρ€Π΅ΠΆΠ΄Π° Π² систСмата Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΎΡ‚ kernel32. Π’ΠΎΠ²Π° Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ kernel32 изисква Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° ntdll Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, прилоТСнията, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π°Ρ‚ΠΈΠ²Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ.

Π’Π°ΠΊΠ° Windows Native Applications са ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, способни Π΄Π° сС стартират Π² ранния Π΅Ρ‚Π°ΠΏ Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Windows. Π’Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ БАМО Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ ntdll. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Ρ‚Π°ΠΊΠΎΠ²Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: autochk ΠΊΠΎΠ΅Ρ‚ΠΎ изпълнява chkdisk utility Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° диска Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π΄ΠΈ стартиранСто Π½Π° основнитС услуги. ИмСнно Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° Π½ΠΈΠ²ΠΎ искамС Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ нашия Active Restore.

Какво Ρ‰Π΅ Π½ΠΈ трябва?

  • DDK (Driver Development Kit), сСга извСстно ΠΈ ΠΊΠ°Ρ‚ΠΎ WDK 7 (Windows Driver Kit).
  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Windows 7 x64)
  • НС Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅, Π·Π°Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ Ρ‚ΡƒΠΊ

Какво става Π² ΠΊΠΎΠ΄Π°?

НСка Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π° напишСм ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ:

  1. ИзвСТда ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π°
  2. Аллоцира ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚
  3. ΠžΡ‡Π°ΠΊΠ²Π° Π²Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π°
  4. ОсвобоТдава Π·Π°Π΅Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚

Π’ Π½Π°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ прилоТСния Ρ‚ΠΎΡ‡ΠΊΠ°Ρ‚Π° Π½Π° Π²Ρ…ΠΎΠ΄ Π΅ Π½Π΅ main ΠΈΠ»ΠΈ winmain, Π° функцията NtProcessStartup, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ стартирамС Π½ΠΎΠ²ΠΈ процСси Π² систСмата.

НСка Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ с ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π°. Π—Π° Ρ†Π΅Π»Ρ‚Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° функция NtDisplayString, която ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π» към ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ структурата UNICODE_STRING. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡΡ‚Π° Ρ‰Π΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ RtlInitUnicodeString. Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚, Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° тСкста Π½Π° Π΅ΠΊΡ€Π°Π½Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° напишСм слСдната ΠΌΠ°Π»ΠΊΠ° функция:

//usage: WriteLn(L"Here is my textn");
void WriteLn(LPWSTR Message)
{
    UNICODE_STRING string;
    RtlInitUnicodeString(&string, Message);
    NtDisplayString(&string);
}

Въй ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡ‚ΡŠΠΏ само Π΄ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ ntdll, Π° Π΄Ρ€ΡƒΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° просто всС ΠΎΡ‰Π΅ няма, Π½Π΅ΠΏΡ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‰Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с алокацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΡŠΡ‚ new всС ΠΎΡ‰Π΅ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π΅ ΠΎΡ‚ Ρ‚Π²ΡŠΡ€Π΄Π΅ високо Π½ΠΈΠ²ΠΎ Π² свСта Π½Π° C++), ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° няма функция malloc (Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π·Π° нСя са Π½ΡƒΠΆΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚ C runtime). Π Π°Π·Π±ΠΈΡ€Π° сС, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ само стСка. Но Π°ΠΊΠΎ Π½ΠΈ трябва Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Π°Π»ΠΎΠΊΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Ρ‰Π΅ трябва Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ Π² ΠΊΡƒΠΏΠ° (Ρ‚.Π΅. heap). Π—Π°Ρ‚ΠΎΠ²Π° Π½Π΅ΠΊΠ° създадСм ΠΊΡƒΠΏΠ° Π·Π° сСбС си ΠΈ Π΄Π° Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΎΡ‚ нСя, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°.

Π—Π° Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° функцията RtlCreateHeap. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ RtlAllocateHeap ΠΈ RtlFreeHeap, Ρ‰Π΅ Π·Π°Π΄Π²ΠΈΠΆΠ²Π°ΠΌΠ΅ ΠΈ освобоТдавамС ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

PVOID ΠΏΠ°ΠΌΠ΅Ρ‚ = NULL;
PVOID Π±ΡƒΡ„Π΅Ρ€ = NULL;
ULONG размСрНаБуфСр = 42;

// създаванС Π½Π° ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°, Π·Π° Π΄Π° сС Π·Π°Π΄Π΅Π»ΠΈ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΏΠΎ-късно
ΠΏΠ°ΠΌΠ΅Ρ‚ = RtlCreateHeap(
  HEAP_GROWABLE, 
  NULL, 
  1000, 
  0, NULL, NULL
);

// задСлянС Π½Π° Π±ΡƒΡ„Π΅Ρ€ с Ρ€Π°Π·ΠΌΠ΅Ρ€ размСрНаБуфСр
Π±ΡƒΡ„Π΅Ρ€ = RtlAllocateHeap(
  ΠΏΠ°ΠΌΠ΅Ρ‚, 
  HEAP_ZERO_MEMORY, 
  размСрНаБуфСр
);

// освобоТдаванС Π½Π° Π±ΡƒΡ„Π΅Ρ€Π° (Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΡƒΠ½ΠΈΡ‰ΠΎΠΆΠ°Π²Π°ΠΌΠ΅ ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°Ρ‚Π° Π½Π° слСдващата ΡΡ‚ΡŠΠΏΠΊΠ°)
RtlFreeHeap(ΠΏΠ°ΠΌΠ΅Ρ‚, 0, Π±ΡƒΡ„Π΅Ρ€);

RtlDestroyHeap(ΠΏΠ°ΠΌΠ΅Ρ‚);

ΠŸΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ към ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅ Π½Π° въвСТданС ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π°.

// https://docs.microsoft.com/en-us/windows/win32/api/ntddkbd/ns-ntddkbd-keyboard_input_data
typedef struct _KEYBOARD_INPUT_DATA {
  USHORT UnitId;
  USHORT MakeCode;
  USHORT Flags;
  USHORT Reserved;
  ULONG  ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;

//...

HANDLE hKeyBoard, hEvent;
UNICODE_STRING skull, keyboard;
OBJECT_ATTRIBUTES ObjectAttributes;
IO_STATUS_BLOCK Iosb;
LARGE_INTEGER ByteOffset;
KEYBOARD_INPUT_DATA kbData;

// inialize variables
RtlInitUnicodeString(&keyboard, L"DeviceKeyboardClass0");
InitializeObjectAttributes(&ObjectAttributes, &keyboard, OBJ_CASE_INSENSITIVE, NULL, NULL);

// open keyboard device
NtCreateFile(&hKeyBoard,
			SYNCHRONIZE | GENERIC_READ | FILE_READ_ATTRIBUTES,
			&ObjectAttributes,
			&Iosb,
			NULL,
			FILE_ATTRIBUTE_NORMAL,
			0,
			FILE_OPEN,FILE_DIRECTORY_FILE,
			NULL, 0);

// create event to wait on
InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
NtCreateEvent(&hEvent, EVENT_ALL_ACCESS, &ObjectAttributes, 1, 0);

while (TRUE)
{
	NtReadFile(hKeyBoard, hEvent, NULL, NULL, &Iosb, &kbData, sizeof(KEYBOARD_INPUT_DATA), &ByteOffset, NULL);
	NtWaitForSingleObject(hEvent, TRUE, NULL);

	if (kbData.MakeCode == 0x01)    // if ESC pressed
	{
			break;
	}
}

Всичко, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅ΠΌ – Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ NtReadFile Π½Π° ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΎ устройство ΠΈ Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π° Π½Π΅ Π½ΠΈ Π²ΡŠΡ€Π½Π΅ някакво натисканС. Π’ случай, Ρ‡Π΅ Π΅ натисната клавиш ESC, Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Π—Π° Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ устройството, Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ функцията NtCreateFile (трябва Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΠΌ DeviceKeyboardClass0). Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ NtCreateEvent, Π·Π° Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ‚ Π·Π° ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅. БамостоятСлно Ρ‰Π΅ обявим структурата KEYBOARD_INPUT_DATA, която прСдставлява Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°Ρ‚Π°. Π’ΠΎΠ²Π° Ρ‰Π΅ улСсни Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½ΠΈ.

Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π° с ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° функцията NtTerminateProcess, Π·Π°Ρ‰ΠΎΡ‚ΠΎ просто ΡƒΠ±ΠΈΠ²Π°ΠΌΠ΅ собствСния си процСс.

ЦСлият ΠΊΠΎΠ΄ Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

#include "ntifs.h" // WinDDK7600.16385.1incddk
#include "ntdef.h"

//------------------------------------
// Following function definitions can be found in native development kit
// but I am too lazy to include `em so I declare it here
//------------------------------------

NTSYSAPI
NTSTATUS
NTAPI
NtTerminateProcess(
  IN HANDLE               ProcessHandle OPTIONAL,
  IN NTSTATUS             ExitStatus
);

NTSYSAPI 
NTSTATUS
NTAPI
NtDisplayString(
	IN PUNICODE_STRING String
);

NTSTATUS 
NtWaitForSingleObject(
  IN HANDLE         Handle,
  IN BOOLEAN        Alertable,
  IN PLARGE_INTEGER Timeout
);

NTSYSAPI 
NTSTATUS
NTAPI
NtCreateEvent(
    OUT PHANDLE             EventHandle,
    IN ACCESS_MASK          DesiredAccess,
    IN POBJECT_ATTRIBUTES   ObjectAttributes OPTIONAL,
    IN EVENT_TYPE           EventType,
    IN BOOLEAN              InitialState
);



// https://docs.microsoft.com/en-us/windows/win32/api/ntddkbd/ns-ntddkbd-keyboard_input_data
typedef struct _KEYBOARD_INPUT_DATA {
  USHORT UnitId;
  USHORT MakeCode;
  USHORT Flags;
  USHORT Reserved;
  ULONG  ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;

//----------------------------------------------------------
// Our code goes here
//----------------------------------------------------------

// usage: WriteLn(L"Hello Native World!n");
void WriteLn(LPWSTR Message)
{
    UNICODE_STRING string;
    RtlInitUnicodeString(&string, Message);
    NtDisplayString(&string);
}

void NtProcessStartup(void* StartupArgument)
{
	// it is important to declare all variables at the beginning
	HANDLE hKeyBoard, hEvent;
	UNICODE_STRING skull, keyboard;
	OBJECT_ATTRIBUTES ObjectAttributes;
	IO_STATUS_BLOCK Iosb;
	LARGE_INTEGER ByteOffset;
	KEYBOARD_INPUT_DATA kbData;
	
	PVOID memory = NULL;
	PVOID buffer = NULL;
	ULONG bufferSize = 42;

	//use it if debugger connected to break
	//DbgBreakPoint();

	WriteLn(L"Hello Native World!n");

	// inialize variables
	RtlInitUnicodeString(&keyboard, L"DeviceKeyboardClass0");
	InitializeObjectAttributes(&ObjectAttributes, &keyboard, OBJ_CASE_INSENSITIVE, NULL, NULL);

	// open keyboard device
	NtCreateFile(&hKeyBoard,
				SYNCHRONIZE | GENERIC_READ | FILE_READ_ATTRIBUTES,
				&ObjectAttributes,
				&Iosb,
				NULL,
				FILE_ATTRIBUTE_NORMAL,
				0,
				FILE_OPEN,FILE_DIRECTORY_FILE,
				NULL, 0);

	// create event to wait on
	InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL);
	NtCreateEvent(&hEvent, EVENT_ALL_ACCESS, &ObjectAttributes, 1, 0);
	
	WriteLn(L"Keyboard readyn");
	
	// create heap in order to allocate memory later
	memory = RtlCreateHeap(
	  HEAP_GROWABLE, 
	  NULL, 
	  1000, 
	  0, NULL, NULL
	);
	
	WriteLn(L"Heap readyn");

	// allocate buffer of size bufferSize
	buffer = RtlAllocateHeap(
	  memory, 
	  HEAP_ZERO_MEMORY, 
	  bufferSize
	);
	
	WriteLn(L"Buffer allocatedn");

	// free buffer (actually not needed because we destroy heap in next step)
	RtlFreeHeap(memory, 0, buffer);

	RtlDestroyHeap(memory);
	
	WriteLn(L"Heap destroyedn");
	
	WriteLn(L"Press ESC to continue...n");

	while (TRUE)
	{
		NtReadFile(hKeyBoard, hEvent, NULL, NULL, &Iosb, &kbData, sizeof(KEYBOARD_INPUT_DATA), &ByteOffset, NULL);
		NtWaitForSingleObject(hEvent, TRUE, NULL);

		if (kbData.MakeCode == 0x01)    // if ESC pressed
		{
				break;
		}
	}

	NtTerminateProcess(NtCurrentProcess(), 0);
}

PS: МоТСм лСсно Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² ΠΊΠΎΠ΄Π° функцията DbgBreakPoint() Π·Π° спиранС Π² Π΄Π΅Π±ΡŠΠ³Π΅Ρ€Π°. Вярно Π΅, Ρ‡Π΅ Ρ‰Π΅ трябва Π΄Π° ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ WinDbg с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° машина Π·Π° ядрСн дСбъгинг. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ ΠΈΠ»ΠΈ просто Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ VirtualKD.

ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ ΠΈ сборка

Най-простият Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ DDK (Driver Development Kit). НуТдаСм сС ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΡ‚ старата сСдма вСрсия, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎ-ΠΊΡŠΡΠ½ΠΈΡ‚Π΅ вСрсии ΠΈΠΌΠ°Ρ‚ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ тСсно работят с Visual Studio. Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ DDK, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π½ΠΈ сС Π½ΡƒΠΆΠ΄Π°Π΅ само ΠΎΡ‚ Makefile ΠΈ sources.

Makefile

!INCLUDE $(NTMAKEENV)makefile.def

sources:

TARGETNAME			= MyNative
TARGETTYPE			= PROGRAM
UMTYPE				= nt
BUFFER_OVERFLOW_CHECKS 		= 0
MINWIN_SDK_LIB_PATH		= $(SDK_LIB_PATH)
SOURCES 			= source.c

INCLUDES 			= $(DDK_INC_PATH); 
				  C:WinDDK7600.16385.1ndk;

TARGETLIBS 			= $(DDK_LIB_PATH)ntdll.lib	
				  $(DDK_LIB_PATH)nt.lib

USE_NTDLL			= 1

Π’Π°ΡˆΠΈΡΡ‚ Makefile Ρ‰Π΅ бъдС Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡŠΠ². НСка спрСм ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π½Π° sources. Π’ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» сС посочват ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° (Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ .c), ΠΎΠΏΡ†ΠΈΠΈ Π·Π° компилация ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.

  • TARGETNAME – ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° изпълнимия Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка.
  • TARGETTYPE – Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° изпълнимия Ρ„Π°ΠΉΠ», Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ (.sys), Ρ‚ΠΎΠ³Π°Π²Π° стойността Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ трябва Π΄Π° бъдС DRIVER, Π°ΠΊΠΎ Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (.lib), стойността LIBRARY. Π’ нашия случай Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ изпълним Ρ„Π°ΠΉΠ» (.exe), Π·Π°Ρ‚ΠΎΠ²Π° Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ стойността PROGRAM.
  • UMTYPE – възмоТни стойности Π½Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ»Π΅: console Π·Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, windows Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π² ΠΏΡ€ΠΎΠ·ΠΎΡ€Ρ‡Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ. Но трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ nt, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • BUFFER_OVERFLOW_CHECKS – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° стСка Π·Π° ΠΏΡ€Π΅ΠΏΡŠΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡƒΡ„Π΅Ρ€Π°, Π·Π° съТалСниС Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½Π°ΡˆΠΈΡΡ‚ случай, Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅.
  • MINWIN_SDK_LIB_PATH – Ρ‚Π°Π·ΠΈ стойност сочи към ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° SDK_LIB_PATH, Π½Π΅ сС притСснявайтС, Ρ‡Π΅ няматС Ρ‚Π°ΠΊΠ°Π²Π° систСмна ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ стартирамС checked build ΠΎΡ‚ DDK, Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Ρ‰Π΅ бъдС обявСна ΠΈ Ρ‰Π΅ сочи към Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • SOURCES – списък с ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°.
  • INCLUDES – Π·Π°Π³Π»Π°Π²Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° компилация. Π’ΡƒΠΊ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС посочва ΠΏΡŠΡ‚Ρ към Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ΄Π²Π°Ρ‚ с DDK, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΈ всякакви Π΄Ρ€ΡƒΠ³ΠΈ.
  • TARGETLIBS – списък с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ°Ρ‚.
  • USE_NTDLL – Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ»Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ Π½Π° 1. По ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ.
  • USER_C_FLAGS – всякакви Ρ„Π»Π°Π³ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ Π½Π° прСдпроцСсора ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

И Ρ‚Π°ΠΊΠ°, Π·Π° компилация Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° стартирамС x86 (ΠΈΠ»ΠΈ x64) Checked Build, Π΄Π° смСним Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° дирСктория Π½Π° ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π΄Π° изпълним ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Build. Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ Π½Π° Π΅ΠΊΡ€Π°Π½Π° ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ смС ΡΡŠΠ±Ρ€Π°Π»ΠΈ Π΅Π΄ΠΈΠ½ изпълняСм Ρ„Π°ΠΉΠ».

Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore

Π’ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ» Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС стартиран Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° лСсно, систСмата сС ΠΎΠΏΠ»Π°ΠΊΠ²Π° ΠΈ Π½ΠΈ насочва Π΄Π° помислим Π·Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ си с слСдната Π³Ρ€Π΅ΡˆΠΊΠ°:

Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore

Как Π΄Π° стартирамС Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅?

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° стартиранС autochk послСдоватСлността Π½Π° стартиранС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ сС опрСдСля ΠΎΡ‚ стойността Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°:

HKLMSystemCurrentControlSetControlSession ManagerBootExecute

ΠœΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° сСсията послСдоватСлно изпълнява ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ списък. Π‘Π°ΠΌΠΈΡ‚Π΅ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ΡŠΡ‚ Π½Π° сСсията Ρ‚ΡŠΡ€ΡΠΈ Π² дирСкторията system32. Π€ΠΎΡ€ΠΌΠ°Ρ‚ΡŠΡ‚ Π½Π° стойността Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π΅ слСдният:

autocheck autochk *MyNative

Бтойността трябва Π΄Π° бъдС Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Π΅ΡΠ΅Ρ‚ΠΈΡ‡Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Π° Π½Π΅ Π² познатия ASCII, слСдоватСлно ΠΊΠ»ΡŽΡ‡ΡŠΡ‚, прСдставСн ΠΏΠΎ-Π³ΠΎΡ€Π΅, Ρ‰Π΅ ΠΈΠΌΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

61,75,74,6f,63,68,65,63,6b,20,61,75,74,6f,63,68,6b,20,2a,00,4d,79,4e,61,74,69,76,65,00,00

Π—Π° Π΄Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΎΠ½Π»Π°ΠΉΠ½ услуга, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ·ΠΈ.

Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore
ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π° сС, Ρ‡Π΅ Π·Π° Π΄Π° стартирамС Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

  1. Π”Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ изпълнимия Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° system32
  2. Π”Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ Π² Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π°
  3. Π”Π° рСстартирамС ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°

Π—Π° удобство Π΅Ρ‚ΠΎ Π²ΠΈ Π³ΠΎΡ‚ΠΎΠ² скрипт Π·Π° инсталиранС Π½Π° Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

install.bat

@echo off
copy MyNative.exe %systemroot%system32.
regedit /s add.reg
echo Native Example Installed
pause

add.reg

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"BootExecute"=hex(7):61,75,74,6f,63,68,65,63,6b,20,61,75,74,6f,63,68,6b,20,2a,00,4d,79,4e,61,74,69,76,65,00,00

Π‘Π»Π΅Π΄ инсталацията ΠΈ рСстартиранС, ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС появи Π΅ΠΊΡ€Π°Π½ΡŠΡ‚ Π·Π° ΠΈΠ·Π±ΠΎΡ€ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ слСдната ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°:

Нативни прилоТСния Π·Π° Windows ΠΈ услуга Acronis Active Restore

РСзюмС

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π½Π° Ρ‚ΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ видяхмС, Ρ‡Π΅ Π΅ напълно възмоТно Π΄Π° стартирамС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ Windows Native. Π’ Π±ΡŠΠ΄Π΅Ρ‰Π΅ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π΅ΠΊΠΈΠΏΠ° ΠΎΡ‚ УнивСрситСта Иннополис, Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ услуга, която Ρ‰Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° взаимодСйствиСто с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° вСрсия Π½Π° нашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π‘ появата Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° win32 Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ сСрвиз, ΠΊΠΎΠΉΡ‚ΠΎ Π²Π΅Ρ‡Π΅ Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΏΠΎ-късно. Ρ‚ΡƒΠΊ).

Π’ слСдващата статия Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° услугата Active Restore, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ UEFI Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°. АбонирайтС сС Π·Π° нашия Π±Π»ΠΎΠ³, Π·Π° Π΄Π° Π½Π΅ пропуснСтС слСдващата публикация.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster