ring3级下直接读写硬盘

转载 2007年10月08日 20:11:00

C代码

#include <windows.h>
#include 
<stdio.h>

#pragma comment(lib, "user32.lib");
#pragma comment(lib, "kernel32.lib");

const UINT uSectorSize  = 512 ;
const UINT uBegSector  = 0 ;
const UINT uSectorNum  = 1 ;

const UINT uReadSize  = uSectorSize * uSectorNum ;

BYTE bBuffer[uReadSize] 
= ...{0} ;
const char pDiskPath[] = "//./PHYSICALDRIVE0" ;

void ShowByteInform ( PBYTE pBuf, UINT uSize )
...{
  
for ( UINT i = 1 ; i <= uSize; i++ )
  
...{
    printf ( 
" %02X", pBuf[i-1] ) ;
    
if ( i % 16 == 0 )
      printf ( 
" " ) ;
    
else if ( i % 8 == 0 )
      printf ( 
" " ) ;
  }

}


int main()
...{
  HANDLE hDisk ;
  __try 
...{
    
    hDisk 
= CreateFile ( pDiskPath, GENERIC_READ, 
      FILE_SHARE_READ
|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 00 ) ;
    
if ( hDisk == INVALID_HANDLE_VALUE )
    
...{
      MessageBox ( 
0"磁盘打开错误!"00 ) ;
      
return 0;
    }

    
    SetFilePointer ( hDisk, uBegSector 
* uSectorSize, 0, FILE_BEGIN ) ;
    DWORD dwReadByte ;
    ReadFile ( hDisk, (LPVOID)bBuffer, uReadSize, 
&dwReadByte, NULL ) ;
    
if ( dwReadByte == 0 )
    
...{
      MessageBox ( 
0"磁盘读取错误!"00 ) ;
      
return 0;
    }

    
    ShowByteInform ( bBuffer, uReadSize ) ;
  }

  __finally 
...{
    CloseHandle ( hDisk ) ;
  }

  
return 0;
}

 

Delphi代码

 

program Project1;

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

...{$R *.RES}

const
  BytesPerSector 
=512;
  SectorCount 
=1;
  SectorStart 
=0;
  drive 
='/.PHYSICALDRIVE0';

var
  str :
string;
  p :pchar;
  i :Cardinal;
  hDeviceHandle :Thandle;

begin                        
  hDeviceHandle :
= CreateFile(drive, GENERIC_READ,
    FILE_SHARE_READ OR FILE_SHARE_WRITE, nil, OPEN_EXISTING,
00);
  
if (hDeviceHandle <> INVALID_HANDLE_VALUE) then
  begin
    p:
=allocmem(SectorCount*BytesPerSector);

    FileSeek(hDevicehandle,SectorStart
*BytesPerSector,0);
    
if FileRead(hDevicehandle,p[0],SectorCount*BytesPerSector)<>SectorCount*BytesPerSector then
       raise exception.create(
'读取错误');

    str:
='';
    
for i:=0 to 512-1 do
    begin
      
if i mod 16=0 then
      str:
=str+format('0x%.8x ',[i]);
      str:
=str+format('  %.2x',[integer(p[i])]);
      
if i mod 16=15 then
      str:
=str+#13#10;
    end;
    ShowMessage( str);

    freemem(p,SectorCount
*BytesPerSector);
    closehandle(hDeviceHandle);
  end;
end.
...{END}

 

linux2.6硬盘扇区直接读写程序

下面的程序可以在linux2.6内核直接读写硬盘的指定扇区,也是根据网上一个朋友的做法做了修改的;有两个不是很明白的地方就是:1、bd_claim函数的使用,这个是个递归函数,像是匹配内存指针和设备,...
  • mao0514
  • mao0514
  • 2015年04月29日 10:37
  • 2172

[Win32] 直接读写磁盘扇区(磁盘绝对读写)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: 正讲着驱动开发呢,这里突然插一篇Win32的博文,其实,还是做引子,上一篇博文“IRP与...
  • zuishikonghuan
  • zuishikonghuan
  • 2016年01月03日 16:31
  • 6507

特权级--ring0到ring3

内核要和用户程序分开,内核一定要安全,不能被用户程序干涉,但是有时候用户程序也需要读取内核的某些数据,怎么办呢?x86就引入了访问特权等级(0-3)的机制,x86 cpu共有4个特权级 level0 ...
  • bfboys
  • bfboys
  • 2016年09月03日 10:19
  • 152

利用Windows内置工具测试硬盘速度

用上了SSD一段时间,突然想测一下其读写速度。本来想下个第三方的软件什么的,原来发现Windows有内置的工具使用–WinSat,那自然是最好不过了。 操作步骤以管理员身份运行命令行程序,win+R–...
  • simple_the_best
  • simple_the_best
  • 2015年09月30日 10:59
  • 17528

特权级--ring3到ring0

还记得吗?我们用调用门和lcall指令实现特权级由低到高的转移. 假设我们想由代码A转移到代码B,运用一个调用门G,即调用门G中的目标选择子指向代码B的段。实际上我们要考虑4个要素:CPL、RPL、...
  • bfboys
  • bfboys
  • 2016年09月03日 10:19
  • 545

特权级--ring0到ring3

内核要和用户程序分开,内核一定要安全,不能被用户程序干涉,但是有时候用户程序也需要读取内核的某些数据,怎么办呢?x86就引入了访问特权等级(0-3)的机制,x86 cpu共有4个特权级 level0 ...
  • guocaigao
  • guocaigao
  • 2013年01月15日 11:21
  • 1887

Ring0和Ring3权限级

现在探讨内核程序和应用程序之间的本质区别。除了能用WDK编写内核程序和阅读一部分Windows的内核代码之外,我们还需要了解它们的本质是什么,它们和我们熟悉的应用程序有什么区别。   I...
  • liujiayu2
  • liujiayu2
  • 2015年05月27日 16:37
  • 1046

vc下读写硬盘的操作

vc下读写硬盘的操作,简单来说就是将硬盘当作是一个文件流来操作:下面是实现的函数: //drv 是盘符,一个字符,替换字符串“\\.\A:”中的字符A //startSector 是开始扇区号 //s...
  • xgx198831
  • xgx198831
  • 2015年05月22日 16:50
  • 1725

从进程到内核---ring3到ring0

这次我们用中断来实现从ring3到ring0的跳转,当我们用中断门实现从ring3到ring0的转移时,会从TSS加载ring0的堆栈STACKR0,然后将调用者ring3的ss、esp压入新堆栈ST...
  • guocaigao
  • guocaigao
  • 2013年10月10日 13:05
  • 3780

特权级--ring3到ring0

还记得吗?我们用调用门和lcall指令实现特权级由低到高的转移. 假设我们想由代码A转移到代码B,运用一个调用门G,即调用门G中的目标选择子指向代码B的段。实际上我们要考虑4个要素:CPL、RPL、D...
  • guocaigao
  • guocaigao
  • 2013年01月15日 17:29
  • 954
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ring3级下直接读写硬盘
举报原因:
原因补充:

(最多只允许输入30个字)