2014-04-30 85 views
0
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; 

} 

这是我作品的一些代码。为什么它失败SetFilePointer()?

我要读/写,直接设备(USB)

上的ReadFile()的情况下,它是成功的。

不过,我曾试图打电话给SetFilePointer

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

问题是什么?在我的代码

不久的CreateFile,ReadFile的是确定,但SetFilePointer和WriteFile失败

+0

什么是'设备',你从哪里得到它?你的代码看起来没有足够的相关性和干净。 –

+0

设备来自main() 请假设HANDLE参数有效。 我已经用ReadFile() – user1829967

+0

检查过这个值设备是一个驱动器? –

回答

0

当你直接访问你不能寻求职位在部门的中间磁盘设备。该位置必须始终是扇区长度的倍数。并且0x33不是您的部门长度的多个部分。

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

+0

哦谢谢,我会一直记住。 而且我需要你的帮助。 有时,CreateFile()GetLastError()返回32,这意味着ERROR_SHARING_VIOLATION 但任何进程不访问我的USB ...(我的意见) 我还额外编辑参数CreateFile?要不然? 只有我的应用程序接近我的USB(这是被禁止的) 而当我试图WriteFile时,我的USB更新以下我的代码。 但它导致中止app.How我可以调试我的程序吗?;;;;; – user1829967

+0

很难说。我倾向于相信Windows,并假设其他人正在访问该驱动器。 –

+0

好的Windows可以访问我的设备但是在应用程序级别上的 ,只有一个应用程序可以访问我的设备 – user1829967