Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正常应用程序中的信号量首次由服务创建时被拒绝访问_C++_Ms Access_Semaphore - Fatal编程技术网

C++ 正常应用程序中的信号量首次由服务创建时被拒绝访问

C++ 正常应用程序中的信号量首次由服务创建时被拒绝访问,c++,ms-access,semaphore,C++,Ms Access,Semaphore,我在一个库中创建一个全局信号量,该库由一个普通的应用程序和一个服务使用。 如果我在服务之前运行我的普通应用程序,一切都会好起来,但是如果我改变顺序,我的意思是,在应用程序之前运行服务,当我试图创建或打开现有信号量时,我将在普通应用程序中得到拒绝访问错误。 我在信号量创建期间设置了信号量\u ALL\u访问,但这并不能解决问题。以一种荒谬的方式,我还添加了SYNCHRONIZE和SEMAPHORE_MODIFY_STATE by | operand,但它并没有“解决问题” 你知道吗? 我使用的是w

我在一个库中创建一个全局信号量,该库由一个普通的应用程序和一个服务使用。 如果我在服务之前运行我的普通应用程序,一切都会好起来,但是如果我改变顺序,我的意思是,在应用程序之前运行服务,当我试图创建或打开现有信号量时,我将在普通应用程序中得到拒绝访问错误。 我在信号量创建期间设置了信号量\u ALL\u访问,但这并不能解决问题。以一种荒谬的方式,我还添加了SYNCHRONIZE和SEMAPHORE_MODIFY_STATE by | operand,但它并没有“解决问题”

你知道吗?
我使用的是windows 8.1 x64,同时运行32位版本的服务和应用程序。

如果需要降低资源的完整性级别,请尝试以下方法创建

 SECURITY_DESCRIPTOR sd;
 SECURITY_ATTRIBUTES sa;

 sa.nLength = sizeof(SECURITY_ATTRIBUTES);
 sa.bInheritHandle = TRUE;
 sa.lpSecurityDescriptor = &sd;

 if(InitializeSecurityDescriptor(&sd,  SECURITY_DESCRIPTOR_REVISION))
 {
     if(SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE))   
     {
         PSECURITY_DESCRIPTOR pSD = NULL;   

         // Try to lower Integrity, if OS is Vista or higher        
         if(bIsOSVistaOrLater)
         {
             if(ConvertStringSecurityDescriptorToSecurityDescriptor("S:(ML;;NW;;;LW)", SDDL_REVISION_1, &pSD, NULL))
             {
                  PACL pSacl = NULL;
                  BOOL fSaclPresent = FALSE;
                  BOOL fSaclDefaulted = FALSE;
                  if(GetSecurityDescriptorSacl(pSD, &fSaclPresent, &pSacl, &fSaclDefaulted) )
                  {
                      if(SetSecurityDescriptorSacl(sa.lpSecurityDescriptor, TRUE, pSacl, FALSE))
                      {
                         ... = CreateSemaphore(&sa, 1, 1, "xpto");

                      }                      
                  }              
              }
         }          
         else
         {
            ... = CreateSemaphore(&sa, 1, 1, "xpto");           
         }
     }
 }

您可以阅读更多信息:

如果您想访问由普通应用程序中的服务创建的信号量,您需要降低完整性。请回答:是的,我发现我的问题与windows安全描述符有关