2014-04-30 82 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