OpenMutex在使用CreateProcessAsUser打开的进程中失败

时间:2015-12-09 16:25:05

标签: windows visual-c++ mutex createprocessasuser

我已经在这上面敲了几天,我必须阅读互联网上的每一页甚至远程相关,但我仍然无法找到答案。救命啊!

以下是该场景:在Windows 7中,我有一个在管理员用户帐户(非服务)下运行的进程。它创建一个全局命名的互斥锁,稍后在常规用户帐户下运行的子进程中使用它。无论我做什么,或者我在互斥锁上放置了什么ACL,子进程都会在尝试获取句柄时不断返回Access Denied。

我已经将我的代码简化为测试应用程序,只是为了试验过程和互斥部件,我发现了一些令人惊讶的事情:如果我在没有先创建互斥锁的情况下从用户应用程序调用OpenMutex,我希望找不到错误但我仍然拒绝访问。但是,如果我从资源管理器中启动用户应用程序(右键单击,以不同用户身份运行...),我会得到预期的行为。我还注意到,当从管理应用程序启动时,用户应用程序具有简单的块状窗口边框,而不是正常的Windows主题。

所以我的猜测是,我推出用户应用程序的方式有问题,但我无法看到我所缺少的内容。

以下是相关部分:

<?php

$con = mysql_connect("localhost","root","12345");
$db = mysql_select_db("search",$con);

    $query = mysql_query("Select * from cities where Id=2");
if(mysql_num_rows($query)>0)
{   
    while($result=mysql_fetch_array($query))
    {
        $list=array();
        $list['Id']=$result['Id'];
        $list['city_name']=$result['city_name'];

        $response['list']=array();

        array_push($response["list"], $list);
    }
    $response["success"] = 1;
    echo json_encode($response);
} else {
    // no products found
    $response["success"] = 0;
    $response["message"] = "No products found";

    // echo no users JSON
    echo json_encode($response);
}

?>

1 个答案:

答案 0 :(得分:0)

我永远无法让CreateProcessAsUser调用正常工作,但我终于使用CreateProcessWithLogonW来实现它。诀窍是将si.lpDesktop设置为NULL而不是&#34; winsta0 \ default&#34;,这与我读到的所有内容相反。