开发者社区> 问答> 正文

用 WriteFile 写U盘扇区,为啥只能写第一个扇区?:报错

Win7 64位,4G的U盘,FAT32格式。
用管理员权限运行的,WriteFile函数只能对U盘的第一个扇区写,1 号扇区开始就出现错误5(即权限不够)。为啥?如果是权限不够,为啥 0扇区能写?还需要啥权限?
ReadFile函数没有障碍,能读到最后一个扇区。
焦头烂额中。。。不知几点能睡了。

展开
收起
kun坤 2020-06-09 12:01:39 762 0
1 条回答
写回答
取消 提交回答
  • 代码?###### @zhongxh

    /* 写扇区  * 参数:buff 待写数据(最大512字节),iDriver 驱动器号,iSector 扇区号  * 返回值:实际写入的字节数(0 为未成功写入)  */ int WriteSector(unsigned char *buff, int iDriver, unsigned long iSector) {     char DriverName[MAX_PATH];     DWORD iTemp, iWrite = 0;     HANDLE hFile;     LARGE_INTEGER iOffset;

        if(buff != NULL)     {         sprintf(DriverName, "\\.\PhysicalDrive%d", iDriver);         hFile = CreateFile(DriverName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);         if(hFile != INVALID_HANDLE_VALUE)         {             iOffset.QuadPart = (long long)iSector*SECTOR_SIZE;             SetFilePointer(hFile, iOffset.LowPart, &iOffset.HighPart, FILE_BEGIN);             DeviceIoControl(hFile, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &iTemp, (LPOVERLAPPED)NULL);             WriteFile(hFile, buff, SECTOR_SIZE, &iWrite, NULL); DeviceIoControl(hFile, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &iTemp, (LPOVERLAPPED)NULL);             CloseHandle(hFile);         }     }     return iWrite; }

    ######好像是没有加权限###### http://blog.csdn.net/vbvcde/article/details/7699317

    破解 VISTA & WIN7对直接磁盘写入的防护  win7 磁盘不可写  win7磁盘被写保护 win7磁盘写保护  
    win7 写物理硬盘扇区 win7 写物理扇区 win7 写物理硬盘
    VISTA & WIN7对直接磁盘写入的防护 在VISTA 和WINDOWS 7的NTFS驱动中,对直接写入磁盘分区做了限制,RING3无法直接写入"受保护"的磁盘分区

    2020-06-09 15:33:29
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载