命名管道在WIN7下运行出错的解决方法

用命名管道做进程通信,在WIN7下运行,本来是正常的,管道的服务器端做为服务是,在其他权限的管道客户端就不能跟服务器端正常通信了。

解决方法,在创建管道的时候增加安全描述符(CreateNamedPipe,最后个参数不能为NULL)。

BYTE sd[SECURITY_DESCRIPTOR_MIN_LENGTH];
    SECURITY_ATTRIBUTES sa;
 
    sa.nLength = sizeof(sa);
    sa.bInheritHandle = TRUE;
    sa.lpSecurityDescriptor = &sd;
 
    InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(&sd, TRUE, (PACL) 0, FALSE);

 

创建管道代码:

SvrHandle = CreateNamedPipe(pipenamestr,PIPE_ACCESS_DUPLEX,PIPE_TYPE_BYTE | PIPE_READMODE_BYTE,1,0,0,0, &sa);

 

你可能感兴趣的:(Security,服务器,Access,byte,Descriptor,attributes)