程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用DELPHI實現NT環境下的絕對磁盤讀寫

用DELPHI實現NT環境下的絕對磁盤讀寫

編輯:Delphi

  了解實模式編程的朋友都知道,可以利用BiOS的INT 13中斷來進行磁盤的絕對讀寫,但在NT環境下,卻不能使用INT 13中斷來直接讀寫硬盤.在這裡,我們可以利用CreateFile並將路徑名設為".X:"來打開邏輯盤,並進行讀寫.在進裡X為盤符.

  CreateFile函數原型如下:
  HANDLE CreateFile(LPCTSTR lpFileName, DWord dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWord dwFlagsAndAttributes, HANDLE hTemplateFile);
  lpFileName: 要打開的文件的名字
  dwDesiredAccess: 如果為 GENERIC_READ 表示允許對設備進行讀訪問;如果為 GENERIC_WRITE 表示允許對設備進行寫訪問(可組合使用);如果為零,表示只允許獲取與一個設備有關的信息.
  dwShareMode: 零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允許對文件進行共享訪問
  lpSecurityAttributes: 指向一個SECURITY_ATTRIBUTES結構的指針,定義了文件的安全特性
  dwCreationDistribution: 建立方式
  dwFlagsAndAttributes: 其它屬性
  hTemplateFile: 如果不為零,則指定一個文件句柄。新文件將從這個文件中復制擴展屬性

  
  下面的例子在Windows XP下編譯通過, 其實現的功能為讀取C盤的引導扇區,並將讀出的數據顯示出來.

  program ReadDisk;

  
  uses
    SysUtils,
    Windows;

  var
    Buf: array [0..511] of Byte;     //數據緩沖區
    ShowText, TmpStr: string;
    FileHandle: THandle;          
    ReadCount, i: Cardinal;
  begin
    //打開磁盤
    FileHandle := CreateFile('.C:', GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE,
      nil, OPEN_EXISTING, 0, 0);
    if FileHandle = INVALID_HANDLE_VALUE then
    begin
      MessageBox(GetDesktopWindow, '打開磁盤失敗', 'ERROR', MB_OK);
      ExitProcess(0);
    end;
    //讀出引導扇區數據
    if ReadFile(FileHandle, Buf, 512, ReadCount, nil) then
    begin
      SetLength(ShowText, Length(Buf) * 3);
      //將數據轉為字串
      for i := Low(Buf) to High(Buf) do
      begin
        TmpStr := Format('%2.2x ', [Buf[i]]);
        CopyMemory(@ShowText[i*3+1], @TmpStr[1], 3);
      end;
    end;
    MessageBox(GetDesktopWindow, PChar(ShowText), '引導扇區', MB_OK);
    CloseHandle(FileHandle);
    ExitProcess(0);
  end.
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved