簡體   English   中英

了解 fasm 中的 ERROR_SHARING_VIOLATION x86

[英]Understanding ERROR_SHARING_VIOLATION in fasm x86

據我了解,如果共享模式設置為 0,我將無法再次打開該文件。

默認情況下,我將其設置為 3,但即使將其設置為 2 ( FILE_SHARE_WRITE ) 也會輸出相同的錯誤。

所以這讓我認為參數是正確的。

數據:

FileName:
 db 'testWriteFile.txt',0

代碼:

    //create file
    push 0 // hTemplateFile null
    push 80 //dwFlagsAndAttributes 'FILE_ATTRIBUTE_NORMAL'
    push 4  // dwCreationDisposition OPEN_ALWAYS
    push 0 // lpSecurityAttributes null
    push 3 // dwShareMode FILE_SHARE_READ | FILE_SHARE_WRITE -> allow other programs to read and write
    push C // dwDesiredAccess GENERIC_WRITE
    push FileName //lpFileName
    call CreateFileA

    call GetLastError

可能是什么原因?

編輯:CreateFIleA 參考https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea

 push 0 // hTemplateFile null push 80 //dwFlagsAndAttributes 'FILE_ATTRIBUTE_NORMAL' push 4 // dwCreationDisposition OPEN_ALWAYS push 0 // lpSecurityAttributes null push 3 // dwShareMode FILE_SHARE_READ | FILE_SHARE_WRITE -> allow other programs to read and write push C // dwDesiredAccess GENERIC_WRITE push FileName //lpFileName call CreateFileA

您推送的值是十六進制數。 您必須 append 一個合適的詞綴才能獲得這些。

  • FILE_ATTRIBUTE_NORMAL 常量是 00000080h。
  • OPEN_ALWAYS 常量是 00000004h。
  • FILE_SHARE_READ 和 FILE_SHARE_WRITE 常量是 00000001h 和 00000002h。 所以要設置兩者都使用 00000003h。
  • GENERIC_READ 和 GENERIC_WRITE 常量分別為 80000000h 和 40000000h。 所以要設置兩者都使用 0C0000000h。
    push 0          // hTemplateFile null
    push 80h        // dwFlagsAndAttributes FILE_ATTRIBUTE_NORMAL
    push 4          // dwCreationDisposition OPEN_ALWAYS
    push 0          // lpSecurityAttributes null
    push 3          // dwShareMode FILE_SHARE_READ | FILE_SHARE_WRITE
    push 0C0000000h // dwDesiredAccess GENERIC_READ | GENERIC_WRITE
    push FileName   // lpFileName
    call CreateFileA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM