磁盘、SD卡、移动磁盘物理扇区读写
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PDWORD pdwNumBytes,
OVERLAPPED* pOverlapped);
各参数说明如下:
hfile:标识了你想访问的设备的句柄,由SetFilePointer()设置。
pvBuffer:指向用于读出设备数据的缓冲区。
nNumBytesToRead:告诉ReadFile要从设备中读出多少字节。
#include <iostream.h>
#include <string.h>
#include <afxwin.h>
#include <windows.h>
#include <iomanip.h>
void main(){
DWORD StartSector,BufferSize;
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile );
各参数说明如下:
lpFileName:所要访问的磁盘分区,格式为“\\.\X”。
dwDesiredAccess:写磁盘设置为GENERIC_WRITE,读磁盘设置为GENERIC_READ。
}
}
int a;
cout<<"按任意键结束"<<endl;
cin>>a;
}
dwFlagsAndAttributes读写磁盘均设置为0。
HTemplateFile:读写磁盘均设置为NULL。
通过CreateFile()打开的是整个磁盘逻辑分区,如果要操作该分区的某些扇区,还要通过SetFilePointer()函数以文件操作的方式把指针移到要操作的磁盘扇区开始处。
lDistanceToMove:指出要设置偏移量的低端部分。
lpDistanceToMoveHigh:指出要设置偏移量的高端部分。
dwMoveMethod:指出文件指针从何处开始移动,可能的选项有FILE_START(从文件开始)、FILE_END(从文件结尾)和FILE_CURRENT(从文件当前位置)。
for(DWORD i=1;i<513;i++){
cout << hex << (unsigned int)(unsigned char)buffer[i-1]<<" ";
if(i%16==0){
cout<<i-16<<'-'<<i-1<<"\n";
pdwNumByte:指定一个DWORD的地址,函数对该地址填写输入设备的成功的字节数。
pOverlapped:在进行同步I/O时应该是NULL。
WriteFile()函数原型如下:
BOOL WriteFile(
HANDLE hfile,
CONST VOID *pvBuffer,
nNumBytesToWrite:告诉WriteFile要写入设备多少字节。
pdwNumBytes:指定一个DWORD的地址,函数对该地址填写输出设备的成功的字节数。
pOverlapped:在进行同步I/O时应该是NULL。
下面是一段用VC编写的读取磁盘任意扇区的测试程序
DWORD nNumBytesToWrite,
PDWORD pdwNumBytes,
OVERLAPPED* pOverlapped);
参数与ReadFile()类似:
hfile:标识了你想访问的设备的句柄,由SetFilePointer()设置。
pvBuffer:指向用于写入设备的数据的缓冲区。
dwShareMode:读写磁盘均设置为FILE_SHARE_WRITE。
LpSecurityAttributes:读写磁盘均设置为NULL。
DwCreationDisposition:由于访问的是事实上已经存在的磁盘扇区,因此只能以OPEN_EXISTING标志设置dwCreationDisposition参数指出将要打开已经存在的文件(设备)。
char drivename[]="\\\\.\\A:";
char b;
cout<<"输入盘符(如'F盘'输入'F')"<<endl;
cin>>b;
drivename[4]=b;
cout<<"输入读取的扇区号"<<endl;
CreateFile()函数的原型如下:
HANDLE CreatFile(
LPCTSTR lpFileName,
DWord dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
Dword dwCreationDisposition,
cin>>StartSector;
BufferSize=BufferSize*512;
unsigned char buffer[512]={0};
HANDLE hDev=CreateFile(drivename,GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
磁盘、SD卡、移动磁盘物理扇区读写
在Windows下把所有的设备都当作文件进行操作,对磁盘的某个扇区读写,可以使用CreateFile()函数。这里不是用“DISK1”、“DISK2”等去标识某一个物理存在的硬盘,这里需要以一定的格式指定所需访问的磁盘分区。对于逻辑分区X,其格式为“\\.\X”。
SetFilePointer(hDev,StartSector*512,0,FILE_BEGIN);
DWORD dwCB;
ReadFile(hDev,buffer,512,&dwCB,0);
CloseHandle(hDev);
cout<<"扇区数据"<<endl;
SetFilePointer()函数原型如下:
DWORD SetFilePointer(
HANDLE hFile,
LONG lDistanceToMove,
PLONG lpDistanceToMoveHigh,
DWORD dwMoveMethod);
各参数说明如下:
hFile:CreatFile()函数返回的文件(设备)句柄。
在定位到要访问的扇区开始位置后就可以通过ReadFile()或WriteFile()函数实施相应的读写访问了,具体操作与文件读写并没有什么太大的差别。
ReadFile()函数原型如下:
BOOL ReadFile(
HANDLE hfile,
PVOID pvBuffer,
DWORD nNumBytesToRead,
OVERLAPPED* pOverlapped);
各参数说明如下:
hfile:标识了你想访问的设备的句柄,由SetFilePointer()设置。
pvBuffer:指向用于读出设备数据的缓冲区。
nNumBytesToRead:告诉ReadFile要从设备中读出多少字节。
#include <iostream.h>
#include <string.h>
#include <afxwin.h>
#include <windows.h>
#include <iomanip.h>
void main(){
DWORD StartSector,BufferSize;
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile );
各参数说明如下:
lpFileName:所要访问的磁盘分区,格式为“\\.\X”。
dwDesiredAccess:写磁盘设置为GENERIC_WRITE,读磁盘设置为GENERIC_READ。
}
}
int a;
cout<<"按任意键结束"<<endl;
cin>>a;
}
dwFlagsAndAttributes读写磁盘均设置为0。
HTemplateFile:读写磁盘均设置为NULL。
通过CreateFile()打开的是整个磁盘逻辑分区,如果要操作该分区的某些扇区,还要通过SetFilePointer()函数以文件操作的方式把指针移到要操作的磁盘扇区开始处。
lDistanceToMove:指出要设置偏移量的低端部分。
lpDistanceToMoveHigh:指出要设置偏移量的高端部分。
dwMoveMethod:指出文件指针从何处开始移动,可能的选项有FILE_START(从文件开始)、FILE_END(从文件结尾)和FILE_CURRENT(从文件当前位置)。
for(DWORD i=1;i<513;i++){
cout << hex << (unsigned int)(unsigned char)buffer[i-1]<<" ";
if(i%16==0){
cout<<i-16<<'-'<<i-1<<"\n";
pdwNumByte:指定一个DWORD的地址,函数对该地址填写输入设备的成功的字节数。
pOverlapped:在进行同步I/O时应该是NULL。
WriteFile()函数原型如下:
BOOL WriteFile(
HANDLE hfile,
CONST VOID *pvBuffer,
nNumBytesToWrite:告诉WriteFile要写入设备多少字节。
pdwNumBytes:指定一个DWORD的地址,函数对该地址填写输出设备的成功的字节数。
pOverlapped:在进行同步I/O时应该是NULL。
下面是一段用VC编写的读取磁盘任意扇区的测试程序
DWORD nNumBytesToWrite,
PDWORD pdwNumBytes,
OVERLAPPED* pOverlapped);
参数与ReadFile()类似:
hfile:标识了你想访问的设备的句柄,由SetFilePointer()设置。
pvBuffer:指向用于写入设备的数据的缓冲区。
dwShareMode:读写磁盘均设置为FILE_SHARE_WRITE。
LpSecurityAttributes:读写磁盘均设置为NULL。
DwCreationDisposition:由于访问的是事实上已经存在的磁盘扇区,因此只能以OPEN_EXISTING标志设置dwCreationDisposition参数指出将要打开已经存在的文件(设备)。
char drivename[]="\\\\.\\A:";
char b;
cout<<"输入盘符(如'F盘'输入'F')"<<endl;
cin>>b;
drivename[4]=b;
cout<<"输入读取的扇区号"<<endl;
CreateFile()函数的原型如下:
HANDLE CreatFile(
LPCTSTR lpFileName,
DWord dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
Dword dwCreationDisposition,
cin>>StartSector;
BufferSize=BufferSize*512;
unsigned char buffer[512]={0};
HANDLE hDev=CreateFile(drivename,GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
磁盘、SD卡、移动磁盘物理扇区读写
在Windows下把所有的设备都当作文件进行操作,对磁盘的某个扇区读写,可以使用CreateFile()函数。这里不是用“DISK1”、“DISK2”等去标识某一个物理存在的硬盘,这里需要以一定的格式指定所需访问的磁盘分区。对于逻辑分区X,其格式为“\\.\X”。
SetFilePointer(hDev,StartSector*512,0,FILE_BEGIN);
DWORD dwCB;
ReadFile(hDev,buffer,512,&dwCB,0);
CloseHandle(hDev);
cout<<"扇区数据"<<endl;
SetFilePointer()函数原型如下:
DWORD SetFilePointer(
HANDLE hFile,
LONG lDistanceToMove,
PLONG lpDistanceToMoveHigh,
DWORD dwMoveMethod);
各参数说明如下:
hFile:CreatFile()函数返回的文件(设备)句柄。
在定位到要访问的扇区开始位置后就可以通过ReadFile()或WriteFile()函数实施相应的读写访问了,具体操作与文件读写并没有什么太大的差别。
ReadFile()函数原型如下:
BOOL ReadFile(
HANDLE hfile,
PVOID pvBuffer,
DWORD nNumBytesToRead,