使用_WinAPI_CreateFileMapping()
我希望在同一台计算机上启用其他用户,以便通过_WinAPI_OpenFileMapping()
接收消息。我尝试打开文件映射(invalid handle error #6
)时收到错误,因为可能存在安全设置。
我找到了this post关于文件映射并允许跨用户访问。解决方案是创建一个NULL安全标识符(不传递NULL,但传递一个有效的安全标识符,包含NULL):
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.NullSid, null);
如何在AutoIt中创建它并将其传递给_WinAPI_CreateFileMapping()
?
发送边脚本(以本地用户身份运行):
Local $sid = _Security__StringSidToSid("S-1-0") ; also tried S-1-1
$hMapping = _WinAPI_CreateFileMapping(-1, 2048, 'MyFileMapping',0x0004,$sid) ;it seems to accept the sid
DllStructSetData($tData, 1, "IDL") ; if($hMapping) send the message...
接收服务脚本(作为系统帐户运行):
$hMapping = _WinAPI_OpenFileMapping('MyFileMapping')
还试过传递只读。 0x0004
返回0x0000
文件句柄/ 0
错误0
已扩展。一旦1305
错误代码(不能复制)。
; if($hMapping) ... this is how I am trying to receive the message:
$pAddress = _WinAPI_MapViewOfFile($hMapping)
$tData = DllStructCreate('wchar[1024]', $pAddress)
$Text = DllStructGetData($tData, 1)
DllStructSetData($tData, 1, '')