为什么它失败了SetFilePointer()?

时间:2014-04-30 07:41:10

标签: winapi

BOOL SetDeviceID(HANDLE device,char *id){//
    char data[2];
    data[0]=0x02;
    data[1]=0x27;

    DWORD dwPtr=SetFilePointer(device,0x33,//distance
                                NULL,//
                                FILE_BEGIN);
    if(dwPtr==INVALID_SET_FILE_POINTER) cout<<GetLastError()<<endl;
    BOOL result=WriteFile(device,data,2,NULL,NULL);
    //cout<<GetLastError()<<endl;

    if(result==false)cout<<"Fail WRITE    "<<endl;
    return TRUE;
}


HANDLE GetDeviceHandle(char *path){
    HANDLE handle= CreateFile(LPCSTR(path),
               GENERIC_ALL,//
               0,
               NULL,
               OPEN_EXISTING,
               NULL, 
               NULL);
    if(handle==INVALID_HANDLE_VALUE){
    cout<<"fail to createfile()"<<endl;
    exit(1);
    }
    else return handle;

}

这是我作品的一些代码。

我要直接读/写设备(usb)

在ReadFile()案例中,它成功了。

但是,我试图调用SetFilePointer

但是GetLastError返回87.这意味着输入无效

有什么问题?在我的代码上

很快,CreateFile,ReadFile没问题,但SetFilePointer和WriteFile失败

1 个答案:

答案 0 :(得分:0)

当您直接访问磁盘设备时,您无法在扇区中间寻找位置。该位置必须始终是扇区长度的倍数。并且0x33不是您所在行业的多长。

您需要做的是阅读整个部门。修改需要修改的字节。最后回写整个部门。