Bagikan melalui


[Arsip Buletin ^] [< Volume 1, Nomor 1] [Volume 1, Angka 3 >]

Buletin Internal Sistem Volume 1, Nomor 2

http://www.sysinternals.com


15 Mei 1999 - Dalam masalah ini:

  1. APA YANG BARU DI INTERNAL SISTEM

    • SDelete
    • Pembaruan Win2K Pengaman Layar Layar BlueScreen
    • "Linux dan Enterprise"
    • "Di dalam Utilitas NT"
    • Kolom Majalah Windows NT Mei Saya
    • Hal-Hal Yang Tidak Begitu Baru
  2. BERITA INTERNAL

    • Sopan Santun Di Samping Tempat Tidur Dr. GUI yang Buruk
    • WinDev '99 Timur
    • Rilis Karya Driver Numega Segera
    • Beta 3 DDK Dirilis
    • Spinlock Yang Diantrekan Win2K
  3. APA YANG AKAN TERJADI

    • Pelindung File Sistem Win2K (SFP)

SPONSOR: PERANGKAT LUNAK WINTERNALS

Buletin Internal Sistem disponsori oleh Winternals Software, di Web di http://www.winternals.com. Winternals Software adalah pengembang dan penyedia alat sistem canggih terkemuka untuk Windows NT/2K. Produk Perangkat Lunak Winternals termasuk FAT32 untuk Windows NT 4.0, ERD Commander (kemampuan boot-disk untuk Windows NT), dan NTRecover.

Halo semuanya,

Selamat datang di edisi kedua buletin Systems Internals. Buletin saat ini memiliki 2700 pelanggan, dengan langganan masih kuat.

Sejak buletin terakhir Microsoft telah resmi merilis Windows 2000 Beta 3. Nomor build kernel Beta 3 adalah 2031, sedangkan dari kernel rilis awal NT 4.0 adalah 1381 dan NT 3.51 memiliki nomor build 1025. . Apa yang saya temukan aneh (dan agak mengganggu), adalah bahwa Microsoft meningkatkan nomor build setiap kali mereka melakukan build penuh dari sistem operasi (setiap hari kerja), namun, jumlah build yang dilaporkan dari kernel mencerminkan bahwa dari rilis publik awalnya. Misalnya, meskipun jumlah build aktual dari kernel NT 4.0 Service Pack 5 jauh lebih tinggi dari 1381, kernel masih melaporkan 1381 sebagai nomor build.

Rilis Beta 3 Windows 2000 dimaksudkan untuk menjadi panggilan bangun bagi komunitas pengembang. Microsoft telah mengumumkan bahwa ia akan mengirim Windows 2000 pada bulan Oktober, dan bahwa Beta 3 mewakili versi lengkap fitur dari apa yang akan dikirim, sehingga pengembang dapat mulai menulis produk baru tanpa takut bahwa hal-hal akan berubah dari bawahnya.

Windows 2000 dilengkapi dengan banyak API baru, layanan berlapis, dan peningkatan kernel. Salah satu perubahan yang akan sangat terlihat oleh pengembang driver perangkat adalah bahwa Blue Screen of Death (BSOD) telah berubah. Dalam versi NT sebelumnya, BSOD menampilkan informasi waktu tautan dan alamat beban untuk semua driver pada sistem, serta cadangan tumpukan seperti yang ada pada saat crash. Di Windows 2000 hanya kode berhenti dan baris alamat terkait (baris alamat menerjemahkan satu atau beberapa parameter kode henti ke lokasi dalam driver perangkat) yang ditampilkan, bersama dengan pesan verbose. Pesan dukungan menyarankan agar Anda memeriksa bioskop dan pengaturan hard drive Anda, dan menonaktifkan perangkat lunak defragmentasi dan pemindai virus untuk mencoba menghindari crash lagi. Microsoft Premier Support Services (PSS) ditentukan, berdasarkan pengalaman mereka dan pada umpan balik pelanggan, bahwa BSOD gaya NT 4 tidak berguna untuk menentukan penyebab crash.

Saya pribadi menemukan daftar driver yang dimuat, dan khususnya stack dump, menjadi berguna ketika mendapatkan laporan bug driver dari pengguna jauh lebih mudah dan lebih cepat untuk mendapatkan informasi ini daripada meminta pengguna untuk mengirim crash dump multi-megabyte. Saya sering mengisolasi penyebab crash berdasarkan stack dump, dan versi driver terverifikasi yang telah dimuat pengguna berdasarkan informasi versi yang ditampilkan dalam daftar driver. Saya ingin tahu apa yang Anda pikirkan: apakah Anda ingin melihat BSOD gaya NT 4 diteruskan ke Windows 2000, atau apakah format BSOD baru cukup? Kirimi saya email jika Anda memiliki pendapat. Aku akan melaporkan hasil polling informal ini di buletin berikutnya. Sementara saya berada di subjek BSOD, pastikan untuk memeriksa pembaruan Windows 2000 dari System Internals BlueScreen Screen Saver yang selalu populer, yang tercakup dalam masalah ini.

Terima kasih!

-Tanda

APA YANG BARU DI INTERNAL SISTEM

SDELETE

Sebagai bagian dari Windows NT 4.0 yang memenuhi persyaratan peringkat keamanan C2, ini menerapkan "perlindungan penggunaan kembali objek". Ini berarti bahwa NT nol aplikasi sumber daya file dan memori yang dialokasikan ketika aplikasi mengakses sumber daya untuk pertama kalinya. Ini mencegah aplikasi dari, misalnya, membuat file besar dan memeriksa kontennya untuk melihat apa yang sebelumnya disimpan di disk. Namun, perlindungan penggunaan kembali objek tidak sejauh melindungi sumber daya yang dapat diakses oleh aplikasi yang melewati API terkait sumber daya standar, atau yang melewati sistem operasi sama sekali. Misalnya, Anda dapat menggunakan editor disk, seperti DiskProbe Resource Kit, untuk memeriksa konten bagian disk yang tidak dialokasikan. Ini memungkinkan Anda melihat data yang sebelumnya milik file yang dihapus.

Banyak lingkungan memerlukan kemampuan "hapus aman". Fitur ini memungkinkan pengguna untuk menghapus data sensitif secara permanen sehingga tidak terlihat oleh alat yang melewati fasilitas perlindungan sistem operasi. Munculnya Sistem File Enkripsi (EFS) telah menyoroti kebutuhan akan fasilitas penghapusan yang aman di Windows 2000. Ketika Anda mengenkripsi file yang sebelumnya tidak terenkripsi, EFS tidak menghapus konten alokasi disk yang berisi data file yang tidak terenkripsi ketika membebaskan alokasi disk. Dengan demikian, meskipun versi aktif file yang Anda enkripsi aman, versi lama file masih ada di bagian disk yang tidak dialokasikan sampai kebetulan ditimpa oleh data file baru yang ditetapkan NTFS ke bagian tersebut.

Untuk mengisi lubang ini, saya telah menulis SDelete (Hapus Aman). Ini adalah alat baris perintah yang memungkinkan Anda tidak hanya menghapus file standar dengan aman, tetapi juga untuk menghapus data yang dihapus sebelumnya dengan aman yang ada di bagian disk yang tidak dialokasikan. Selain itu, ini bekerja dengan file Terkompresi, terenkripsi, dan jarang Windows NT/2000, sesuatu yang memerlukan penggunaan API defragmentasi. SDelete mematuhi Kliring Departemen Pertahanan dan membersihkan STANDAR DOD 5220.22-M, sehingga Anda dapat yakin bahwa setelah Anda menghapus data, data hilang selamanya.

Saya menyediakan SDelete dengan kode sumber lengkap dan deskripsi tentang cara kerjanya, sehingga Anda dapat melihat cara menggunakan API defragmentasi, dan sehingga Anda dapat memverifikasi klaim saya bahwa itu akan mencegah data sensitif Anda dihapus agar tidak dapat dipulihkan.

Anda dapat menemukan dokumentasi tentang API defragmentasi Windows NT/2000 di http://www.sysinternals.com/defrag.htm. Unduh SDelete dengan kode sumber lengkap di http://www.sysinternals.com/sdelete.htm.

PEMBARUAN WIN2K PENGAMAN LAYAR LAYAR BLUESCREEN

Perubahan yang dilakukan Microsoft pada layar startup NT dan tata letak Blue Screen of Death (BSOD) di Windows 2000 membuat System Internals BlueScreen Screen Saver memerlukan pembaruan besar. Untuk terus memberi Anda realisme BSOD, saya telah merilis versi 2.0 dari pengaman layar. Ini tidak hanya mencerminkan perubahan pada format BSOD, tetapi juga secara tepat meniru layar startup Windows 2000, lengkap dengan memutar strip kemajuan dan pembaruan bilah kemajuan. Sangat nyata bahwa penghemat layar akan membodohi bahkan pengguna dan pengembang ahli Windows 2000. Tentu saja, di bawah NT 4.0 BlueScreen Screen Saver masih menyajikan layar NT 4.0 BSOD dan startup.

Bagaimana cara membuat ulang layar startup Windows 2000 dengan sangat sempurna dan pada saat yang sama tidak melanggar undang-undang hak cipta? Saya tidak menyertakan grafik bitmap startup Windows 2000 dengan pengaman layar. Sebaliknya, saya menggunakan DirectX untuk mengalihkan mode grafis ke mode yang sama yang digunakan oleh Windows 2000 selama urutan startup, dan kemudian saya mereferensikan sumber daya bitmap dari file kernel Windows 200, ntoskrnl.exe. Sumber daya ini (Anda dapat melihatnya dengan membuka sumber daya ntoskrnl.exe di Visual Studio) adalah sumber daya yang ditampilkan kernel, yang merupakan perubahan dari cara Windows 9x melakukan hal-hal di mana grafik startup sebenarnya adalah file terpisah. Ini tidak terlihat seperti OEM komputer akan diberikan kesempatan untuk menyesuaikan pengalaman startup di Windows 2000...

Anda dapat mengunduh penghemat layar BlueScreen di http://www.sysinternals.com/bluescreen.htm. Jika Anda memiliki cerita lucu yang terkait dengan membodohi seseorang dengan pengaman layar, silakan lewati.

Anda dapat mengetahui informasi selengkapnya tentang bagaimana dan mengapa BSOD di kolom Internal Windows NT Magazine NT Desember 1997 saya, "Di dalam Layar Biru". Tautan di halaman Publikasi Internal Sistem, http://www.sysinternals.com/publ.htm, akan membawa Anda ke versi on-line kolom tersebut. Halaman ini juga berisi tautan ke presentasi artikel dan kolom on-line lainnya yang telah saya tulis.

"LINUX AND THE ENTERPRISE"

Respons besar komunitas Linux terhadap artikel saya dalam edisi April Windows NT Magazine tentang kekurangan skalabilitas kernel Linux telah meminta majalah untuk memposting versi on-line artikel di depan jadwal. Anda dapat menemukan tautan ke artikel, "Linux dan Enterprise", di bagian "Artikel" di http://www.sysinternals.com/publ.htm. Artikel ini menjelaskan beberapa batasan rilis kernel Linux saat ini (2,2x), termasuk kurangnya mekanisme tunggu peristiwa yang efisien, serialisasi panggilan sistem yang signifikan, tidak ada I/O asinkron, dan implementasi yang buruk dari API soket sendfile (dalam NT yang disebut TransmitFile). Kombinasi batasan ini mencegah Linux bersaing head-to-head dengan NT dan UNIX lainnya, dalam hal performa, pada aplikasi kelas perusahaan seperti server web, server database, dan server email.

"DI DALAM UTILITAS NT"

Jika Anda telah menggunakan Filemon, Regmon, atau HandleEx, dan ingin tahu lebih banyak tentang apa yang mereka katakan dan bagaimana penerapannya, maka Anda akan tertarik pada kolom Majalah Windows NT Februari saya, "Di dalam Utilitas NT." Kolom ini menjelaskan internal alat-alat ini, dan untuk Regmon dan Filemon, memberi tahu Anda sedikit tentang kode kesalahan dan jenis permintaan yang mereka catat saat menangkap Registri atau aktivitas sistem file. Tautan ke versi on-line artikel ini, yang baru saja tersedia, terletak di http://www.sysinternals.com/publ.htm.

KOLOM MAJALAH WINDOWS NT MEI SAYA

Pernahkah Anda bertanya-tanya bagaimana Windows NT/2000 mengatur konten Registri dalam memori atau di disk? Edisi Windows NT Magazine saat ini (Mei) mencakup kolom saya, "Inside the Registry", yang memberi tahu Anda ini dan banyak lagi. Misalnya, pelajari bagaimana subsistem mode kernel Configuration Manager (subsistem yang bertanggung jawab untuk mengelola Registri) mencari kunci, menyimpan data nilai, mengoptimalkan pencarian, dan melindungi integritas file registri di disk. Windows NT Magazine, http://www.winntmag.com, tersedia di Borders dan Barnes dan Nobles.

HAL-HAL YANG TIDAK BEGITU BARU

Tidak lama setelah Windows 2000 Beta 2 dirilis, saya mengambil build Checked (debug) dari file gambar kernel (ntoskrnl.exe), melakukan pencarian string pada kernel, dan datang dengan daftar nama file sumber yang digunakan untuk membangun kernel. Build yang diperiksa dari kernel NT/2000 berisi banyak pernyataan Assert (pemeriksaan konsistensi) yang menyertakan nama file file tempat Assert berada. Dengan asumsi bahwa hampir setiap file signifikansi apa pun dalam sumber kernel akan memiliki setidaknya satu Pernyataan di dalamnya, daftarnya cukup komprehensif. Membuang daftar ke dalam skrip Java memberi saya tampilan pohon seperti Explorer yang bagus dari struktur direktori pohon sumber Windows 2000. Periksa di http://www.sysinternals.com/nt5src.htm.

BERITA INTERNAL

DR. SOPAN SANTUN GUI YANG MALANG

Dalam edisi Maret/April Microsoft Developer Network News Dr. GUI menanyai pertanyaan dari pembaca yang menanyakan bagaimana driver dapat mendefinisikan (memaksa untuk menggunakan CPU tertentu) utasnya. Dr. GUI menanggapi bahwa tidak ada cara untuk menentukan jumlah prosesor pada sistem dari driver, dan bahwa utas driver tidak dapat memberi tahu prosesor apa yang dijalankannya. Sayangnya, Dr. GUI meniup diagnosis ini (mungkin Dr. GUI harus menempel pada GUI).

Kernel NT (ntoskrnl.exe) mengekspor variabel bernama KeNumberProcessors yang ditentukan dalam NTDDK. H sebagai:

extern PCCHAR KeNumberProcessors;

Ini dapat langsung dirujuk dalam driver seperti ini:

CHAR    i;

for( i = 0; i < *KeNumberProcessors; i++ ) {

    // do processor specific stuff
}

Untuk menentukan prosesor mana yang menjalankan utas driver, gunakan KeGetCurrentProcessorNumber(), ekspor kernel lain yang tidak hanya ditentukan dalam NTDDK. H, tetapi sebenarnya didokumenkan dalam DDK!

Dr GUI meresepkan obat yang salah untuk gangguan ini, jadi saya dengan sopan membiarkan Dr. tahu melalui email yang sopan. Anehnya, Dr GUI bahkan tidak pernah mengakui email. Kita akan melihat apakah Dr yang baik mengambil hingga kesalahan dalam masalah berikutnya...

WINDEV '99 TIMUR

Edisi East Coast 1999 dari konferensi utama untuk pengembang Windows mendekati dengan cepat. WinDev '99 Timur berlangsung 14-18 Juni di Boston Cambridge Marriot. Sejumlah nama besar dalam pengembangan Windows berbicara, termasuk Jeff Richter, Jeff Prosise, dan Don Box. Aku akan berada di sana dengan Jamie Hanrahan dan Brian Catlin di jalur pengemudi perangkat. Presentasi saya mencakup tutorial sepanjang hari di internal NT, serta satu pada penulisan driver sistem file Windows NT/2K dan satu pada masalah pengembangan driver perangkat tingkat lanjut. Datang dan menyapa!

RILIS KARYA DRIVER NUMEGA SEGERA

Compuware NuMega Labs berada di ambang merilis kit pengembangan driver perangkat Windows 9x/NT/2K baru yang kuat, DriverStudio. DriverStudio menggabungkan semua alat driver perangkat NuMega yang ada, termasuk DriverAgent, DriverWorks, SoftICE, dan VtoolsD, dan menambahkan BoundsChecker baru untuk driver dan FieldAgent (hanya Windows NT/2K).

Versi driver perangkat BoundsChecker menyediakan pemantauan komprehensif dari setiap API kernel yang digunakan driver Anda, dan Anda dapat menggunakannya untuk memantau interaksi driver Anda dengan driver perangkat lain pada sistem. FieldAgent memungkinkan Anda menyebarkan versi driver BoundsChecker ke sistem klien sehingga klien dapat mengumpulkan jejak untuk Anda yang dapat Anda analisis. Segera setelah pembaruan gratis untuk pelanggan DriverStudio adalah TrueTime untuk driver, dan TrueCoverage untuk driver, alat yang memungkinkan Anda untuk dengan mudah menyetel performa dan cakupan menguji driver perangkat Anda.

Paket ini adalah kit pengembangan driver utama, dan saya sangat merekomendasikannya (saya berada di program Beta). Cari tahu lebih lanjut di http://www.numega.com.

BETA 3 DDK DIRILIS

Bersama dengan rilis Windows 2000 Beta 3, Microsoft telah menyediakan unduhan gratis Windows 2000 Beta 3 DDK (Device Driver Kit). Anda dapat mengambil DDK di http://www.microsoft.com/ddk/ddk2kb3.htm. Saya berharap bahwa SDK akan segera mengikuti, karena ada sejumlah API Win32 di Beta 3 yang tidak didokumentasikan pada MSDN edisi April.

SPINLOCK YANG DIANTREKAN WIN2K

Windows 2000 menggunakan jenis spinlock baru yang disebut "spinlock antrean" untuk kunci globalnya. Kunci global di Windows 2000 sama dengan yang untuk Windows NT 4.0, dan meliputi:

  • KiDispatcherLock: kunci database penjadwal
  • KiContext-SwapLock: kunci pertukaran tapak
  • MmPfnLock: kunci database bingkai halaman fisik
  • MmSystemSpaceLock: kunci ruang alamat mode kernel
  • CcMasterSpinLock: spinlock global Manajer Cache
  • CcVacbSpinLock: kunci array pemetaan Manajer Cache

Pada spinlock antrean uniprocessor bekerja persis seperti spinlock normal. Namun, pada build multiproscessor NT, spinlock yang diantrekan secara signifikan berbeda. Seperti spinlock standar, spinlock yang diantrekan diimplementasikan dalam HAL. Kernel memanggil fungsi KeAcquireQueuedSpinlock HAL untuk memperoleh spinlock yang diantrekan, dan memanggil KeReleaseQueuedSpinlock untuk melepaskan spinlock yang diantrekan. KeAcquireSpinlock dan KeReleaseSpinlock, HAL berfungsi yang digunakan kernel untuk memperoleh dan melepaskan spinlock standar, memerlukan alamat spinlock yang ditentukan sebagai parameter. Sebaliknya, fungsi spinlock yang diantrekan mengambil nomor indeks spinlock global. Kernel menginisialisasi spinlock global dalam array, di mana setiap spinlock memiliki nomor indeks yang telah ditentukan sebelumnya yang digunakan kernel untuk mengidentifikasinya ke HAL. Dengan demikian, spinlock antrean tidak dapat didefinisikan dan digunakan oleh driver perangkat, karena tidak ada cara untuk menambah array spinlock antrean global.

Di Windows 2000, setiap wilayah kontrol prosesor (PCR) dalam SMP (ada satu PCR untuk setiap prosesor) memiliki array dengan entri sebanyak mungkin di dalamnya karena ada spinlock yang diantrekan. Setiap entri array berisi dua bidang: penunjuk ke spinlock antrean yang sesuai dengan (bidang "spinlock"), dan bidang "antrean". Dalam deskripsi berikut, ketika saya merujuk ke bidang spinlock dan antrean, saya berbicara tentang bidang yang terkait dengan entri array untuk spinlock yang sedang diperoleh atau dirilis.

KeAcquireQueuedSpinlock berfungsi seperti ini: fungsi mencoba memperoleh spinlock dengan menggunakan instruksi CPU pertukaran yang saling terkunci untuk menempatkan alamat PCR prosesor saat ini di spinlock. Jika spinlock dipegang, fungsi memiliki, sebagai bagian dari operasi pertukaran, alamat PCR prosesor lain. Kemudian fungsi mengidentifikasi dirinya sebagai "menunggu" dengan mengalihkan bit rendah bidang spinlock di PCR-nya sendiri. Selanjutnya, ia menempatkan alamat PCR sendiri ke dalam bidang antrean PCR yang diambilnya dari spinlock. Akhirnya, ia menunggu dalam perulangan yang sibuk sampai bit rendah dialihkan di bidang spinlock-nya ketika bit mati maka prosesor saat ini telah diberikan spinlock dan sehingga kembali ke pemanggil fungsi akuisisi.

Setelah prosesor memperoleh spinlock antrean dan menyelesaikan pemrosesan yang ingin dilakukannya sambil menahan kunci, prosesor memanggil KeReleaseQueuedSpinlock. KeReleaseQueuedSpinlock melihat bidang antrean untuk spinlock yang ditentukan di PCR prosesor saat ini. Jika bidang antrean bukan nol, maka prosesor lain telah "mengantre" PCR-nya di sana. KeReleaseQueuedSpinlock membersihkan bit rendah bidang spinlock untuk PCR yang menunggu, dan kemudian membersihkan bidang antreannya sendiri dan mengembalikannya. Dengan membersihkan bit rendah di bidang spinlock PCR yang menunggu, ia baru saja memberi sinyal CPU berikutnya sejalan bahwa ia dapat memiliki kunci. Jika bidang antrean nol, maka tidak ada prosesor lain yang menunggu kunci dan KeReleaseQueuedSpinlock hanya melakukan operasi pertukaran yang saling mengunci untuk menghapus spinlock global.

Pengoperasian spinlock antrean adalah salah satu tempat prosesor "berbaris" menunggu spinlock yang dipegang. Setiap prosesor mengantre sendiri dengan memberi tahu yang di depannya sejalan bahwa prosesor sedang menunggu. Ini memberikan urutan deterministik untuk akuisisi prosesor spinlock yang diantrekan memperoleh spinlock dalam urutan yang mereka minta. Untuk spinlock standar tidak ada pemesanan seperti itu. Spinlock yang diantrekan memiliki keuntungan lain yang lebih signifikan. Saat prosesor berputar menunggu bidang spinlock-nya memiliki bit rendah dibersihkan, prosesor berputar pada memori privat ke prosesornya sendiri. Ketika prosesor sibuk menunggu spinlock standar, ia berputar pada spinlock global itu sendiri, yang dibagikan oleh semua prosesor. Dengan demikian, spinlock yang diantrekan memiliki karakteristik bus multiprosesor yang lebih baik karena tidak ada akses saluran cache bersama selama waktu tunggu yang sibuk. Selain itu, karena sifat antrean spinlock yang diantrekan, biasanya ada lebih sedikit operasi penguncian bus daripada untuk spinlock standar ketika kunci berada di bawah ketidakcocokan dari beberapa prosesor.

Spinlock yang diantrekan adalah salah satu dari beberapa peningkatan microsoft telah membuat skalabilitas multiproses Windows 2000.

APA YANG AKAN TERJADI

Windows 2000 mencakup banyak fitur yang membuatnya lebih tahan terhadap kesalahan operator dan aplikasi yang salah tingkah. Salah satunya adalah bahwa banyak DLL dan driver di bawah %systemroot%\system32 direktori dan %systemroot%\system32\drivers dilindungi oleh pengawas yang disebut System File Protector (SFP). Anda dapat memverifikasi keberadaannya dengan masuk ke system32 direktori tersebut dan mengganti nama ntoskrnl.exe. Pengawas akan membangunkan dan memberi tahu Anda bahwa itu terdeteksi merusak file sistem yang dilindungi dan memperbaikinya. Jika Anda memeriksa direktori lagi, Anda akan menemukan ntoskrnl.exe telah diganti secara ajaib. Lain kali aku akan memberitahumu cara kerjanya.


Terima kasih telah membaca Buletin Internal Sistem.

Diterbitkan Sabtu, 15 Mei 1999 19:15 PM oleh ottoh

[Arsip Buletin ^] [< Volume 1, Nomor 1] [Volume 1, Angka 3 >]