AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil, Nothing);故障显示:[Error] Unit1.pas(79): Ambiguous overloaded call to 'AdjustTokenPrivileges'
解决方案 »
- delphi中下面的seltext以及Text获取的是什么值 谢谢啊 求助
- SQL中Sum求和为什么会自动四舍五入呢?
- 如何获得系统中运行的所有窗口
- 新同事的工资比我高?我很郁闷!想听听您的看法?
- ★★★★★第十五期:CSDN论坛秀-Delphi版-本期作秀:windindance(风舞轻扬)
- 我是用provider.applyupdata更新的现在有以下一个问题,帮个忙.100分
- 关于同一程序多次运行的问题!
- 制作安装包为什么不能支持中文?
- 列表框的问题。。。
- 请问,我的couba服务器在多台几访问的时候都回死机,请问有什么方法解决吗
- 请教NMSMTP控件的connect()方法如何写才正确啊?
- 如何实现从文本导入SQL数据库的问题??
var
VerInfo:TOSVersionInfo;
hToken:THANDLE;
tkp:TOKEN_PRIVILEGES;
Nothing:Cardinal;
begin
VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
Begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,PTokenPrivileges(nil), Nothing);
End;
ExitWindowsEx(EWX_POWEROFF,0);end;
故障显示:[Error] Unit1.pas(79): Ambiguous overloaded call to 'AdjustTokenPrivileges'
看了一下delphi6的windows单元的定义,AdjustTokenPrivileges有两个重载函数function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
const NewState: TTokenPrivileges; BufferLength: DWORD;
var PreviousState: TTokenPrivileges; var ReturnLength: DWORD): BOOL; external advapi32 name 'AdjustTokenPrivileges';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
const NewState: TTokenPrivileges; BufferLength: DWORD;
PreviousState: PTokenPrivileges; var ReturnLength: DWORD): BOOL; external advapi32 name 'AdjustTokenPrivileges';
试试用另一个函数改成这样:var
NewState: TTokenPrivileges;
//......
AdjustTokenPrivileges(hToken, FALSE, tkp, 0, NewState, Nothing);
我新建个工程,是有用的
但是到我搞的那个程序里,添加了,运行就会出现那个错误故障显示:[Error] Unit1.pas(79): Ambiguous overloaded call to 'AdjustTokenPrivileges'
这样会报错吗?
const
ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
SHTDWN_PRIV = 'SeShutdownPrivilege';
PRIV_SIZE = sizeOf(TTokenPrivileges);var
Len: DWORD;
TokenPriv, Dummy: TTokenPrivileges;
Token: THandle;
Error:integer;
begin
error:=0;
if not OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, Token) then
Error := Error or 4;
if not LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid) then
Error := Error or 8;
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TokenPriv.PrivilegeCount := 1; // One privilege to set
if not AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len) then
Error:=Error or 16;
ExitWindowsEx(uFlags, 0);
Result := (Error=0);
end;
这是一个重载的函数.你注意下第五个参数是:TTokenPrivileges 类型的.