以下是一个获取权限的函数,LookupPrivilegeValue 和 OpenProcessToken错误为 997
AdjustTokenPrivileges 为 5,拒绝访问。
这个函数我是从VC翻译过来的,VC源代码见下方。
求高手指点。。function EnablePrivilege (name:pchar):boolean;
var
hToken:Thandle;
rv:boolean;
tp,ss:TOKEN_PRIVILEGES;
ww: Cardinal;
begin
tp.PrivilegeCount := 1 ;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED ;
LookupPrivilegeValue ( nil, name, tp.Privileges[0].Luid ); OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken );
showmessage(inttostr(GetLastError ()));
AdjustTokenPrivileges ( hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES), ss, ww ); showmessage(inttostr(GetLastError ()));
rv := (GetLastError () = ERROR_SUCCESS);
CloseHandle (hToken);
result := rv;
end;BOOL EnablePrivilege (PCSTR name)
{
HANDLE hToken;
BOOL rv;
TOKEN_PRIVILEGES priv = { 1, {0, 0, SE_PRIVILEGE_ENABLED} };
LookupPrivilegeValue (
0,
name,
&priv.Privileges[0].Luid
);
OpenProcessToken(
GetCurrentProcess (),
TOKEN_ADJUST_PRIVILEGES,
&hToken
);
AdjustTokenPrivileges (
hToken,
FALSE,
&priv,
sizeof priv,
0,
0
);
rv = GetLastError () == ERROR_SUCCESS;
CloseHandle (hToken);
return rv;
}
AdjustTokenPrivileges 为 5,拒绝访问。
这个函数我是从VC翻译过来的,VC源代码见下方。
求高手指点。。function EnablePrivilege (name:pchar):boolean;
var
hToken:Thandle;
rv:boolean;
tp,ss:TOKEN_PRIVILEGES;
ww: Cardinal;
begin
tp.PrivilegeCount := 1 ;
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED ;
LookupPrivilegeValue ( nil, name, tp.Privileges[0].Luid ); OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, hToken );
showmessage(inttostr(GetLastError ()));
AdjustTokenPrivileges ( hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES), ss, ww ); showmessage(inttostr(GetLastError ()));
rv := (GetLastError () = ERROR_SUCCESS);
CloseHandle (hToken);
result := rv;
end;BOOL EnablePrivilege (PCSTR name)
{
HANDLE hToken;
BOOL rv;
TOKEN_PRIVILEGES priv = { 1, {0, 0, SE_PRIVILEGE_ENABLED} };
LookupPrivilegeValue (
0,
name,
&priv.Privileges[0].Luid
);
OpenProcessToken(
GetCurrentProcess (),
TOKEN_ADJUST_PRIVILEGES,
&hToken
);
AdjustTokenPrivileges (
hToken,
FALSE,
&priv,
sizeof priv,
0,
0
);
rv = GetLastError () == ERROR_SUCCESS;
CloseHandle (hToken);
return rv;
}
; function EnablePrivilege(hToken: Cardinal; PrivName: string; bEnable: Boolean): Boolean; var TP: Windows.TOKEN_PRIVILEGES; Dummy: Cardinal; begin TP.PrivilegeCount := 1; LookupPrivilegeValue(nil, pchar(PrivName), TP.Privileges[0].Luid); if bEnable then TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED else TP.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, False, TP, SizeOf(TP), nil, Dummy); Result := GetLastError = ERROR_SUCCESS; end;var hToken: Cardinal;begin OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken); Result := EnablePrivilege(hToken, SE_DEBUG_NAME, CanDebug); CloseHandle(hToken);end;