用命名管道做进程通信,在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);