| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1525 人关注过本帖
标题:求助,一段代码在PB 12.0 和PB 6.5 下运行的问题
只看楼主 加入收藏
shoretsing
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2010-9-28
收藏
 问题点数:0 回复次数:3 
求助,一段代码在PB 12.0 和PB 6.5 下运行的问题
有一段在PB 6.5下的代码,运行正常。最近移植到PB 12.0 (评估版),发现有个api函数的运行结果总是失败,请大家帮忙找找原因。
代码如下:

==================
= Windows 2000,XP 下的关机程序  
==================
//=== 声明扩展函数 ====
FUNCTION ulong GetCurrentProcess() LIBRARY "kernel32.dll"
FUNCTION ulong OpenProcessToken(ulong ProcessHandle,ulong DesiredAccess,ref ulong TokenHandle) LIBRARY "advapi32.dll"
FUNCTION ulong LookupPrivilegeValue(ref string lpSystemName,ref string lpName,ref Luid lpLuid) LIBRARY "advapi32.dll" ALIAS FOR "LookupPrivilegeValueA"
FUNCTION ulong AdjustTokenPrivileges(ulong TokenHandle,boolean DisableAllPrivileges,ref TOKEN_PRIVILEGES NewState,ulong BufferLength,ref TOKEN_PRIVILEGES PreviousState,ref ulong ReturnLength) LIBRARY "advapi32.dll"
FUNCTION ulong ExitWindowsEx(ulong uFlags,ulong dwReserved) LIBRARY "user32.dll"

//=== 关机代码 ======
string  ls_lpSystemName
string  ls_lpName = "SeShutdownPrivilege"

ulong  lu_hdlProcessHandle
ulong  lu_hdlTokenHandle
ulong  lu_lBufferNeeded
luid              lst_tmpLuid
TOKEN_PRIVILEGES  lst_tkp
TOKEN_PRIVILEGES  lst_tkpNewButIgnored

//-- 获取权限 ---
lu_hdlProcessHandle = GetCurrentProcess()
OpenProcessToken(lu_hdlProcessHandle, 40, lu_hdlTokenHandle)
LookupPrivilegeValue(ls_lpSystemName, ls_lpname, lst_tmpLuid)   //**** 有问题的API函数 *******//

lst_tkp.PrivilegeCount = 1
lst_tkp.Privileges[1].pLuid = lst_tmpLuid
lst_tkp.Privileges[1].Attributes = 2
AdjustTokenPrivileges(lu_hdlTokenHandle, False, lst_tkp, 16, lst_tkpNewButIgnored, lu_lBufferNeeded)

//-- 关机 ---
ExitWindowsEx( 9, 0)

//===============================
注:api函数LookupPrivilegeValue在PB 6.5下运行的结果总是1(成功),在PB 12.0下的运行结果总是0(失败),查了一些资料,但是还是找不到原因,请各位高手帮帮忙!



搜索更多相关主题的帖子: 代码 运行 
2010-09-28 01:03
shoretsing
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2010-9-28
收藏
得分:0 
自己补充一下问题描述:
这段代码分别在PB 6.5、8.0、9.0、10.0、11.5、12.0(操作系统是Windows XP)下测试,发现在PB 9.0以前都可以正常运行,即 LookupPrivilegeValue函数的返回值为1;而在PB 10.0及以上版本下都运行失败,即LookupPrivilegeValue函数返回值为0。
所以我推测这个问题的原因在于PB的版本,不知道从10.0以后PB做了什么样的改动,希望高手给指点指点迷津!
先谢过了!
2010-09-29 20:58
shoretsing
Rank: 2
等 级:论坛游民
帖 子:4
专家分:10
注 册:2010-9-28
收藏
得分:0 
有点失望,高手呢?

2010-10-06 00:07
cljAmy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-4-4
收藏
得分:0 
我也研究好久,最终找到答案了,详见博文
http://blog.
2013-04-04 14:55
快速回复:求助,一段代码在PB 12.0 和PB 6.5 下运行的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020135 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved