2011-03-17 36 views
6

試一試吧:CreateFile如何使用FILE_SHARE_READ失敗併成功使用FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE?

創建一個XLS文件,在Excel中打開它。

打開sysinternals進程監視器,並觀察當您在資源管理器中創建XLS文件副本時發生的情況(只需點擊ctrl-c ctrl-v)。

連續撥打::CreateProcess的兩個電話。第一個電話要求讀取權限,並且拒絕Access。第二次調用請求讀取加寫入加上刪除和傳遞。

這是正常的嗎?

回答

11

如果您使用FILE_SHARE_READ打開文件,則表示您願意共享此文件的訪問權限,但僅限於讀取。

如果你打開所有的標誌,你願意共享訪問也寫/刪除。

FILE_SHARE_READFILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE

更具限制性如果某些其它過程(EXCEL)具有該文件打開例如寫入(並且設置了共享標誌),您可以訪問它的唯一方法是接受共享以進行寫入。

3

您必須使用兼容的共享模式。如果Excel使用FILE_SHARE_READ |打開文件FILE_SHARE_WRITE然後後續嘗試打開文件必須至少使用相同的標誌。具體來自MSDN documentation on CreateFile

您無法請求與具有打開句柄的現有請求中指定的訪問模式衝突的共享模式。 CreateFile將失敗,GetLastError函數將返回ERROR_SHARING_VIOLATION。

相關問題