首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Windows上拒绝Python权限

在Windows上拒绝Python权限
EN

Stack Overflow用户
提问于 2022-11-29 00:28:48
回答 1查看 33关注 0票数 1

我有以下代码工作得很好:

server.py

代码语言:javascript
运行
复制
from mmap import mmap
from pickle import load, dump


mm = mmap(-1, 32, tagname='test')

last_request_id = None
while True:
    mm.seek(0)
    try:
        request_id = int(load(mm))
        if request_id != last_request_id:
            last_request_id = request_id
            print(request_id)
        
    except Exception:
        pass

client.py

代码语言:javascript
运行
复制
from mmap import mmap
from pickle import dump


with mmap(-1, 32, tagname='test') as mm:
    request_id = 1
    dump(request_id, mm)

因此,每次服务器收到新的请求id时,服务器都会在控制台上打印id。但是现在我想使用全局范围。因此,我将(客户机和服务器)上的标签名更改为r'Global\test'。更改后,当服务器或客户端启动时,它将显示一个权限错误:

代码语言:javascript
运行
复制
PermissionError: [WinError 5] Access is denied

因此,我读到了这只燕窝,它是一种安全机制,可以防止任何人创建全局内存映射文件,并且管理员、IIS用户或服务默认拥有创建全局内存映射文件的权限。由于知道我创建了一个运行服务器的Windows服务,并且它不会出现任何错误,所以服务器能够创建全局mmap。但是问题仍然存在于客户端(权限错误)。

读取Microsoft文档,它说“特权检查仅限于创建文件映射对象”.“在任何会话中运行的任何进程都可以访问该文件映射对象,只要用户具有必要的访问权限”。我想知道我需要做些什么来读取服务器在我的客户端应用程序上创建的全局mmap。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 09:29:17

您需要在客户端调用OpenFileMapping()。但是当前Python模块调用mmap来打开一个现有的文件映射对象(您可以在上看到这一点)。

所以你不能用纯Python做你想做的事。我建议使用multiprocessing模块提供的其他IPC机制。( multiprocessing.shared_memory.SharedMemory不会有帮助,因为它在后端调用了mmap API。)

作为附带说明,我建议您在这里上编写一份问题报告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74607900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档