社区
C++ 语言
帖子详情
各位大虾帮忙啊!!怎样用VC++读取windows系统FAT表?
huandieshang
2009-05-03 05:59:46
本人只是编程的初学者,大家说的能详细点么。。。求。。。。
...全文
70
2
打赏
收藏
各位大虾帮忙啊!!怎样用VC++读取windows系统FAT表?
本人只是编程的初学者,大家说的能详细点么。。。求。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wuyu637
2009-05-03
打赏
举报
回复
#include <windows.h>
#include <conio.h>
#include <tchar.h>
#include <winioctl.h>
VOID __cdecl _tmain(
INT Argc,
PTCHAR Argv[]
)
{
TCHAR szName[MAX_PATH] = { 0 };
HANDLE hDisk;
//
// Validate the parameters
//
if (Argc != 3) {
_tprintf(_T("Reads a sector on the disk\n\n"));
_tprintf(_T("%s [disk number] [sector]\n"), Argv[0]);
return;
}
_sntprintf(szName, sizeof(szName) / sizeof(szName[0]) - 1, _T("\\\\.\\Physicaldrive%d"), _ttoi(Argv[1]));
//
// Open a handle to the disk
//
hDisk = CreateFile(szName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
NULL,
0);
if (hDisk != INVALID_HANDLE_VALUE) {
DISK_GEOMETRY diskGeometry;
DWORD dwBytes;
//
// Obtain the layout of this disk
//
if (DeviceIoControl(hDisk,
IOCTL_DISK_GET_DRIVE_GEOMETRY,
NULL,
0,
&diskGeometry,
sizeof(DISK_GEOMETRY),
&dwBytes,
NULL)) {
DWORD dwSize = diskGeometry.BytesPerSector;
PVOID lpBuffer = new BYTE [dwSize];
if (lpBuffer) {
PARTITION_INFORMATION partitionInfo;
//
// Obtain the size of this disk
//
if (DeviceIoControl(hDisk,
IOCTL_DISK_GET_PARTITION_INFO,
NULL,
0,
&partitionInfo,
sizeof(PARTITION_INFORMATION),
&dwBytes,
NULL)) {
LONGLONG sectorCount = partitionInfo.PartitionLength.QuadPart / diskGeometry.BytesPerSector;
LONGLONG nIndex = _ttoi64(Argv[2]);
_tprintf(_T("Disk %d has 0x%I64x sectors with 0x%x bytes in every sector\n"), _ttoi(Argv[1]), sectorCount, diskGeometry.BytesPerSector);
//
// Read in the requested sector
//
if (nIndex < sectorCount) {
LARGE_INTEGER offset;
offset.QuadPart = (nIndex) * diskGeometry.BytesPerSector;
SetFilePointer(hDisk, offset.LowPart, &offset.HighPart, FILE_BEGIN);
if (ReadFile(hDisk, lpBuffer, dwSize, &dwBytes, NULL))
{
for (ULONG nOffset = 0; nOffset < dwBytes; nOffset += 0x10)
{ ULONG nBytes, nIdx;
_tprintf(_T("%011I64x "), (offset.QuadPart) + nOffset);
//
// Display the data in hexadecimal
//
nBytes = min(0x10, dwBytes - nOffset);
for (nIdx = 0; nIdx < nBytes; nIdx++) {
_tprintf(_T("%02x %s"), ((PUCHAR)lpBuffer)[nOffset + nIdx], ((nIdx + 1) % 0x8) ? _T("") : _T(" "));
}
for ( ; nIdx < 0x10; nIdx++) {
_tprintf(_T(" %s"), ((nIdx + 1) % 0x8) ? _T("") : _T(" "));
}
for (nIdx = 0; nIdx < nBytes; nIdx++) {
_tprintf(_T("%c"), isprint(((PUCHAR)lpBuffer)[nOffset + nIdx]) ? ((PUCHAR)lpBuffer)[nOffset + nIdx] : _T('.'));
}
_tprintf(_T("\n"));
}
} else {
_tprintf(_T("ReadFile() on sector 0x%I64x failed with error code: %d\n"), nIndex, GetLastError());
}
} else {
_tprintf(_T("The requested sector is out-of-bounds\n"));
}
} else {
_tprintf(_T("IOCTL_DISK_GET_PARTITION_INFO failed with error code %d\n"), GetLastError());
}
delete [] lpBuffer;
} else {
_tprintf(_T("Unable to allocate resources, exiting\n"));
}
} else {
_tprintf(_T("IOCTL_DISK_GET_DRIVE_GEOMETRY failed with error code %d\n"), GetLastError());
}
CloseHandle(hDisk);
} else {
_tprintf(_T("CreateFile() on %s failed with error code %d\n"), szName, GetLastError());
}
_tprintf(_T("\n"));
return;
}
Paradin
2009-05-03
打赏
举报
回复
不知。up
第一次碰到这样棘手的问题 像各位
大虾
求救,送分100点
博主借朋友的16M闪存,在自己电脑拷资料时出错。移动磁盘属性显示73K可用,文件夹属性显示100G,复制文件提示无法读源文件或磁盘,在
Windows
下无法完成格式化,磁盘分析显示为16位
FAT
文件格式,向大家求助。
Windows
容易中病毒么?
本文探讨了
Windows
与Linux操作
系统
在安全性方面的差异。分析了Linux由于其多用户权限管理和较少的恶意软件目标,使得其上网相对不易受到病毒感染。而对于
Windows
,由于用户常以管理员身份登录,这增加了被恶意软件攻击的风险。文章提出了通过使用低权限账户日常操作来提高
Windows
系统
的安全性。
系统
常识--格式化C盘及安装
Windows
…
本文详细介绍了如何使用
Windows
XP光盘进行
系统
安装,包括BIOS设置、格式化硬盘分区及安装过程等关键步骤。
linux文件传到c盘,我想把
windows
下的c盘和d盘在linux下挂载,用什么命令呢?
本文介绍如何在RedHat Linux
系统
中永久挂载
FAT
32格式的
Windows
分区,并提供详细的步骤指导,包括创建挂载点、编辑fstab文件等关键操作。
Minifilter _Word_加解密
本文介绍了如何使用Minifilter在
Windows
环境下对Word文档进行加解密,涉及加密解密代码、
Windows
驱动开发教程,以及在处理Word文件时需要注意的文件临时文件和重命名操作。同时提到了在NTFS和
FAT
32文件
系统
下实现加解密的基本成功,并分享了透明加解密的驱动源码。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章