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

四彩 发布于 2013/02/25 00:17
阅读 1K+
收藏 0

Win7 64位,4G的U盘,FAT32格式。

用管理员权限运行的,WriteFile函数只能对U盘的第一个扇区写,1 号扇区开始就出现错误5(即权限不够)。为啥?如果是权限不够,为啥 0扇区能写?还需要啥权限?

ReadFile函数没有障碍,能读到最后一个扇区。

焦头烂额中。。。不知几点能睡了。

加载中
0
四彩

@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;
}
0
z
zhongxh
好像是没有加权限
0
seatrix
seatrix

http://blog.csdn.net/vbvcde/article/details/7699317

破解 VISTA & WIN7对直接磁盘写入的防护  win7 磁盘不可写  win7磁盘被写保护 win7磁盘写保护  

win7 写物理硬盘扇区 win7 写物理扇区 win7 写物理硬盘

VISTA & WIN7对直接磁盘写入的防护

在VISTA 和WINDOWS 7的NTFS驱动中,对直接写入磁盘分区做了限制,RING3无法直接写入"受保护"的磁盘分区


返回顶部
顶部