我已经在这上面敲了几天,我必须阅读互联网上的每一页甚至远程相关,但我仍然无法找到答案。救命啊!
以下是该场景:在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);
}
?>
答案 0 :(得分:0)
我永远无法让CreateProcessAsUser调用正常工作,但我终于使用CreateProcessWithLogonW来实现它。诀窍是将si.lpDesktop设置为NULL而不是&#34; winsta0 \ default&#34;,这与我读到的所有内容相反。