Teman yang mengetahui pemrograman mode nyata tahu bahwa Anda dapat menggunakan interupsi INT 13 pada BIOS untuk melakukan pembacaan dan penulisan disk secara absolut, tetapi di lingkungan NT, Anda tidak dapat menggunakan interupsi INT 13 untuk membaca dan menulis hard disk secara langsung. Di sini, kita dapat menggunakan CreateFile dan Tetapkan nama jalur ke "//./X:" untuk membuka disk logis dan melakukan pembacaan dan penulisan X adalah huruf drive.
Prototipe fungsi CreateFile adalah sebagai berikut:
MENANGANI CreateFile(LPCTSTR lpFileName, DWord dwDesiredaccess, DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
lpFileName: Nama file yang akan dibuka
dwDesiredAccess: Jika GENERIC_READ berarti akses baca ke perangkat diperbolehkan; jika GENERIC_WRITE berarti akses tulis ke perangkat diperbolehkan (dapat digunakan secara kombinasi); informasi yang berkaitan dengan satu perangkat diperbolehkan untuk diperoleh.
dwShareMode: Nol berarti tidak boleh berbagi FILE_SHARE_READ dan/atau FILE_SHARE_WRITE berarti akses bersama ke file diperbolehkan
lpSecurityAttributes: Penunjuk ke struktur SECURITY_ATTRIBUTES yang mendefinisikan atribut keamanan file
dwCreationDistribution: Metode pembuatan
dwFlagsAndAttributes: Atribut lainnya
hTemplateFile: Jika bukan nol, tentukan pegangan file. File baru akan menyalin atribut yang diperluas dari file ini
Contoh berikut dikompilasi dan diteruskan pada Windows xp. Fungsi yang diterapkan adalah membaca sektor boot drive C dan menampilkan data yang dibaca.
Disk Baca Program;
kegunaan
sistemUtils,
jendela;
var
Buf: array [0..511] dari Byte; //penyangga data
TampilkanTeks, TmpStr: string;
Pegangan File: Pegangan;
ReadCount, i: Kardinal;
mulai
//Buka disk
FileHandle := CreateFile('//./C:', GENERIC_READ, FILE_SHARE_READ atau FILE_SHARE_WRITE,
nihil, OPEN_EXISTING, 0, 0);
jika FileHandle = INVALID_HANDLE_VALUE maka
mulai
MessageBox(GetDesktopWindow, 'Gagal membuka disk', 'ERROR', MB_OK);
Proses Keluar(0);
akhir;
//Baca data sektor boot
jika ReadFile(FileHandle, Buf, 512, ReadCount, nihil) lalu
mulai
SetLength(ShowText, Panjang(Buf) * 3);
//Mengonversi data menjadi string
untuk i := Rendah(Buf) ke Tinggi(Buf) lakukan
mulai
TmpStr := Format('%2.2x ', [Buf[i]]);
SalinMemori(@ShowText[i*3+1], @TmpStr[1], 3);
akhir;
akhir;
MessageBox(GetDesktopWindow, PChar(ShowText), 'Sektor Boot', MB_OK);
CloseHandle(FileHandle);
Proses Keluar(0);
akhir.