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

问题描述 投票:0回答:1

我正在尝试使用 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个回答
7
投票

将评论转化为答案,这样就可以结束了。

正如 Michael 指出的,构成访问掩码的位在here定义。

使用它我们可以看到 GENERIC_READ 是 0x80000000,GENERIC_WRITE 是 0x40000000。

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

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

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

但是然后你使用

将其加载回来
lea rcx, FD2

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

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

© www.soinside.com 2019 - 2024. All rights reserved.