如何解决如何写入 SD 卡的扇区 0 (MBR)? 视窗
我想将数据写入 SD 卡的扇区 0 (MBR),而不是 SD 卡中的分区。 为此,我尝试打开 SD 卡的物理驱动器,成功了。 但是当我调用 WriteFile() 写入 SD 卡时,它返回错误 5 (ERROR_ACCESS_DENIED)。
以下是我使用的示例代码。 有人可以帮我解决我在这段代码中遗漏的问题吗? (我也试过在管理员模式下执行这段代码,但没有成功。)
int sd_card_open(char *drive_name)
{
char dev_name[64];
BOOL bResult;
HANDLE hDevice;
DWORD BytesReturned;
VOLUME_DISK_EXTENTS vde;
// drive_name example : "D:"
sprintf(dev_name,"\\\\.\\%s",drive_name);
hDevice = CreateFile(dev_name,// Drive to open
GENERIC_READ | GENERIC_WRITE,// Access to the drive
FILE_SHARE_READ | FILE_SHARE_WRITE,// Share mode
NULL,// Security
OPEN_EXISTING,// Disposition
0,// no file attributes
NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
printf("Can't open the drive %s (err = %d).\n",drive_name,GetLastError());
return(-1);
}
bResult = DeviceIoControl(hDevice,IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,NULL,&vde,sizeof(vde),&BytesReturned,NULL);
if (!bResult) {
printf("Failed to get physical disk name (err = %d).\n",GetLastError());
return(-1);
}
CloseHandle(hDevice);
sprintf(dev_name,"\\\\.\\PhysicalDrive%d",vde.Extents[0].DiskNumber);
hDevice = CreateFile(dev_name,// no file attributes
NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
printf("Can't open the disk %s (err = %d).\n",dev_name,FSCTL_LOCK_VOLUME,NULL);
if (!bResult) {
printf("Failed to lock volume (err = %d).\n",FSCTL_DISMOUNT_VOLUME,NULL);
if (!bResult) {
printf("Failed to dismount volume (err = %d).\n",GetLastError());
return(-1);
}
return(0);
}
int sd_card_write(unsigned int sec,unsigned int num_secs,unsigned char *buf)
{
LARGE_INTEGER pos;
DWORD cnt,wcnt;
BOOL bResult;
pos.QuadPart = ((LONGLONG) sec) << 9; // assume 512-byte sector
cnt = ((DWORD) num_secs) << 9;
bResult = SetFilePointerEx(hDevice,pos,FILE_BEGIN);
if (!bResult) {
printf("SetFilePointerEx() failed (err = %d).\n",GetLastError());
return(-1);
}
bResult = WriteFile(hDevice,buf,cnt,&wcnt,NULL);
if (!bResult || cnt != wcnt) {
printf("WriteFile() failed (err = %d).\n",GetLastError());
return(-1);
}
return(0);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。