Manajemen daya di Windows. Manajemen daya di Windows Powercfg pemanggil kernel lama

Pusat Keamanan Windows Defender, termasuk bagian baru Keamanan Perangkat, yang menawarkan pengelolaan alat keamanan canggih seperti Isolasi Kernel.

Core Isolation adalah teknologi keamanan berbasis virtualisasi yang menyediakan tingkat tambahan perlindungan terhadap serangan cerdas. Integritas memori adalah salah satu blok pembangun teknologi isolasi kernel - fungsi yang dirancang untuk mencegah penyisipan kode berbahaya ke dalam proses dengan keamanan tinggi. Perlindungan diberikan dengan memastikan bahwa halaman memori virtual kernel hanya mulai dijalankan setelah berhasil melewati pemeriksaan konsistensi.

Mari kita simak cara mengaktifkan Memory Integrity di Windows 10 April 2018 Update agar komputer Anda lebih aman.

Mengaktifkan integritas memori

  • Buka Pusat Keamanan Windows Defender.
  • Pilih bagian "Keamanan Perangkat".
  • Di bagian "Isolasi Kernel", klik tautan "Informasi Isolasi Kernel".
  • Tempatkan sakelar Integritas Memori pada posisi aktif.

Setelah menyelesaikan langkah-langkah ini, Anda harus me-restart komputer Anda agar perubahan diterapkan.

Catatan: Prosesor Anda harus mendukung teknologi virtualisasi agar fitur ini berfungsi. Selain itu, virtualisasi harus diaktifkan di BIOS atau UEFI. Jika tidak, fungsi tersebut tidak akan tersedia.

Memperbaiki masalah dengan isolasi kernel

Dalam beberapa kasus, Anda mungkin mengalami masalah kompatibilitas di beberapa aplikasi jika isolasi kernel diaktifkan. Untuk memperbaiki masalah, Anda harus menonaktifkan fungsi tersebut.

Jika Anda mencoba menonaktifkan Integritas Memori di Pusat Keamanan Windows Defender, tetapi opsi menjadi abu-abu dan pesan "Pengaturan ini dikendalikan oleh administrator Anda" ditampilkan, Anda masih dapat menonaktifkan fitur tersebut dengan menggunakan registri sistem.

Catatan: Mengubah registri secara tidak benar dapat menyebabkan masalah serius. Disarankan untuk membuat cadangan jendela registri sebelum melanjutkan dengan langkah-langkah ini. Dari menu Registry Editor, pilih File > Export untuk menyimpan backup.

  • Tekan kombinasi Tombol Windows+ R untuk membuka jendela Run.
  • Ketik regedit dan klik OK untuk meluncurkan Registry Editor.
  • Pergi ke jalur berikut:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity
  • Klik dua kali pada entri Diaktifkan.
  • Ubah nilainya dari 1 menjadi 0.
  • Klik Oke.

Untuk menonaktifkan, Anda juga dapat menggunakan yang sudah jadi

Pertanyaan: Kapan? kerja panjang komputer atau bangun dari mode tidur, font hilang di menu mulai


Saat komputer berjalan lama atau keluar dari mode tidur, menu Start menjadi seperti ini.

Bagaimana cara memperbaikinya? Tolong bantu aku..

Menjawab: sudah diinstal ulang OS dan diperbarui (

Pertanyaan: Bagaimana cara memasukkan komputer ke mode tidur S1 ("Siaga")?


Tidak menyala komputer desktop, atau di laptop saya tidak tahu cara memasukkan komputer ke tipe hibernasi S1.

Hasil eksekusi "powercfg / a"

Status hibernasi berikut tersedia di sistem ini:
Siaga (S3)

Status hibernasi berikut tidak tersedia di sistem ini:
Siaga (S1)

Siaga (S2)
Firmware sistem tidak mendukung standby.

Hibernasi
Hibernasi tidak diaktifkan.

Siaga (terhubung)
Firmware sistem tidak mendukung standby.

Mode tidur hibrida

Mulai cepat
Hibernasi tidak tersedia.

Menjawab: Biarkan komputer diam selama beberapa menit, lalu alihkan ke mode tidur dan bangunkan.

Dalam catatan peristiwa:
Tindakan => buat tampilan khusus
Di item tanggal, atur, misalnya, interval dua menit dan lihat apa yang terjadi.

Saya tidak punya ide lagi.

Nah, periksa driver dan perangkat yang terhubung ke komputer

Pertanyaan: Bangun jam 4 pagi


Hampir setiap malam komputer membangunkan saya dan membangunkan saya.
di pengelola perangkat, adaptor jaringan, hapus centang pada kotak centang "bangun dengan paket ajaib".
menonaktifkan pengatur waktu bangun di pengaturan daya.
v garis komando perintah powercfg / waketimers menunjukkan ini.

c: \> powercfg / waketimer
Timer yang disetel oleh Legacy Kernel Caller berlaku hingga 4:14:46 pada 01/09/2016.
Menyebabkan:

Membantu. Siapa yang harus disalahkan dan apa yang harus dilakukan?

Menjawab: pada akhirnya dia menyembuhkan penyakit ini:

Control Panel -> Keamanan dan Pemeliharaan -> Pemeliharaan -> Pemeliharaan Otomatis -> Ubah pengaturan pemeliharaan -> hapus centang "Izinkan tugas pemeliharaan untuk membangunkan komputer saya ..."

Pertanyaan: Komputer menyala secara spontan di malam hari


Terakhir kali (sekitar 1 ... 2 bulan), sekitar 30 ... 60 menit setelah komputer dimasukkan ke mode tidur (sehingga Anda dapat terus bekerja di pagi hari sejak komputer terputus), komputer menyala secara spontan. Saya menyelesaikan pekerjaan sekitar jam 12 malam, mis. penyalaan terjadi pada 0:30 ... 1:00 pagi. Namun, monitor tetap gelap. Saya bangun dari tempat tidur, menggerakkan mouse - monitor menyala, saya memasukkan profil dalam mode normal, saya mengembalikannya ke mode tidur - tidak menyala lagi malam ini.

Pada komputer Win7, ada antivirus penduduk MS Cecurity Esentials. Saya menjalankan utilitas curing topikal (baru diunduh) mbar dan DrWeb Cureit beberapa kali - mereka menemukan beberapa byak, tetapi aktivasi spontan tetap ada. Sepertinya virus yang menghubungkan komputer saya ke serangan DDOS. Selain itu, dari waktu ke waktu Google memblokir akses karena lalu lintas mencurigakan yang berasal dari IP saya. Ini telah terjadi untuk waktu yang lama (lebih dari satu tahun), tetapi saya melihat komputer mulai secara spontan baru-baru ini.

Sebenarnya, pertanyaannya adalah: jika masalahnya diketahui dan relatif mudah untuk mengobatinya, maka saya mengunduh perangkat lunak yang direkomendasikan, memindai dan mempostingnya. Jika masalahnya lebih rumit, maka saya tidak akan membodohi diri sendiri atau guru lokal dan dengan bodohnya mengatur ulang sistem.

Menjawab: Falconist, sesuatu yang saya tidak begitu mengerti ...

pesan dari Falconist

setelah memasukkan komputer ke mode tidur ... itu menyala secara spontan

Tidur dan hibernasi pada jam 7 adalah hal yang sama sekali berbeda. Untuk memasukkannya ke mode tidur, cukup tekan tombol Tidur di keyboard. Jika Anda mengklik Mulai dan arahkan mouse Anda ke panah di sebelah Shutdown, sebuah menu akan muncul di mana ada juga Hibernasi. dan Hibernasi. Selama hibernasi, komputer terputus dari catu daya dengan cara yang sama seperti saat Anda mematikan, tetapi saat Anda menghidupkan komputer, Anda dapat mulai bekerja dengan cara yang sama seperti setelah mode tidur.
Tapi Anda bertanya tentang sesuatu yang lain. Sudahkah Anda memeriksa Penjadwal Tugas?

Pertanyaan: Komputer bangun di malam hari dari mode tidur


Selamat siang, semuanya. Masalah ini sudah saya dapatkan. Dengan sendirinya, PC keluar dari mode tidur di malam hari, itu adalah Windows 10, sebelum itu ada 7, tidak ada masalah seperti itu, jadi saya memilih bagian khusus ini.
Apa yang sudah dilakukan 2 hari yang lalu:
1. Di penampil acara, saya menemukan alasannya: Timer - Tugas terjadwal "NT TASK \ Microsoft \ Windows \ UpdateOrchestrator \ Reboot" akan dieksekusi, meminta komputer untuk bangun dari mode tidur.
Saya pergi ke Penjadwal Tugas, menemukan tugas ini dan menghapus kotak centang dari item: Kondisi - Bangunkan komputer untuk menyelesaikan tugas.
2. Saya pergi ke powercfg.cpl - Pengaturan skema daya - Ubah Opsi tambahan Daya - Tidur - Izinkan penghitung waktu bangun - NONAKTIFKAN.

Malam ini situasinya berulang, tetapi dalam melihat acara saya hanya menemukan:

Sistem telah keluar dari status hibernasi.

Waktu tidur: 29-10-2016T21: 38: 38.657073700Z
Waktu bangun: 29-10-2016T21: 58: 34.625754700Z

Sumber keluaran: Tidak ada data

3. Di pengelola perangkat, saya menghapus kotak centang "izinkan perangkat ini membangunkan komputer dari mode siaga" dari mouse, keyboard, kartu jaringan, dan di mana pun saya menemukannya ...

Bantu selesaikan masalah ini, saya tidak tahu di mana untuk menggali lagi ...

Menjawab:

pesan dari GoLeMjkeee

Biaya setiap hari di 2-00

Ubah ke siang hari.

pesan dari GoLeMjkeee

tapi centang .... tidak layak.

Dia seperti itu, dengan karakter.

Pertanyaan: Bagaimana cara menghapus layar dengan tombol "Login" saat keluar dari mode tidur?


Windows 10 Pro 1607.
Saat Anda keluar dari mode tidur, Windows meminta Anda untuk menekan "Enter". Saat terbangun muncul layar biru dengan tulisan nama pengguna dan di bawahnya tombol "Masuk". Kata sandi tidak disetel, pengguna adalah satu-satunya di sistem dengan hak administrator. Saat memuat, semuanya baik-baik saja, tidak ada layar dan klik tombol, hanya desktop.

Dalam Pilihan- Akun- Opsi Masuk tidak ada item "Diperlukan Masuk".
Di jendela Akun Pengguna, pada tab Pengguna, kotak centang "Memerlukan nama pengguna dan kata sandi" tidak dicentang.
Tidak ada item "Memerlukan kata sandi saat bangun" di pengaturan paket daya.

Bagaimana cara menghapus tombol "Login" saat keluar dari mode tidur sehingga komputer secara otomatis memulai desktop melewati jendela ini?

Menjawab: hapus hibernasi

Pertanyaan: Windows 8.1 mati dalam mode tidur


Halo.
Saya punya masalah dengan hibernasi. Komputer mati total saat tidur. Itu. kekuatan benar-benar hilang. Sebelumnya, bola lampu pada unit sistem berkedip di sleeper, sekarang mouse juga benar-benar "pudar" dengan usb, keyboard padam dan hanya dapat dihidupkan dengan tombol power dan tentu saja semua INFA tidak disimpan.
Saya telah membaca banyak topik di Internet, tetapi tidak ada satu pun masalah yang serupa dengan masalah saya.
Saya akan langsung menulis karakteristik PC: motherboard ASUS p8h67, video radeon HD7850 (asus), intel i5 2550k, RAM 8gb, SSD Kekuatan silikon s55 120gb, hdd WD 500gb.
Menginstal Windows 8.1, telah berdiri untuk waktu yang sangat lama dan hibernasi berfungsi sebagaimana mestinya. Setelah berhenti bekerja, saya bahkan tidak tahu persis mengapa dan setelah apa (beberapa tindakan) berhenti bekerja. Saya tidak menginstal yang seperti itu, sepertinya saya tidak memperbarui driver.
Seringkali karena kebiasaan, alih-alih mematikannya, saya menekan tombol tidur dan setelah bekerja dan bekerja selama beberapa hari, tetapi seiring waktu berhenti bekerja.
Mencoba memperbarui atau menghapus instalan driver. Saya mencoba memutuskan sambungan dari komputer perangkat tambahan(Yah, Anda tidak pernah tahu). Saya mematikan berbagai program sebelum tidur. Tidak ada yang membantu.
Di Internet, saya menemukan satu-satunya informasi yang persis seperti milik saya (poin 8):

Tentu saja, saya tidak dapat menginstal driver, platform yang berbeda. Saya tidak dapat menemukan hal yang sama untuk diri saya sendiri.

Saya tidak ingin menginstal ulang OS. semuanya (kecuali yang tidur) berfungsi dengan baik.
Ada ide apa yang mungkin salah?

Ditambahkan setelah 17 menit
Lupa menulis apa yang disetel ulang dan diperbarui BIOS.

Menjawab: periksa kemudian baik BP atau Ibu. Kami secara terprogram mengonfigurasi tidur dan hibernasi powercfg / jam aktif.

Opsi lain adalah memeriksa (mengganti). hiberfil.sys - bertanggung jawab untuk hibernasi.

Pertanyaan: Hibernasi di windows 8


setelah meninggalkan tidur mode jendela 8 mulai reboot dan setelahnya booting jendela pesan berikut lepas landas
katakan padaku bagaimana menghadapinya?

Menjawab:

pesan dari azat145

setelah keluar dari hibernasi windows 8 mulai reboot

Pertama.
Nanti.

Pertanyaan: Tidur Hibrid atau Hibernasi? Apa yang lebih disukai di desktop?


Secara umum, pertanyaannya ada di judul. Seperti yang saya pahami dari mesin pencari, atau lebih tepatnya, dari artikel yang sama yang disalin ke semua situs, keuntungan dari mode tidur Hybrid hanya dalam kecepatan menyalakan, bangun, bisa dikatakan. Dan jika saya ingin menggunakan mode Hibernasi di desktop saya Windows 7 x64, ada batuan bawah air? Saya hanya perlu mematikan daya, dan lebih baik tidak melakukannya dalam mode Hybrid Sleep. Terima kasih kepada semua orang yang merespons

Menjawab: Saya membacanya hari ini. Oke, menurut saya tidak ada jawaban lain dari pertanyaan saya selain briefing singkat dari Microsoft. Kemudian saya akan membagikan temuan saya (bagi mereka yang termasuk dalam topik ini pada pertanyaan serupa).
Jadi:

pro Mode tidur hibrida: 1. Mulai cepat, tidak perlu mematikan komputer sepenuhnya;
minus: 1. Beban HDD(menurut salah satu moderator dari bagian Windows 7 di forum kami); 2. Tidak mati sepenuhnya, terus mengkonsumsi arus, meskipun sedikit (walaupun untuk beberapa item ini merupakan nilai tambah)

Singkatnya, Hibernation diperlukan jika Anda ingin terus-menerus mematikan jaringan, tetapi tidak ingin memuat / mematikan OS untuk waktu yang lama.
Mode tidur hibrida - bagi mereka yang puas dengan PC yang terus-menerus berada di jaringan.

Pertanyaan: Sebelumnya, laptop dimatikan saat startup, sekarang dalam mode tidur


Ku laptop DELL INSPIRON 3521 dengan Windows 8.1 dulu dinonaktifkan saat startup (logo DELL muncul - nonaktifkan - aktifkan kembali dan operasi normal). Saya memperbarui sistem untuk 10k, itu tidak membantu. Saya memakainya ke pusat layanan gunung, terkenal di kota dan dibanggakan - di sana laptop dengan aman beristirahat selama 2 minggu dari perhatian manusia. Mengambilnya, saya memperbaiki masalah dengan memutuskan pemuatan cepat dan, untuk merayakannya, kembali ke 8.1.
Sebulan telah berlalu, dan sekarang, ketika saya menutup penutup laptop, itu masuk ke mode tidur (seperti dalam pengaturan), tetapi setelah 20 menit atau sedikit lebih mati sama sekali (ini tidak terjadi sebelumnya dan pengaturan daya tidak berubah). Saat menyalakan, situasi yang saya jelaskan di atas: menyalakan - logo - mematikan. Operasi normal setelah restart. Semua driver up to date. Apa yang bisa menjadi masalah dan bagaimana cara memperbaikinya? Sangat disayangkan bagi orang miskin - total satu setengah tahun, tetapi saya memiliki ijazah dan sertifikat negara - saya tidak dapat membawanya berkeliling master sekarang ...

Menjawab: Bagaimana Anda ingin bekerja? Secara pribadi, saya menggunakan hibernasi, bukan hibernasi, transisi ke hibernasi juga diaktifkan saat idle, pengaturan di lampiran

Mentransfer pengaturan daya

Kirim karya bagus Anda di basis pengetahuan sederhana. Gunakan formulir di bawah ini

Mahasiswa, mahasiswa pascasarjana, ilmuwan muda yang menggunakan basis pengetahuan dalam studi dan pekerjaan mereka akan sangat berterima kasih kepada Anda.

Diposting di http://www.allbest.ru/

1. Informasi teoretis

1.1 Mengembangkan Driver Kernel Windows

Informasi teoretis singkat

Pengembangan driver kernel

Driver adalah program komputer yang melaluinya program lain (biasanya sistem operasi) mengakses perangkat keras dengan cara standar.

Sketsa untuk menunjukkan cara kerja berbagai jenis driver:

Lebih mudah untuk membagi menjadi 2 jenis:

- Driver kernel (mereka bekerja pada tingkat hak istimewa 0, tetapi tidak berinteraksi dengan program pengguna atau perangkat dengan cara apa pun. Dengan merekalah kita akan memulai (mereka lebih sederhana dan juga dapat berguna).

Driver perangkat diperlukan untuk berinteraksi antara program pengguna dan perangkat, yaitu untuk mentransfer data di antara mereka, untuk mengontrol perangkat. Selain itu, perangkat dapat berupa nyata dan virtual). Pengemudi tidak harus mengendalikan apa pun perangkat fisik... Beberapa sistem operasi juga memungkinkan Anda membuat driver untuk perangkat virtual - objek yang berperilaku seperti perangkat I / O, tetapi tidak sesuai dengan perangkat fisik apa pun.

Komponen kernel dijalankan dalam mode prosesor yang diistimewakan (disebut mode kernel), dapat melakukan segalanya, yaitu:

- mereka dapat menjalankan perintah prosesor istimewa (seperti lgdt),

- dapat memiliki akses ke data dan kode sistem,

- memiliki akses langsung ke peralatan, misalnya, melalui port

- memiliki akses ke sel memori; pengemudi tidak dapat memanipulasi memori fisik secara langsung, namun dapat memperoleh alamat virtual untuk memori fisik apa pun dan memanipulasinya.

Jika Anda perlu menulis aplikasi serius apa pun yang memerlukan akses ke fungsi internal atau struktur data sistem, maka Anda dapat menghadapi banyak keterbatasan yang hanya dapat diatasi dengan menempatkan kode Anda di ruang alamat sistem. Satu-satunya cara terdokumentasi untuk melakukan ini adalah menginstal driver. Metode ini relatif sederhana, andal, dan yang terpenting, didukung penuh oleh sistem operasi itu sendiri.

Kode kernel (sebenarnya, ini adalah sistem itu sendiri) dianggap sepenuhnya tepercaya. Oleh karena itu, dimuat ke dalam ruang alamat sistem, driver menjadi bagian dari sistem dan tidak tunduk pada batasan apa pun. Di Windows, ini adalah satu-satunya cara bagi pengembang non-OS untuk menulis komponen sistem tingkat kernel.

Untuk menulis dan mempelajari cara mengembangkan driver, mereka menggunakan DDK (Device Development Kit) - sistem untuk mengembangkan driver.

Selain dokumentasi, DDK menyertakan sekumpulan file include (* .inc) dan file library (* .lib).

Dengan demikian, Windows mendukung berbagai jenis driver perangkat, tetapi selain itu, ada driver yang bukan driver perangkat, tetapi hanya memungkinkan Anda untuk membuat program yang akan berjalan dalam mode kernel Windows, mis. pada 0 tingkat hak istimewa. Dengan demikian, mereka memiliki akses penuh ke OS dan perangkat keras.

Mari kita lihat driver mode kernel yang paling sederhana.

#termasuk

int DriverEntri (

DI PDRIVER_OBJECT pDriverObject,

DI PUNICODE_STRING pusRegistryPath) (

}

Titik masuknya adalah DriverEntry, yang disusun sebagai prosedur yang menggunakan dua parameter:

pDriverObject Pointer ke objek driver yang baru dibuat. Saat memuat driver, sistem membuat objek driver yang mewakili gambar dalam memori dari driver untuknya. Sistem mengontrol pengemudi melalui objek ini. Objek driver adalah struktur data biasa dari tipe DRIVER_OBJECT.

pusRegistryPath Pointer ke kunci registri yang berisi parameter inisialisasi driver.

Ini driver pertama kami baru saja dimuat ke dalam sistem dan segera diturunkan.

Sekarang mari kita lihat program template yang perlu digunakan untuk mengembangkan program pada langkah pertama pekerjaan kursus (driver mode kernel beeper.sys).

Tugas driver ini adalah memainkan satu nada hingga satu oktaf pertama pada sistem dynamics. Untuk melakukan ini, driver menggunakan instruksi prosesor masuk dan keluar, mengacu pada port I / O yang sesuai. Sudah menjadi rahasia umum bahwa akses ke port I/O dijaga ketat. Sistem Windows sumber. Upaya untuk mengakses salah satu dari mereka, baik pada input dan output, dari mode pengguna, pasti menghasilkan pengecualian.

Dalam contoh kami, speaker akan berfungsi (untuk ini, khususnya, port 61h, 0 dan 1 bit, port 43h dan 42h digunakan).

Pada awal driver, semua 12 catatan didefinisikan.

Anda tidak hanya perlu menyalakan speaker, tetapi juga mengatur frekuensi suara. Untuk ini, subsistem pengatur waktu digunakan, yang beroperasi secara independen dari prosesor dan memiliki 3 saluran. Output saluran 2 terhubung ke speaker, yang digunakan untuk menghasilkan suara dengan frekuensi yang berbeda. Rentang suara yang dapat didengar adalah 30Hz-6000Hz.

Untuk mengatur frekuensi suara, kata kontrol 0Bh dikirim ke port 43h (register perintah pengatur waktu):

pindah, 0Bh

keluar 43h, al

Nilai ini menentukan jumlah saluran yang akan kita kontrol, jenis operasi, mode saluran dan format penghitung.

Kemudian frekuensi suara yang dihitung ulang (1193167 / frekuensi (Hz)) dikirim ke port 42h dalam dua bagian (pertama bagian orde rendah, lalu bagian orde tinggi).

Misalnya, kita ingin mendapatkan frekuensi suara 100Hz. Kami menghitung ulang frekuensi,

1193167/100 = 11931

Kemudian:

kapak bergerak, 11931

keluar 42 jam, al

pindah, ah

keluar 42 jam, al

Pada langkah pertama pekerjaan kursus, perlu untuk mengubah program sehingga menghasilkan suara musik lain (masing-masing memiliki varian).

Quests sering perlu mengatur durasi yang berbeda. Untuk ini, akan lebih mudah untuk menggunakan prosedur DO_DELAY dengan memasukkan parameter "waktu terdengar" yang ditentukan secara tidak langsung.

Untuk memudahkan men-debug driver, ada berbagai alat. Hal paling sederhana adalah menampilkan informasi yang diperlukan di jendela khusus utilitas Tampilan Debug. Program ini diluncurkan sebelumnya dan dikonfigurasi untuk mencegat pesan dari tingkat kernel. Untuk keluaran, program memanggil fungsi DbgPrint, yang memiliki satu parameter - string keluaran. Setelah memulai driver, semua output ditampilkan di jendela Debug View.

Ada berbagai cara untuk menginstal driver ke dalam kernel. Karena driver kami, pada kenyataannya, tidak diperlukan oleh sistem (tidak mengontrol perangkat apa pun), kami akan menghubungkan driver ke sistem untuk sementara dan kemudian menghapusnya.

Untuk melakukan ini, Anda perlu membuat aplikasi yang akan meluncurkan driver. Bagaimana? Driver adalah layanan tingkat kernel. Oleh karena itu, aplikasi akan menggunakan SCM - Service Control Manager, yang disertakan dengan Windows dan berjalan di tingkat pengguna.

Jadi, Anda perlu membangun solusi dari dua proyek: aplikasi konsol dan driver.

Untuk mengembangkan driver di C, Anda harus terlebih dahulu:

- instal DDK,

- atur variabel lingkungan WNETBASE (nilai adalah jalur ke DDK, misalnya, e: \ winddk \ 3790.1830).

Proyek driver harus bertipe MakeFile.

Buat pengaturan proyek menggunakan Pengaturan Aplikasi dan tulis baris di bidang Baris Perintah Bangun

ddkbuild -WNETXP chk. -ceZ

yang berarti memanggil skrip khusus untuk menautkan VC dengan DDK

File harus ada di folder proyek saat ini:

sumber, makefile, ddkbuild.cmd (skrip), file sumber driver.c

Setelah membangun proyek, driver harus memiliki ekstensi sys.

Aplikasi meluncurkan driver pager.sys, mis. mendaftarkannya di registri, dan menjalankannya. Kemudian, setelah selesai, itu menghapusnya dari registri.

Agar aplikasi dapat menjalankan driver, setelah membangun solusi yang terdiri dari dua proyek - aplikasi dan driver, Anda perlu menempatkan file yang dapat dijalankan aplikasi dan driver di folder yang sama, lalu meluncurkan aplikasi.

Driver sangat sulit untuk di-debug. Jika terjadi kesalahan dalam pengoperasian OS, sering macet dan membutuhkan reboot. Dan untuk driver kami, setelah reboot, Anda juga perlu menghapus layanan beeper06 dari registri menggunakan regedit (HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \), lalu reboot lagi.

1.2 Driver Perangkat Virtual Windows

Sejauh ini, kami telah mengembangkan driver mode kernel yang dapat melakukan hal-hal yang tidak dapat dilakukan di tingkat pengguna, khususnya, bekerja dengan port I / O. Driver semacam itu disebut driver kernel, tetapi bukan driver perangkat, karena data tidak ditransfer antara program pengguna dan perangkat (bagaimanapun juga, mengapa driver biasanya diperlukan? Untuk mengatur pertukaran data antara aplikasi pengguna dan perangkat).

Kami sekarang akan mengembangkan driver perangkat yang meneruskan data bolak-balik antara aplikasi pengguna dan perangkat.

Ketika sebuah aplikasi membutuhkan operasi I/O, panggilan ke driver terjadi. Untuk melakukan ini, aplikasi dapat membuat permintaan untuk membaca data dari perangkat atau menulis data ke perangkat. Dan jika beberapa tindakan lain diperlukan, misalnya, pemungutan suara atau pengendalian perangkat, atau sesuatu yang lain, maka yang disebut. Antarmuka IOCTL (Kontrol Masuk-Keluar Perangkat).

Kami akan mempertimbangkan kasus seperti itu untuk perangkat virtual, karena lebih sering daripada tidak, mengapa kami membutuhkan perangkat virtual di driver? Sehingga Anda dapat mentransfer data ke sana, yang entah bagaimana dapat diproses oleh driver (tidak mungkin dalam aplikasi) dan mengembalikan hasilnya ke aplikasi. Ingatlah bahwa driver kernel yang biasa dibahas sebelumnya tidak mengambil apa pun dari aplikasi dan tidak mengembalikan apa pun di sana, tetapi hanya melakukan tindakan yang tidak tersedia untuk aplikasi.

Ketika sebuah aplikasi membutuhkan operasi I/O, panggilan ke driver terjadi. Untuk ini, yang disebut. Antarmuka IOCTL (Kontrol Masuk-Keluar Perangkat).

Aplikasi panggilan melakukan hal berikut:

1) Membuka file dan mendapatkan deskriptornya:

GENERIC_READ + GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL

Akibatnya, jika semuanya berhasil, kami mendapatkan deskriptor perangkat.

2) Mengirim kode tindakan ke pengemudi (apa yang harus dilakukan, pengemudi dapat menerapkan banyak tindakan berbeda):

aktifkan DeviceIoControl, deskriptor, kode tindakan, alamat buffer input, ukuran data input, alamat buffer output, ukuran data output, alamat buffer untuk jumlah byte yang sebenarnya

3) Menutup file dan, karenanya, membebaskan deskriptor.

aktifkan pegangan perangkat CloseHandle

Untuk mentransfer data, modul (aplikasi dan driver) harus menyetujui protokol interaksi (kode tindakan, struktur buffer - input dan output).

Kode tindakan yang sama digunakan di aplikasi dan driver.

Kode tindakan di aplikasi dan di driver dapat ditulis dalam bentuk heksadesimal, atau Anda dapat menggunakan makro CTL_CODE, seperti yang dilakukan di lab contoh. bekerja di file common.inc.

Mari kita lihat contoh kode tindakan dari driver perangkat virtual yang digunakan di lab ini. Namanya IOCTL_GET.

Dalam kasus perangkat virtual, flag file adalah 0.

Jenis perangkat - FILE_DEVICE_UNKNOWN = 22j

Hak akses - FILE_READ_ACCESS + FILE_WRITE_ACCESS = 1 + 2 = 3 = 11b

Kode fungsi berkisar dari 800h hingga FFFh. Kami memiliki 800 jam.

Metode buffering - cara mentransfer data antara aplikasi dan driver (tiga kemungkinan):

Untuk sejumlah kecil data, biasanya METHOD_BUFFERED (00b) digunakan - buffer tambahan dialokasikan di memori non-halaman, cukup untuk menampung buffer input dan output. Alamat buffer ini ditempatkan di IRP di bidang AssociatedIrp.SystemBuffer. Dispatcher I/O mengambil alih tugas penulisan ulang data antara buffer pengguna dan buffer tambahan.

Akses langsung ke data (tanpa buffer) - METHOD_OUT_DIRECT (2) - untuk keluaran, atau METOD_IN_DIRECT (1) - untuk masukan; bidang dari IRP - MdlAddress. Ini adalah panggilan langsung — manajer I / O melakukan ke memori halaman fisik yang berisi buffer mode pengguna. Pada saat yang sama, ini menciptakan struktur tambahan MDL (Memory Descriptor List) untuk menggambarkan halaman tetap. Dan pengembang driver bekerja dengan MDL.

Akses melalui buffer tingkat pengguna - METHOD_NEITHER (3); bidang dari IRP - SystemBuffer. Manajer I / O meneruskan alamat mode pengguna virtual ke driver. Dan pada driver Anda harus bekerja dengan sangat hati-hati dengan mereka, karena driver dalam hal ini seharusnya hanya bekerja dalam konteks utas panggilan.

Ketika aplikasi mengirimkan kode tindakan ke driver, manajer I/O dimulai. Ini bertanggung jawab untuk menghasilkan paket permintaan I / O (IRP) dan mengirimkannya ke driver untuk diproses lebih lanjut.

Kami akan mempertimbangkan 3 jenis permintaan:

IRP_MJ_CREATE - akan diteruskan ke CreateFile,

IRP_MJ_DEVICE_CONTROL - akan dikirimkan oleh DeviceIoControl

IPR_MJ_CLOSE - di CloseHandle

IRP terdiri dari header dan tumpukan alokasi. Manajer I/O membuat jumlah sel tumpukan I/O sama dengan jumlah lapisan driver yang terlibat dalam pemrosesan permintaan. Setiap driver diizinkan mengakses lokasi tumpukannya sendiri. Saat driver meneruskan IRP ke driver tingkat yang lebih rendah, penunjuk tumpukan bergerak ke lokasi yang dibutuhkan driver. Sebaliknya, setelah memproses permintaan, penunjuk dipindahkan ke sel driver tingkat atas. Mendapatkan pointer menggunakan fungsi - IoGetCurrentStackLocation ().

Setiap tumpukan alokasi berisi penunjuk ke DeviceObject dan FileObject yang permintaannya dimulai. IRP selalu disimpan dalam memori non-halaman.

Agar driver berfungsi, objek berikut dibuat dan diterapkan:

objek pengemudi;

objek perangkat;

Tahapan pengemudi.

1) Membuat objek driver. Dibuat saat driver dimuat pada tahap peluncurannya. Pada titik ini, fungsi DriverEntry diluncurkan dan larik MajorFunction diisi, serta penunjuk ke dan dari objek perangkat.

Objek perangkat meliputi:

Tipe perangkat.

2) Buat tautan simbolis ke perangkat. Agar objek "perangkat" tersedia untuk kode mode pengguna, driver harus membuat di direktori "\ ??" yang dapat diakses olehnya (kode mode pengguna). objek lain adalah tautan simbolik. Driver shablon.sys membuat tautan simbolik "slshablon" ke perangkatnya "devshablon" di direktori "\ ??", yang nilainya berupa string "\ Device \ devshablon".

Jadi, saat memuat driver (dalam kasus kami, pada tahap memuat OS), kami memiliki tiga objek dalam memori: driver "\ Driver \ shablon", perangkat "\ Device \ shablon" dan tautan simbolis ke perangkat "\ ?? \ slshablon ".

3) Pembukaan. Selanjutnya, ketika aplikasi dimulai, CreateFile dipanggil. Ada tautan ke perangkat. Struktur objek perangkat DEVICE_OBJECT mengambil informasi tentang driver penyajiannya. Manajer I/O menghasilkan paket permintaan IRP I/O tipe IRP_MJ_CREATE dan mengirimkannya ke driver. Beginilah cara pengemudi mengetahui bahwa kode mode pengguna sedang mencoba mengakses perangkatnya. Jika pengemudi tidak keberatan, maka ia mengembalikan kode sukses. Pengemudi kami memiliki prosedur pengiriman khusus yang bereaksi terhadap IRP ini - DispatchCreateClose (ada prosedur gabungan untuk membuka dan menutup perangkat). Ini berisi STATUS_SUCCESS di bidang Io.Status.Status, dan 0 di Io.Status.Information, karena dalam hal ini, tidak ada yang perlu ditransmisikan. Respons dari driver ini adalah sinyal ke manajer objek untuk membuat berkas maya... Ini membuat elemen baru dalam tabel pegangan proses dengan penunjuk ke objek "file", dan mengembalikan pegangan baru ke kode mode pengguna.

Jika semuanya OK, maka kami menyimpan deskriptor file yang dikembalikan oleh CreateFile di variabel hDevice.

4) Operasi masuk / keluar. Sekarang kita dapat melakukan operasi untuk mengontrol perangkat ini dengan memanggil fungsi DeviceIoControl. Karena driver perangkat pada prinsipnya dapat melakukan banyak tugas yang berbeda, maka perlu untuk membedakan permintaan. Ini adalah tujuan dari parameter kedua dwIoControlCode, yang disebut kode kontrol I / O, yang dibangun sesuai dengan aturan tertentu.

Menggunakan deskriptor perangkat, manajer I / O akan mengambil informasi tentang driver yang melayani, menghasilkan paket permintaan I / O tipe IRP_MJ_DEVICE_CONTROL, dan mengirimkannya ke driver. Pengemudi akan memanggil prosedur DispatchControl yang sesuai, yang meneruskan kode tindakan dan informasi tentang alamat dan ukuran buffer input dan output sebagai parameter. Semua ini dikomunikasikan melalui IRP. Dalam prosedur, informasi yang diperlukan diambil dari IRP: kode tindakan, alamat buffer untuk transmisi data.

Prosedur DispatchControl melakukan tindakan yang diperlukan, dalam kasus kami alamat paket IRP dari register ESI Kemudian mentransfer hasilnya melalui buffer output ke aplikasi.

Demikian pula dengan prosedur sebelumnya, kami melewati IRP status penyelesaian dan jumlah byte yang ditransfer dari driver.

Dalam aplikasi, data ini diformat dan ditampilkan.

5) Penutupan. Seperti yang harus dilakukan dengan pegangan yang tidak lagi diperlukan, dengan memanggil fungsi CloseHandle, kita menutup pegangan perangkat.

6) Bongkar driver. Hapus tautan simbolik dan hapus objek perangkat.

Kompleks (2) terdiri dari dua program:

Sebuah aplikasi yang meminta alamat IRP driver, dan kemudian menampilkan alamat ini ke jendela standar jendela.

Shablon.sys - driver.

Pengemudi shablon melakukan sesuatu yang tidak bisa dilakukan di level pengguna pada kasus ini mendefinisikan isi register esi ketika driver sedang berjalan.

Aplikasi di buffer output menerima konten esi, mengubahnya menjadi output heksadesimal, dan mengeluarkannya ke jendela Windows standar.

Jika Anda perlu mendapatkan informasi dari CMOS di driver, maka Anda perlu:

Kirim offset CMOS yang diinginkan ke port 70h;

Penundaan kecil;

Dapatkan informasi dari port 71h ke al.

Kemudian tulis informasi ini ke buffer output.

Dan dalam aplikasi, Anda perlu mengambil informasi dari buffer keluaran, jika perlu, mengubahnya dan menampilkannya, atau menganalisisnya dan, tergantung pada hasilnya, menampilkan teks yang diperlukan di jendela standar.

Lab ini mengasumsikan bahwa driver diinstal secara permanen di Windows menggunakan file .inf menggunakan Control Panel - Instalasi Perangkat Keras: Tambah perangkat baru, Instal secara manual, Tampilkan semua perangkat, Memiliki Disk, ramban untuk memilih file .inf (driver harus berada di folder yang sama).

Untuk memeriksa apakah driver sudah diinstal, pilih System, Hardware, Device Manager di panel kontrol.

1.3 Mengakses Driver yang Ada dari Aplikasi Mode Pengguna

Algoritma aplikasi yang bekerja dengan driver

Untuk bekerja dengan driver, aplikasi mode pengguna perlu mendapatkan manipulator (pegangan) driver. Manipulator ini dapat diperoleh dengan menggunakan fungsi CreateFile atau CreateFileA API, yang bekerja dengan karakter ASCII. Selanjutnya, fungsi API DeviceIoControl digunakan, di mana kode IOCTL dilewatkan sebagai salah satu parameter. Kode IOCTL adalah kode kontrol yang digunakan pengemudi untuk mempelajari operasi yang diminta aplikasi, metode melewati parameter, dan hak akses yang dibutuhkan aplikasi untuk melakukan operasi ini. Setelah aplikasi memanggil

IRP_MJ_DEVICE_CONTROL dikirim ke driver DeviceIoControl. Setelah memproses permintaan, kontrol dikembalikan ke aplikasi, dan aplikasi tetap harus mengurai respons driver dan menutup pegangan yang terbuka.

Contoh

Dalam contoh di bawah, aplikasi mode pengguna mengirimkan permintaan IOCTL_DISK_GET_PARTITION_INFO_EX ke driver sistem file, menganalisis informasi yang diterimanya, dan mengeluarkan format partisi hard disk.

#termasuk

#termasuk

int _tmain (int argc, _TCHAR * argv)

DWORD dwBytesDikembalikan = 0;

char cPartitionStyle = (0);

PARTITION_INFORMATION_EX piPartitionInfo;

HANDLE hDevice = CreateFileA (

/*1*/"\\\\.\\c: ",

/ * 2 * / GENERIC_READ | UMUM_MENULIS,

/ * 3 * / FILE_SHARE_READ | FILE_SHARE_WRITE,

/ * 5 * / BUKA_ADA,

jika (hDevice == INVALID_HANDLE_VALUE)

MessageBoxA (NULL, "CreateFileA error!", "Error", 0);

jika (DeviceIoControl (

/ * 1 * / (MENANGANI) hPerangkat,

/ * 5 * / & piPartitionInfo,

/ * 6 * / ukuran (piPartitionInfo),

/ * 7 * / & dwBytesDikembalikan,

jika (piPartitionInfo.PartitionStyle == PARTITION_STYLE_MBR)

MessageBoxA (NULL, "PARTITION_STYLE_MBR", "Caption", 0);

lain jika (piPartitionInfo.PartitionStyle == PARTITION_STYLE_GPT)

MessageBoxA (NULL, "PARTITION_STYLE_GPT", "Caption", 0);

MessageBoxA (NULL, "PARTITION_STYLE_RAW", "Caption", 0);

MessageBoxA (NULL, "DeviceIoControl error", "Error", 0);

CloseHandle (hDevice);

Menguraikan contoh

Variabel yang diperlukan agar aplikasi berfungsi dideklarasikan. PARTITION_INFORMATION_EX adalah struktur yang menjelaskan informasi tentang bagian keras disk.

struktur typedef (

) PARTITION_INFORMATION_EX;

Di bagian program ini, fungsi CreateFileA dipanggil untuk mendapatkan pegangan, yang ditulis ke variabel hDevice.

Fungsi DeviceIoControl dipanggil secara sinkron. Itu ditransmisikan kepadanya:

deskriptor perangkat;

Kode IOCTL IOCTL_DISK_GET_PARTITION_INFO_EX;

pointer ke buffer input, NULL dalam kasus kami;

masukan ukuran buffer;

penunjuk ke buffer keluaran;

ukuran buffer keluaran;

penunjuk ke variabel seperti DWORD, yang akan menyimpan jumlah byte yang akan dikembalikan;

pointer ke struktur OVERLAPPED yang digunakan untuk panggilan asinkron fungsi.

Setelah kontrol kembali, jika fungsi berhasil diselesaikan, informasi tentang partisi disimpan dalam struktur PARTITION_INFORMATION_EX.

Analisis dan keluaran informasi dilakukan. Sebelum mengembalikan kendali sistem operasi pegangan terbuka bisa ditutup. Fungsi CloseHandle (__ in HANDLE) memungkinkan Anda melakukan ini. Jika deskriptor tidak ditutup, sistem operasi akan melakukannya untuk Anda.

2. Implementasi makalah

2.1 Langkah 1

Olahraga: 1. Mengembangkan driver kernel dengan akses ke port, melakukan tindakan sesuai dengan opsi dan mengeluarkan informasi ke jendela Debug View (berdasarkan opsi), serta aplikasi yang meluncurkan driver.

Mencantumkan Kurs_test.cpp

#sertakan "stdafx.h"

#sertakan "windows.h"

#sertakan "stdlib.h"

SC_HANDLE hSCManager;

SC_HANDLE hLayanan;

char acDriverPath;

if (hSCManager! = 0) (

// daftarkan pemain di tabel SCManager

jika (hLayanan! = 0) (

// Hapus entri driver

HapusLayanan (hLayanan);

CloseServiceHandle (hService);

kembali 0;

}

Daftar Beeper.sys

#termasuk

#define TIMER_FREQUENCY 1193167 // 1.193.167 Hz

#define PITCH_C 523 // 523,25 Hz

#define PITCH_Cs 554 // 554,37 Hz

#define PITCH_D 587 // 587,33 Hz

#define PITCH_Ds 622 // 622,25 Hz

#define PITCH_E 659 // 659,25 Hz

#define PITCH_F 698 // 698,46 Hz

#define PITCH_Fs 740 // 739,99 Hz

#define PITCH_G 784 // 783,99 Hz

#define PITCH_Gs 831 // 830.61 Hz

#define PITCH_A 880 // 880.00 Hz

#define PITCH_As 988 // 987.77 Hz

batal DO_DELAY (waktu int) (

panjang saya, j;

untuk (i = 0; i<=time*0xfffff; i++) {}

}

batal DO_BIG_DELAY (waktu int) (

DO_DELAY (2 * waktu);

}

void Gambang (int nPitch) (

int nTone = TIMER_FREQUENCY / nPitch

_asm (

mov al, 10110110b; // tulis kata kontrol pada 43h

out 43h, al; // Saluran Kontrol Suara - Logika Menggunakan Nada Timer Dan Bit Port Sistem Terkendali Perangkat Lunak

mov eax, nTone; // tulis frekuensi yang dihitung ulang menjadi 42

keluar 42h, al; // bagian atas

mov al, ah; // bagian rendah

keluar 42 jam, al

di al, 61h; // ubah urutan escape - ubah bit terakhir menjadi bit

; // bit 0 - izin untuk menggunakan speaker

; // bit 1 - izin untuk menghubungkan timer-2 ke speaker

atau al, 00000011b; speaker AKTIF

keluar 61 jam, al

}

DO_DELAY (0x7f);

_asm (

di al, 61j

dan al, 11111100b; speaker OFF

keluar 61 jam, al

}

}

Gambang (PITCH_C);

Gambang (PITCH_С);

Gambang (PITCH_С);

Gambang (PITCH_С);

Gambang (PITCH_С);

Gambang (PITCH_С);

Gambang (PITCH_С);

kembali STATUS_DEVICE_CONFIGURATION_ERROR;

}

2.2 Langkah 2

Kembangkan driver perangkat virtual yang memungkinkan Anda untuk melakukan tindakan yang hanya tersedia di tingkat hak istimewa nol (sesuai dengan opsi), dan kemudian mentransfer hasilnya ke aplikasi di tingkat hak istimewa ketiga untuk menampilkannya.

Dalam aplikasi, kami menampilkan hasilnya ke jendela Windows standar.

Daftar shablon.c

#termasuk // berbagai definisi PB

#termasuk

UNICODE_STRING g_usNamaPerangkat;

UNICODE_STRING g_usSymbolicLinkName;

void DriverUnload (IN PDRIVER_OBJECT pDriverObject) (

IoDeleteSymbolicLink (& g_usSymbolicLinkName);

IoDeleteDevice (pDriverObject-> DeviceObject);

}

NTSTATUS DispatchCreateClose (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// memproses MJ_CREATE MJ_CLOSE

pIrp-> IoStatus.Status = STATUS_SUCCESS;

pIrp-> IoStatus.Information = 0;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

kembali STATUS_SUCCESS;

}

NTSTATUS DispatchControl (PDEVICE_OBJECT pDeviceObject, PIRP pIrp) (// memproses IRP_MJ_DEVICECONTROL

status NTSTATUS;

int regEsi;

// ambil pointer ke IO_STACK_LOCATION, di dalamnya ke IoControlCode

if (pIrp-> Tail.Overlay.CurrentStackLocation-> Parameters.DeviceIoControl.IoControlCode == IOCTL_GET) (

// Bandingkan kode tindakan dan jika ini adalah klien kami, maka:

_asm (

pindahkan, 0

pindah, 10j

keluar 70 jam, al

di al, 71h

cbw

cwde

mov regEsi, eax

}

// ini adalah fungsi kami - kami mengambil isi register esi

// tulis ke buffer sistem

* ((int *) pIrp-> AssociatedIrp.SystemBuffer) = regEsi;

pIrp-> IoStatus.Information = 4; // dan atur ukuran hasilnya

status = STATUS_SUCCESS;

) status lain = STATUS_INVALID_DEVICE_REQUEST;

pIrp-> IoStatus.Status = status;

IoCompleteRequest (pIrp, IO_NO_INCREMENT);

kembali (status);

}

int DriverEntry (DI PDRIVER_OBJECT pDriverObject, DI PUNICODE_STRING pusRegistryPath) (

Status NTSTATUS;

PDEVICE_OBJECT pDeviceObject;

// inisialisasi string Unicode

RtlInitUnicodeString (& g_usDeviceName, L "\\ Device \\ DevGet");

RtlInitUnicodeString (& g_usSymbolicLinkName, L "\\ ?? \\ sldevGet");

// isi objek driver - jelaskan dengan jelas kepada driver fungsi mana yang memproses apa

pDriverObject-> DriverUnload =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

pDriverObject-> MajorFunction =

// buat objek logis dari perangkat virtual

Status = IoCreateDevice (pDriverObject, 0, & g_usDeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, & pDeviceObject);

if (! NT_SUCCESS (Status)) (Status kembali;)

// buat tautan simbolis ke perangkat

Status = IoCreateSymbolicLink (& g_usSymbolicLinkName, & g_usDeviceName);

jika (! NT_SUCCESS (Status)) (

IoDeleteDevice (pDeviceObject);

kembali Status;

}

kembali Status;

}

Daftar kursus2.cpp

#sertakan "stdafx.h"

#sertakan "windows.h"

#sertakan "stdlib.h"

#define IOCTL_GET CTL_CODE (FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)

int _tmain (int argc, _TCHAR * argv) (

MENANGANI hPerangkat;

BOOL DevControl;

DWORD dwBytesDikembalikan;

arang stroka;

/*

Parameter:

lpFileName Alamat string yang diakhiri null yang menentukan nama objek yang akan dibuat atau dibuka.

dwDesiredAccess Jenis akses ke objek. Parameter ini dapat mengambil kombinasi dari nilai-nilai berikut:

Nilai: Deskripsi:

0 Menentukan kueri tentang ketersediaan objek pada perangkat yang ditentukan. Aplikasi dapat meminta atribut perangkat tanpa mengaksesnya.

GENERIC_READ Menentukan akses baca dari objek. Data dapat dibaca dari file dan penunjuk file dapat dipindahkan. Kombinasikan dengan GENERIC_WRITE untuk akses baca-tulis.

GENERIC_WRITE Menentukan akses tulis ke objek. Data dapat ditulis ke file dan penunjuk file dapat dipindahkan. Kombinasikan dengan GENERIC_READ untuk akses baca-tulis.

dwShareMode Obyek berbagi mode akses. Jika nilainya nol, objek tidak dapat digunakan bersama oleh beberapa program. Semua operasi berikutnya untuk membuka objek akan gagal sampai pegangan ke objek ditutup. Untuk berbagi objek, gunakan kombinasi nilai berikut:

Nilai: Deskripsi:

FILE_SHARE_DELETE Memungkinkan urutan terbuka objek untuk meminta akses hapus.

FILE_SHARE_READ Memungkinkan urutan terbuka objek untuk meminta akses baca.

FILE_SHARE_WRITE Memungkinkan urutan terbuka objek untuk meminta akses tulis

lpSecurityAttributes Alamat struktur SECURITY_ATTRIBUTES yang menentukan apakah pegangan yang dikembalikan oleh fungsi dapat diwarisi oleh proses anak atau tidak.

Jika lpSecurityAttributes adalah NULL, maka deskriptor tidak dapat diwariskan.

dwCreationDisposition

Nilai: Deskripsi:

CREATE_ALWAYS Selalu membuat file baru.

Jika file ada, fungsi akan menimpa file.

CREATE_NEW Membuat file baru. Fungsi akan gagal jika file tersebut ada.

OPEN_ALWAYS Buka file, selalu. Jika file tidak ada, fungsi akan membuatnya dengan cara yang sama jika dwCreationDisposition adalah CREATE_NEW.

OPEN_EXISTING Membuka file. Fungsi akan gagal jika file tidak ada.

TRUNCATE_EXISTING Membuka file dan memotongnya ke ukuran nol. Fungsi akan gagal jika file tidak ada.

dwFlagsAndAttributes Bendera dan atribut file.

Saat file yang ada dibuka, CreateFile mengabaikan file template.

Nilai kembali:

Jika fungsi berhasil, pegangan terbuka ke file yang ditentukan dikembalikan. Jika file yang ditentukan ada sebelum panggilan fungsi dan parameter dwCreationDisposition adalah CREATE_ALWAYS atau OPEN_ALWAYS, panggilan GetLastError akan mengembalikan ERROR_ALREADY_EXISTS bahkan jika fungsi berhasil. Jika file tidak ada sebelum panggilan, GetLastError akan mengembalikan 0 (nol).

Jika terjadi kesalahan, fungsi akan mengembalikan INVALID_HANDLE_VALUE. Untuk informasi selengkapnya tentang kesalahan, hubungi GetLastError.

*/

if (hPerangkat! = 0) (

/*

hDevice adalah pegangan yang dikembalikan oleh CreateFile.

dwIocontrolCode adalah nilai yang menunjukkan operasi yang harus dilakukan.

lpInBuffer adalah alamat buffer yang berisi data yang diperlukan untuk melakukan operasi yang ditentukan dalam dwIoControlCode. Jika operasi tidak memerlukan data, Anda dapat melewati NULL.

nInBufferSize adalah ukuran dalam byte data dalam buffer yang ditunjukkan oleh lpInBuffer.

lpOutBuffer adalah alamat buffer yang akan diisi dengan output ketika operasi berhasil. Jika operasi tidak memberikan output, bidang ini HARUS NULL.

nOutBufferSiz adalah ukuran dalam byte buffer yang ditunjukkan oleh lpOutbuffer.

lpBytesReturned adalah alamat variabel dword yang akan menerima ukuran data yang dimasukkan di lpOutBuffer.

lpOverlapped adalah alamat dari struktur OVERLAPPED jika Anda ingin operasi menjadi asynchronous. Jika Anda ingin menunggu operasi selesai, masukkan NULL di bidang ini.

*/

wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // tulis baris ke buffer (adwOutBuffer -> stroka)

CloseHandle (hDevice);

kembali 0;

}

program komputer kernel driver

2.3 Langkah 3

Daftar kursus.cpp

#termasuk

#termasuk

#termasuk

{

sampah DWORD;

0, // atribut file

kembali (SALAH);

}

0, // masukkan ukuran buffer

CloseHandle (hDevice);

kembali (bHasil);

}

int utama (int argc, char * argv)

{

/*

struktur typedef (

PARTITION_STYLE PartitionStyle; // format bagian

LARGE_INTEGER MulaiOffset; // offset awal bagian

LARGE_INTEGER PartitionLength; // ukuran partisi

Nomor Partisi DWORD; // nomor bagian

Partisi Penulisan Ulang BOOLEAN; // jika bagian tersebut dapat ditulis ulang maka TRUE

Persatuan (

PARTITION_INFORMATION_MBR Mbr; // informasi tambahan tentang bagian Gaya MBR

PARTITION_INFORMATION_GPT Gpt; // informasi tambahan tentang bagian Gaya GPT

};

) PARTITION_INFORMATION_EX;

*/

BOOL bHasil;

sistem ("JEDA");

kembali ((int) bResult);

}

2.4 Langkah 4

1) Gabungkan semua fungsi yang dikembangkan pada langkah 1-3 menjadi satu set program.

Kompleks terakhir akan terlihat seperti ini:

- Driver kami dibangun ke dalam sistem dan dimuat selama fase boot Windows.

- Aplikasi meminta informasi yang diperlukan pengemudi (ditentukan dalam tahap 2), pengemudi mengirimkan informasi ini, sementara speaker juga dihidupkan untuk sementara dan melodi (ditentukan dalam tahap 1) dimainkan. Kemudian aplikasi membuat permintaan ke driver yang ada di sistem (sesuai dengan opsi ke tahap 3).

2) Buatlah catatan penjelasan, di mana semua 4 tahap harus dijelaskan, serta informasi teoritis untuk setiap tahap.

#sertakan "stdafx.h"

#sertakan "windows.h"

#sertakan "stdlib.h"

#define IOCTL_GET CTL_CODE (FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_READ_ACCESS + FILE_WRITE_ACCESS)

BOOL GetPartitionNumber (PARTITION_INFORMATION_EX * pex)

{

MENANGANI hPerangkat; // deskriptor perangkat yang diperiksa

BOOL bHasil; // bendera hasil

sampah DWORD;

hDevice = CreateFile (TEXT ("\\\\. \\ c:"), // perangkat yang akan dibuka

GENERIC_READ | GENERIC_WRITE, // akses ke perangkat

FILE_SHARE_READ | FILE_SHARE_WRITE, // mode penggunaan bersama

NULL, // atribut keamanan default

OPEN_EXISTING, // lokasi

0, // atribut file

BATAL); // jangan salin atribut file

if (hDevice == INVALID_HANDLE_VALUE) (// tidak dapat membuka perangkat

printf("Buat File() gagal!\n");

kembali (SALAH);

}

bResult = DeviceIoControl (hDevice, // perangkat yang diminta

IOCTL_DISK_GET_PARTITION_INFO_EX, // operasi yang sedang dilakukan

NULL, // pointer ke buffer input

0, // masukkan ukuran buffer

pex, sizeof (* pex), // buffer keluaran

& sampah, // jumlah byte yang akan dikembalikan

(LPOVERLAPPED) NULL); // menyinkronkan input / output (I / O)

CloseHandle (hDevice);

kembali (bHasil);

}

int _tmain (int argc, _TCHAR * argv) (

SC_HANDLE hSCManager;

SC_HANDLE hLayanan;

char acDriverPath;

MENANGANI hPerangkat;

BOOL DevControl;

DWORD dwBytesDikembalikan;

LPVOID adwInBuffer, adwOutBuffer;

arang stroka;

PARTITION_INFORMATION_EX pex; // struktur perangkat

BOOL bHasil;

hDevice = CreateFile ("\\\\. \\ sldevGet", GENERIC_READ + GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

if (hPerangkat! = 0) (

DevControl = DeviceIoControl (hDevice, IOCTL_GET, & adwInBuffer, sizeof (adwInBuffer), & adwOutBuffer, sizeof (adwOutBuffer), & dwBytesReturned, NULL);

if ((DevControl! = 0) && (dwBytesReturned! = 0)) (

wsprintf ((LPSTR) stroka, "% X", adwOutBuffer); // tulis baris ke buffer (adwOutBuffer -> stroka)

if (stroka == "000000100") MessageBox (NULL, "Ditemukan 1,44 Mb", "pemindai FDD Yermakov", MB_OK);

else MessageBox (NULL, "Tidak ditemukan", "Pemindai FDD Yermakov", MB_OK);

hSCManager = OpenSCManager (NULL, NULL, SC_MANAGER_CREATE_SERVICE);

if (hSCManager! = 0) (

GetFullPathName ("beeper.sys", ukuran acDriverPath, acDriverPath, NULL);

// Daftarkan musisi di tabel SCM

hService = CreateService (hSCManager, "beeper11", "Nice Melody Beeper11",

SERVICE_START + HAPUS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,

SERVICE_ERROR_IGNORE, acDriverPath, NULL, NULL, NULL, NULL, NULL);

jika (hLayanan! = 0) (

StartService (hService, 0, NULL);

HapusLayanan (hLayanan);

CloseServiceHandle (hService);

) else MessageBox (NULL, "Tidak dapat" mendaftarkan driver ", NULL, MB_ICONSTOP);

CloseServiceHandle (hSCManager);

) else MessageBox (NULL, "Tidak dapat" terhubung ke SCManager ", NULL, MB_ICONSTOP);

) else MessageBox (NULL, "Tidak dapat" mengirim kode kontrol ", NULL, MB_OK);

CloseHandle (hDevice);

) else MessageBox (NULL, "Dev tidak ada", NULL, MB_ICONSTOP);

bResult = GetPartitionNumber (& pex);

if (bResult) (printf("PartitionNumber =% d \ n", pex.PartitionNumber);

) else (printf ("GetPartitionNumber () gagal. Error% d. \ n", GetLastError ());)

sistem ("JEDA");

kembali ((int) bResult);

}

3. Operasi aplikasi

Gambar 3.1. Pengemudi dari langkah 2

Gambar 3.2. Pengemudi dari langkah 3

Diposting di Allbest.ru

Dokumen serupa

    Mekanisme interaksi antara driver kernel-mode dan aplikasi pengguna: arsitektur driver multilayer, algoritma penyembunyian data, interaksi driver-aplikasi, antarmuka pengguna program penyaringan akses file.

    makalah, ditambahkan 23/06/2009

    Arsitektur Windows NT I/O. Organisasi internal USB bus... Karakteristik penting dari model driver WDM. Titik masuk driver sedang dikembangkan, menempatkan kode di memori, menginstal driver di sistem. Implementasi kode driver di C.

    makalah, ditambahkan 27/09/2014

    Struktur mode pengguna yang memungkinkan pengguna berinteraksi dengan sistem. Deskripsi mode kernel, yang memastikan eksekusi aplikasi (program) pengguna dengan aman. Lapisan abstraksi perangkat keras Windows NT.

    presentasi ditambahkan pada 10/23/2013

    Kernel Windows 98. Peran modul kernel 16-bit. Masalah kinerja. Multitasking yang kooperatif dan preemptive. Peningkatan pemanfaatan sumber daya di Windows 98. Menggunakan WordArt. MS Outlook Express: membuat dan mengirim pesan.

    tes, ditambahkan 14/04/2005

    Fungsi bersama semua perangkat komputer dan akses ke sumber dayanya. Konsep dan fungsi ruang operasi grafis Sistem Windows... Latar belakang layanan jendela... Kontrol berkas sistem... Teknologi Plug and Play. Antarmuka grafis jendela.

    tes, ditambahkan 22/01/2011

    Karakteristik sistem operasi. Sejarah perkembangan Windows. Karakteristik komparatif Versi Windows... Elemen dan Alat Windows XP. Program aplikasi di Windows XP. Desktop dan komputer laptop menjalankan Windows.

    laporan ditambahkan pada 10/16/2011

    Menggunakan driver mode kernel dan aplikasi kontrol untuk membuat utas sistem. Mensimulasikan pemrosesan data dan mengatur penundaan. Pengembangan driver di C++. Konfigurasi bangku tes. Akurasi perubahan penundaan dan operasi pengatur waktu.

    makalah, ditambahkan 24/06/2009

    Pekerjaan pendahuluan dari struktur internal sistem operasi Windows. Arsitektur NT dan struktur inti. Metode untuk mengganti fungsi dalam mode kernel dan mode koristuvach. Memahami pengemudi. paket I/O. Penilaian stabilitas dan keamanan sistem Windows.

    makalah, ditambahkan 01/02/2014

    Konsep, jenis dan operasi firewall. Firewall Windows bawaan. Windows XP SP2, akses ke pengaturan firewall Windows XP Service Pack 2. Windows Vista, lalu lintas yang diizinkan. Windows 7, pengaturan profil aktif. Firewall Pribadi, tingkat pengujian.

    abstrak, ditambahkan 19/11/2010

    Kenalan dengan karakteristik teknis komputer pribadi... Menginstal sistem operasi dan Driver Windows 7. Metode membersihkan jendela XP Profesional SP3. Metode pemulihan sistem operasi. Pertunjukan Instalasi Microsoft Kantor 2010.

Microsoft di sistem operasi Windows 10 sangat memperhatikan keamanan. Salah satu elemen penting dari sistem adalah “ Pembela jendela”, Tapi dia tidak mampu mengatasi semua ancaman. Secara khusus, baru-baru ini, virus Ransomware semakin populer, reinkarnasi yang paling terkenal adalah perangkat lunak perusak Petya dan. Microsoft telah menerapkan fitur isolasi kernel dan integritas memori di Windows 10 untuk memerangi virus Ransomware. Mereka dinonaktifkan secara default.

Daftar Isi:

Apa itu isolasi kernel dan integritas memori

Isolasi inti adalah proses perlindungan tambahan, yang disediakan dengan metode melindungi proses komputer dari sistem operasi dan perangkat. Karena tindakan ini, dimungkinkan untuk menghindari merusak pengoperasian sistem operasi ketika virus masuk ke komputer.

Integritas memori adalah fungsi pelindung yang menyertai isolasi kernel, yang ditujukan untuk membatasi akses oleh program yang berpotensi berbahaya yang tidak diketahui ke proses dengan level tinggi keamanan.

Penting: Fungsi isolasi kernel hanya dapat bekerja jika ada kondisi yang memadai untuk ini pada bagian dari perangkat keras komputer. V pengaturan BIOS teknologi virtualisasi harus aktif, karena komputer yang menjalankan Windows 10 dapat menjalankan berbagai aplikasi dalam wadah virtual, membatasi aksesnya dari komponen sistem utama.

Cara mengaktifkan isolasi kernel dan integritas memori

Pengaturan sistem operasi Windows 10 memungkinkan Anda mengambil kendali penuh atas fitur keamanan di komputer Anda. Melalui pengaturan Windows 10, Anda dapat mengaktifkan isolasi kernel dan integritas memori sebagai berikut:


Seperti disebutkan di atas, jika perangkat keras komputer Anda tidak mendukung virtualisasi, fungsi ini tidak akan berfungsi. Saat diaktifkan, pengguna akan melihat pesan “Tidak dapat memastikan integritas memori. Kemungkinan ketidakcocokan." Jika pesan ini muncul, disarankan untuk membuka BIOS dan melihat apakah fungsi tersebut diaktifkan. Boot aman(Mode boot).

Cara menonaktifkan isolasi kernel dan integritas memori

Fungsi-fungsi baru dalam sistem operasi yang secara serius mempengaruhi operasinya selalu berisiko menyebabkan masalah pada komputer. Fungsi isolasi kernel tidak terkecuali. Pengguna yang sudah mencobanya, perhatikan di forum Microsoft bahwa mereka mengalami masalah saat meluncurkan sejumlah game dan program. Satu-satunya cara untuk memperbaiki masalah ini adalah dengan menonaktifkan isolasi kernel dan integritas memori. Mungkin, di pembaruan mendatang, pengembang aplikasi atau Microsoft akan memperbaiki ketidakcocokan ini.

Ada 3 cara untuk menonaktifkan isolasi kernel dan integritas memori: