在Windows中读取硬盘

今天太无聊了,突然想直接使用C语言读取硬盘看看,看了下网上有使用biosdisk函数的,但是Windows下这个函数已经没有了(VS2005),后来在这个地方(http://www.cqzol.com/programming/c/200803/81345.html)找到了一个方法,利用CreateFile和ReadFile函数来操作。(WriteFile可以直接写扇区,太危险,我就不实验了)。利用他所讲到的方法,我写了如下程序:

 

#include <stdio.h> #include <windows.h> int main(int argc, char *argv[]) { char buffer[512]; char dev[] = "////.//C:";//"boot.bin";// int cb; BOOL ret; int i, j; HANDLE hDev = CreateFile(dev, GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDev == INVALID_HANDLE_VALUE) { printf("Error./n"); exit(0); } //SetFilePointer(hDev, 0, 0, FILE_BEGIN); ret = ReadFile(hDev, buffer, 512, &cb, NULL); CloseHandle(hDev); if ( 0 == ret) { printf("Error 2./n"); exit(0); } if (512 != cb) { printf("Error 3./n"); exit(0); } printf("Hello, world %d/n", cb); printf("%10s 0 1 2 3 4 5 6 7 8 9 a b c d e f /n", " "); for (i=0 ;i<32 ;i++ ) { printf("%.8Xh: ", i); for (j=0 ;j<16 ;j++ ) { printf("%.2x ", buffer[i*16 + j] & 0xFF); } printf("/n"); } return 0; }

 

dev变量表示逻辑磁盘号(如果换成具体的文件名就成了对文件的操作了,比如我注释掉的boot.bin是《自己动手写操作系统》那本书的第一个asm程序用NASM编译出来引导程序)。

例子中是对C盘的头512个字节进行读取,其结果为:

 

在Windows中读取硬盘_第1张图片

然后对于boot.bin的结果是:

在Windows中读取硬盘_第2张图片


这512个字节我使用UltraEdit查看也是这样,可见是没有问题的。

 

WriteFile跟ReadFile类似,不要轻易用在对硬盘的操作上。

你可能感兴趣的:(windows,File,null,buffer,语言,磁盘)