我正在尝试从另一个用户访问SYSTEM创建的内存映射文件。 我正在使用python freeze exe运行Windows服务。该服务作为本地SYSTEM运行。在服务中我创建了一个mmap文件(使用python mmap模块) 我稍后在登录用户下创建另一个进程,并尝试访问mmap文件,但得到一个
WindowsError:[错误5]访问被拒绝
我能够将问题简化为以下内容:
使用
将python作为本地系统运行PsExec.exe -i -s -d python
创建一个内存映射文件 -
mmap_file = mmap.mmap(-1, 1024, tagname='Global\\test', access=mmap.ACCESS_WRITE)
现在,从用户cmd打开一个python控制台(只需运行python) 并尝试使用
打开相同的mmap文件mmap_file = mmap.mmap(-1, 1024, tagname='Global\\test', access=mmap.ACCESS_WRITE)
再次,同样的
WindowsError:[错误5]访问被拒绝
如果我只是从作为同一用户运行的两个不同的python控制台运行它,代码就可以工作。
如何更改mmap文件的权限,以便SYSTEM以外的用户可以访问它?
使用python 2.7.10 Windows 7
我在服务中使用的实际代码来运行流程
appName = 'script.exe'
commandLine = 'script.exe'
session_id = 1
security_token = win32ts.WTSQueryUserToken(session_id)
processAttributes = None
threadAttributes = None
bInheritHandles = 0
dwCreationFlags = win32process.DETACHED_PROCESS
newEnvironment = None
currentDirectory = None
startupinfo = win32process.STARTUPINFO()
startupinfo.lpDesktop = "winsta0\default"
process = win32process.CreateProcessAsUser(security_token, appName , commandLine , processAttributes , threadAttributes , bInheritHandles , dwCreationFlags , newEnvironment , currentDirectory , startupinfo )