ProcMon和CreateFile处理选项之间的对应关系

vkr*_*rzv 9 windows winapi sysinternals

Process Monitor将CreateFile操作的处置选项显示为"Open","OpenIf","Overwrite","OverwriteIf"(可能是其他内容).包含"If"的选项与不包含的选项有何不同?它们对应哪个CreateFile WinAPI函数'dwCreationDisposition'标志?

Han*_*ant 10

CreateFile()是winapi函数.然而,Process Monitor会对本机操作系统进行修补,它只会传递类似于winapi的内容.它与DMS Cutler在DEC工作时设计的操作系统VMS非常相似.Process Monitor挂钩NtCreateFile(),按照链接查看记录的CreateDisposition参数值.复制:

  • FILE_SUPERSEDE.如果文件已存在,请将其替换为给定文件.如果没有,请创建给定文件.
  • FILE_CREATE.如果该文件已存在,请求失败,不要创建或打开给定文件.如果没有,请创建给定文件.
  • FILE_OPEN.如果该文件已存在,请将其打开,而不是创建新文件.如果没有,请求失败并且不创建新文件.
  • FILE_OPEN_IF.如果该文件已存在,请将其打开.如果没有,请创建给定文件.
  • FILE_OVERWRITE.如果该文件已存在,请将其打开并覆盖它.如果没有,请求失败.
  • FILE_OVERWRITE_IF.如果该文件已存在,请将其打开并覆盖它.如果没有,请创建给定文件.


Ian*_*oyd 5

| CreateFile            | NtCreateFile          | Process Monitor |
| dwCreationDisposition | CreateDisposition     | Disposition     |
|-----------------------|-----------------------|-----------------|
| n/a                   | FILE_SUPERSEDE (0)    | Supersede (?)   |
| OPEN_EXISTING (3)     | FILE_OPEN (1)         | Open            |
| TRUNCATE_EXISTING (5) | FILE_OPEN (1)         | Open            |
| CREATE_NEW (1)        | FILE_CREATE (2)       | Create          |
| OPEN_ALWAYS (4)       | FILE_OPEN_IF (3)      | OpenIf          |
| n/a                   | FILE_OVERWRITE (4)    | Overwrite (?)   |
| CREATE_ALWAYS (2)     | FILE_OVERWRITE_IF (5) | OverwriteIf     |
Run Code Online (Sandbox Code Playgroud)