注册 登录
编程论坛 PowerBuilder

求助,一段代码在PB 12.0 和PB 6.5 下运行的问题

shoretsing 发布于 2010-09-28 01:03, 1526 次点击
有一段在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(失败),查了一些资料,但是还是找不到原因,请各位高手帮帮忙!



3 回复
#2
shoretsing2010-09-29 20:58
自己补充一下问题描述:
这段代码分别在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做了什么样的改动,希望高手给指点指点迷津!
先谢过了!
#3
shoretsing2010-10-06 00:07
有点失望,高手呢?

#4
cljAmy2013-04-04 14:55
我也研究好久,最终找到答案了,详见博文
http://blog.
1