windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题...

邮槽创建在服务程序内,可以创建成功,

但外部客户端连接时

    m_hMailslot = CreateFile("\\\\.\\mailslot\\zdpMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
GetLastError返回错误 5 ,无权限访问Access Denied

如果路径改为

\\\\*\\mailslot\\zdpMailslot

\\\\compername\\mailslot\\zdpMailslot

则可以连接成功,但是发一条数据服务端就重复接收三次,而且延时巨大(几分钟)。让人费解。

查到了这篇文章解释的:猜测路径不是点的话那么走的远程调用,每次都要建立授权会话,导致延时巨大

http://www.360doc.cn/article/2660674_95457447.html

lpSecurityAttributes参数决定了为邮槽施加的访问控制权限。在Windows NT和Windows2000中,这个参数只实现了一部分,所以同时还应指定一个null(空)参数。在邮槽上,唯一能够施加的安全措施是针对本地I/O进行的----客户机试图将服务器的名字设为小数点(.),以打开一个邮槽。要想绕过这种安全机制,客户机可指定服务器的实际名字,而不是一个小数点,亦即相当于发出一个远程I/O调用。在Windows NT和Windows2000中,并未针对远程I/O而实现lpSecurityAttributes参数,因为假如每次发出一条消息时,都在客户机与服务器之间建立一个授权会话,那么效率会显得十分低下。因此,邮槽仅一部分符合标准文件系统采用的Windows NT和Windows2000安全模型。结果便是,网络中的任何邮槽客户机都可将数据发给服务器。

 

===搜了半天找到了这个网上的文章====

跨进程访问共享内存的权限问题

http://m.blog.csdn.net/jiangsheng/article/details/25563

采用了蒋老师的CShareRestrictedSD 类指定自定义的SECURITY_ATTRIBUTES,

不知道为啥这个类写的这么复杂

但放到服务程序里CreateMailslot的时候就挂了

于是放弃

 

===继续搜了半天找到了这个网上的文章 stackoverflow老外的====

“Access Denied” on writing on Mailslot in Windows Service program

https://stackoverflow.com/questions/8389549/access-denied-on-writing-on-mailslot-in-windows-service-program

给出了一个指定SECURITY_ATTRIBUTES的代码:

SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);SECURITY_ATTRIBUTES sa;
sa.lpSecurityDescriptor=&sd;
sa.bInheritHandle=true;
pHandleMailSlot = CreateMailslot("your mail slot path", 0, -1, &sa);

弄上果然可以外部连接成功了!!!之前的延时大也是自己调用错了。

转载于:https://www.cnblogs.com/coolzdp/p/7392504.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归下降分析

对于给定的文法G[E] : E→ET|E-T|TT→T*F| T/F|FF→(E)|i 消除左递归后的文法是:E→TE E→TE|-TE|∑ T→FT T→*FT|/FT|∑ F→(E)|i 是否是LL(1)文法? select(E→TE)first(TE){(,i}select(E→TE)first(TE){}select(E→-TE)first(-TE){-}select(E→∑)fol…

SYS简介

"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.” --- documentation/filesystems/sysfs.txt 可以先把documentation/filesystems/…

数字后端——布图规划

布图规划(floorplan)与布局(place)在芯片设计中占据着重要的地位,它的合理与否直接关系到芯片的时序收敛、布线通畅、电源稳定以及良品率。所以在整个芯片设计中,从布图规划到完成布局一般需要占据整个物理…

利用SSH传输文件

在linux下一般用scp这个命令来通过ssh传输文件。 1、从服务器上下载文件scp usernameservername:/path/filename /var/www/local_dir(本地目录) 2、上传本地文件到服务器scp /path/filename usernameservername:/path 例如scp /var/www/test.php root19…

App WebView实例化

a,高级设置里的环境变量 jdk的配置 b,下载Google的sdk,里面直接包含eclipse 1,新建一个项目 2,起个名字 3,设么走不做,next 4,只操作选择显示的三种方式 5,next什么都不做…

[动态代理三部曲:下] - 从动态代理,看Retrofit的源码实现

前言 关于动态代理的系列文章,到此便进入了最后的“一出好戏”。前俩篇内容分别展开了:从源码上,了解JDK实现动态代理的原理;以及从动态代理切入,学会看class文件结构的含义。 如果还没有看过这俩篇文章的小伙伴&#…

Ti的DM368系列芯片的所有PDF资料汇总

http://www.ti.com/sc/docs/psheets/man_dsp.htm

刘浩(专业打劫三十年)20155307的预备作业02:

我的技能?比大多数人好?经验是什么?与老师的经验的共同之处? 我的技能之一就是单词翻译王——其实看了娄老师的学习经验之后便有些自惭形秽了,我目前的单词量是7300,扇贝上测的,而且测试时是严格的“不会就…

数字后端——电源规划

电源规划是给整个芯片的供电设计出一个均勻的网络,它是芯片物理设计中非常关键的一部分。电源规划在芯片布图规划后或在布图规划过程中交叉完成,它贯穿于整个设计中,需要在芯片设计的不同阶段对电源的供电网络进行分析并根据要求进行修改。,主…

逆向project实战--Acid burn

0x00 序言 这是第二次破解 crackme 小程序,感觉明显比第一次熟练。破解过程非常顺利,差点儿是分分钟就能够找到正确的 serial,可是我们的目标是破解计算过程。以下将具体介绍。 0x01 初次执行 刚開始拿到 crackme 先执行程序。看看有哪些明显…

PyCharm使用技巧(六):Regullar Expressions的使用

2019独角兽企业重金招聘Python工程师标准>>> PyCharm v2018.2最新版本下载 使用正则表达式查找和替换文件中的文本 示例代码 使用正则表达式查找和替换字符串 假设您想用扩展标记<title> </title>替换元素&#xff08;title&#xff09;中的属性&#x…

内核中_init,_exit中的作用

__init&#xff0c; __initdata等属性标志&#xff0c;是要把这种属性的代码放入目标文件的.init.text节&#xff0c;数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。 对编译成module的代码和数据来说&#xff0c;当模…

jQuery笔记总结

来源于&#xff1a;http://blog.poetries.top/2016/10/20/review-jQuery/ http://www.jianshu.com/p/f8e3936b34c9 首先&#xff0c;来了解一下jQuery学习的整体思路 第一节 jQuery初步认知 jQuery概述 JQuery概念 javascript概念 基于Js语言的API和语法组织逻辑&#xff0c;通…

芯片生产流程

每个半导体产品的制造都需要数百个工艺&#xff0c;泛林集团将整个制造过程分为八个步骤&#xff1a;晶圆加工-氧化-光刻-刻蚀-薄膜沉积-互连-测试-封装。 一、晶圆加工 所有半导体工艺都始于一粒沙子&#xff01;因为沙子所含的硅是生产晶圆所需要的原材料。晶圆是将硅(Si)或砷…

GRE Sub math 报名

Step1 注册ETS帐号 Step2 登录帐号&#xff0c;点击Register/Find Test Centers, Dates Step3 按照提示查询考场 如果没有结果而是出现了如下提示&#xff0c;意味着这个地方没有考位了&#xff0c;需要选择其他地方的考位 Step 4 接下来就和GRE general test的过程一样了&…

platform_device_系列函数及其设备注册的作用

platform_device_系列函数&#xff0c;实际上是注册了一个叫platform的虚拟总线。使用约定是如果一个不属于任何总线的设备&#xff0c;例如蓝牙&#xff0c;串口等设备&#xff0c;都需要挂在这个虚拟总线上。 driver/base/platform.c //platform设备声明 struct device pla…

示例解读 Python 2 和 Python 3 之间的主要差异

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 每门编程语言在发布更新之后&#xff0c;主要版本之间都会发生很大的变化。 在本文中&#xff0c;Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异&#xff0c;以帮助说明…

数字后端——布局

由于I / O单元和模块的布放已经在布图规划时完成&#xff0c;因此布局的剩余任务主要是对标准单元的布局。布局方案在布图规划时就已经做了决定&#xff0c;要么选择展平式布局&#xff0c;要么就是层次化布局。 一、布局目标 布局的目标也即布局内容实施之后所要达到的预期值…

python基础 函数 (四)

一 函数基本 def func1():print("hello world")return 1, "hello", ("wo", "ai"), ["ni", "da"], {"you": "xi"} # return 可以返回任意# 结果&#xff1a; (1, hello, (wo, ai), [ni, da…

c#注释

c#的注释分为&#xff1a;这里不能不说一下什么是注释。 注释本身不会执行&#xff0c;只是说明性文字&#xff0c;只供程序员阅读。 注释又分为&#xff1a;单行注释&#xff0c;多行注释&#xff0c;文档注释。 单行注释&#xff1a;//开始 多行注释&#xff1a;/*开始&#…