Windows中的GENERIC_WRITE常量十六进制值是多少?

时间:2018-04-19 02:43:56

标签: windows assembly 64-bit

我正在尝试使用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

1 个答案:

答案 0 :(得分:3)

将评论转换为答案,以便关闭。

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

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

一般来说,你应该看看Windows'标头,以获取所有Windows常量的最终和最新值。这个在Winnt.h中。

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

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

然后你用

加载它
lea rcx, FD2

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

因此,一旦Windows返回句柄无效错误消息,Windows真的很有帮助。 (暗示)它告诉哪个参数是问题的根源,(大致)问题是什么。