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}

 

【收藏】ring3级下直接读写硬盘

 C代码#include windows.h>#include stdio.h>#pragma comment(lib, "user32.lib");#pragma comment(lib, "ker...
  • mr_yanfei
  • mr_yanfei
  • 2007-08-14 14:16:00
  • 912

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

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

特权级--ring3到ring0

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

VC编程在Windows下直接读写磁盘扇区数据

  • 2010年03月27日 21:37
  • 147KB
  • 下载

揭秘Windows内核——如何利用自定义驱动程序在Ring3做Ring0的勾当!

最近在做图像处理(其实是利用摄像机采回来的Image进行分析,从而得到目标的运动信息),既然是图像处理那就得有图像Source,没错那就是Camera,实验室的这个Camera还挺高级的,是千兆以太网...
  • LnTigerLn
  • LnTigerLn
  • 2012-05-30 05:55:43
  • 1854

通过文件的方式对硬盘扇区进行直接读写操作

CreateFile("\\\\.\\Physicaldrive0",GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0); 功能:让物理磁盘0以文件...
  • u011164819
  • u011164819
  • 2016-07-22 11:37:37
  • 2667

【转】ring3 CPU指令级别--操作内核的一些系统级别工具

RING3   什么是RING3?这得从CPU指令系统(用于控制CPU完成各种功能的命令)的特权级别说起。在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如...
  • autumn20080101
  • autumn20080101
  • 2012-10-07 21:22:20
  • 1029

一个汇编与VC结合的程序

  • 2002年10月14日 00:00
  • 3KB
  • 下载

内核编程:保护模式下读取磁盘绝对扇区

在实模式下,可通过13号BIOS中断读取磁盘扇区。但保护模式下,中断方式发生改变。中断处理程序的段基址通过IDT表中的描述符得到,而非实模式下的中断向量表。故保护模式下,已无法使用实模式下的中断处理程...
  • prstat
  • prstat
  • 2008-05-25 19:18:00
  • 1595

使用createfile window下读写硬盘数据

CreateFile( "\\\\.\\PhysicalDrive1", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_EXISTIN...
  • lin415804
  • lin415804
  • 2012-11-28 22:23:12
  • 1120
收藏助手
不良信息举报
您举报文章:ring3级下直接读写硬盘
举报原因:
原因补充:

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