【问题标题】:What is the GENERIC_WRITE constant hex value in windows?Windows 中的 GENERIC_WRITE 常量十六进制值是什么?
【发布时间】:2018-04-19 02:43:55
【问题描述】:

我正在尝试使用 x64 程序集中的 CreatFileA 系统调用打开一个文件以进行写入,但是为此我需要指定所需的访问权限。我不知道 GENERIC_WRITE 的常量是什么,GENERIC_READ 常量是 80000000h。

; create the file
lea rcx, fileName
mov rdx, 40000000h
xor r8, r8
xor r9, r9
mov QWORD PTR [rsp+48h-28h], 2
mov QWORD PTR [rsp+48h-20h], 80h
mov QWORD PTR [rsp+48h-18h], 0
call CreateFileA
mov FD2, rax

; write to the new file
lea rcx, FD2
lea rdx, buffer
mov r8, len
lea r9, written
mov QWORD PTR [rsp+48h-28h], 0
call WriteFile
mov writeResult, rax

【问题讨论】:

标签: windows assembly 64-bit


【解决方案1】:

将 cmets 转换为答案,以便将其关闭。

正如迈克尔指出的那样,构成访问掩码的位定义为here

使用我们看到 GENERIC_READ 是 0x80000000 而 GENERIC_WRITE 是 0x40000000。

一般而言,您可能应该查看 Windows 的标头以获得所有 Windows 常量的确定和最新值。这个在 Winnt.h 中。

解决后续问题,您加载要传递给 WriteFile 的句柄的汇编代码不正确。您正在使用

保存从 CreateFile 返回的值
mov FD2, rax

然后你使用

加载它
lea rcx, FD2

lea 将返回指向句柄的指针,而不是句柄本身。

因此,这一次,Windows 在返回 句柄无效 错误消息时确实很有帮助。 (通过暗示)它告诉了哪个参数是问题的根源,以及(大致)问题是什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多