Winapi 如何在NSIS中本机访问内存缓冲区

Winapi 如何在NSIS中本机访问内存缓冲区,winapi,nsis,Winapi,Nsis,我正在使用 System::Alloc $Size pop $Buffer System::Call "Kernel32::ReadFile(i r0, i $Buffer, i $Size, t.,)" 但我不知道如何读取(或写入)$Buffer 有没有办法做到这一点(最好是本地的,但任何建议都将不胜感激) 谢谢 附加说明 我知道,但它只允许您写入缓冲区,并且只能从另一个缓冲区写入 (正在尝试System::Copy 1$Buffer“A”使可执行文件崩溃)内置NSIS函数FileRead/

我正在使用

System::Alloc $Size
pop $Buffer
System::Call "Kernel32::ReadFile(i r0, i $Buffer, i $Size, t.,)"
但我不知道如何读取(或写入)
$Buffer

有没有办法做到这一点(最好是本地的,但任何建议都将不胜感激)

谢谢

附加说明
我知道,但它只允许您写入缓冲区,并且只能从另一个缓冲区写入

(正在尝试
System::Copy 1$Buffer“A”
使可执行文件崩溃)

内置NSIS函数
FileRead
/
FileReadUTF16LE
FileReadByte
可用于读取文本和字节,但也可以直接调用Windows函数。要从内存缓冲区读取,必须使用system struct语法:

Section
InitPluginsDir
FileOpen $0 "$pluginsdir\test.txt" a

DetailPrint "NSIS:"
FileWrite $0 "Foo"
FileSeek $0 0 SET
FileRead $0 $1
DetailPrint |$1|


DetailPrint "System::Call:"
System::Alloc 100
Pop $1
System::Call '*$1(&m3 "Bar")' ; Write ASCII text into buffer using struct syntax
System::Call 'kernel32::WriteFile(i$0,i$1,i3,*i.r2,i0)i.r9'
DetailPrint "Write: OK=$9 ($2 bytes)"
System::Free $1
System::Call '*(&i100)i.r1' ; Alloc a 100 byte buffer using struct syntax
FileSeek $0 0 SET
System::Call 'kernel32::ReadFile(i$0,i$1,i6,*i.r2,i0)i.r9'
DetailPrint "Read: OK=$9 ($2 bytes)"
System::Call '*$1(&m${NSIS_MAX_STRLEN}.r2)' ; Read ASCII text into variable using struct syntax
System::Free $1
DetailPrint |$2|

FileClose $0
SectionEnd

你说的本机是指内置NSIS命令还是调用WinAPI函数?你想读什么?文本还是原始字节?谢谢,非常感谢。