delphi11OpenProcessToken 传参报错’
时间: 2023-08-10 18:03:50 浏览: 42
在 Delphi 11 中,`OpenProcessToken` 函数的参数与之前的版本可能有所不同,您需要确认您的参数是否正确。
首先,您需要确保 `hProcess` 参数是一个有效的进程句柄。如果进程句柄无效,则会导致 `OpenProcessToken` 失败。您可以使用 `GetLastError` 函数获取详细的错误信息。
其次,您需要确认访问权限参数是否正确。在 Delphi 11 中,您可以使用 `TOKEN_ADJUST_DEFAULT` 和 `TOKEN_QUERY_DEFAULT` 这两个常量来设置访问权限,如下所示:
```delphi
const
TOKEN_ADJUST_DEFAULT = $0080;
TOKEN_QUERY_DEFAULT = $0100;
var
hProcess: THandle;
hToken: THandle;
dwAccess: DWORD;
begin
// 获取进程句柄
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessID);
if hProcess = 0 then
begin
RaiseLastOSError;
Exit;
end;
// 设置访问权限
dwAccess := TOKEN_ADJUST_DEFAULT or TOKEN_QUERY_DEFAULT;
// 打开进程令牌
if not OpenProcessToken(hProcess, dwAccess, hToken) then
begin
RaiseLastOSError;
CloseHandle(hProcess);
Exit;
end;
// 使用令牌进行操作
// ...
// 关闭句柄
CloseHandle(hToken);
CloseHandle(hProcess);
end;
```
请注意,`TOKEN_ADJUST_DEFAULT` 和 `TOKEN_QUERY_DEFAULT` 与之前的常量值不同。如果您使用了旧的常量值,可能会导致访问权限设置不正确,从而导致 `OpenProcessToken` 失败。