NTRing3下使用CreateFile,ReadFile直接读取硬盘实例

本文展示了一个使用C语言编写的简单程序,该程序通过Windows API读取物理硬盘的特定扇区,并将读取到的数据以十六进制形式打印出来。程序首先尝试打开指定的物理硬盘,设置文件指针到起始扇区位置,然后读取指定数量的扇区数据。

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

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 ( "/n" ) ;
  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, 0, 0 ) ;
  if ( hDisk == INVALID_HANDLE_VALUE )
  {
   MessageBox ( 0, "磁盘打开错误!", 0, 0 ) ;
   return 0;
  }
  
  SetFilePointer ( hDisk, uBegSector * uSectorSize, 0, FILE_BEGIN ) ;
  DWORD dwReadByte ;
  ReadFile ( hDisk, (LPVOID)bBuffer, uReadSize, &dwReadByte, NULL ) ;
  if ( dwReadByte == 0 )
  {
   MessageBox ( 0, "磁盘读取错误!", 0, 0 ) ;
   return 0;
  }
  
  ShowByteInform ( bBuffer, uReadSize ) ;
 }
 __finally {
  CloseHandle ( hDisk ) ;
 }
 return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值