测试代码
procedure TETCServe1.ShowDlg();    //lpszMessage: PChar; lpszTitle: PChar
var
  bSuccess: Boolean;
  si: STARTUPINFO;
  pi: PROCESS_INFORMATION;
  dwSessionID: DWORD;
  hToken, hDuplicatedToken: THandle;
  lpEnvironment: Pointer;
  //lpszClientPath: PChar;
begin
  bSuccess := FALSE;
  // 进程信息
  ZeroMemory(@si, sizeof(STARTUPINFO) );
  si.cb := sizeof(si);
  Si.lpDesktop := PChar('Winsta0\Default');  //--
  si.wShowWindow:=SW_SHOWNORMAL; //--
  // 获得当前Session ID
  dwSessionID := WTSGetActiveConsoleSessionId;   //showmessage(SysErrorMessage(GetLastError));
  hToken := 0;
  // 获得当前Session的用户令牌
  if WTSQueryUserToken(dwSessionID,@hToken) = FALSE then  begin
  showmessage(SysErrorMessage(GetLastError));
    if not bSuccess then
     // ShowMessage('无法创建复杂UI', '错误');
    if hToken <> 0 then
      CloseHandle(hToken);
    Exit;
  end;
  // 复制令牌
  hDuplicatedToken := 0;
  if DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, nil,
     SecurityIdentification, TokenPrimary,
     hDuplicatedToken) = FALSE then
  begin
    if not bSuccess then
      //ShowMessage('无法创建复杂UI', '错误');
    if hToken <> 0 then
      CloseHandle(hToken);
    if hDuplicatedToken <> 0 then
      CloseHandle(hDuplicatedToken);
    Exit;
  end;
  // 创建用户Session环境
  lpEnvironment := nil;
  if CreateEnvironmentBlock(lpEnvironment, hDuplicatedToken, FALSE) = FALSE then
  begin    if not bSuccess then
     //ShowMessage('无法创建复杂UI', '错误');
    if hToken <> 0 then
      CloseHandle(hToken);
    if hDuplicatedToken <> 0 then
      CloseHandle(hDuplicatedToken);
    if lpEnvironment <> nil then
      DestroyEnvironmentBlock(lpEnvironment);
    Exit;
  end;
  // 在复制的用户Session下执行应用程序,创建进程。
  // 通过这个进程,就可以显示各种复杂的用户界面了
  if CreateProcessAsUser(hDuplicatedToken,
          PChar(cmd), nil, nil, nil, FALSE,
          NORMAL_PRIORITY_CLASS,
         lpEnvironment, nil, si, pi) = FALSE then
  begin
    if not bSuccess then
      //ShowMessage('无法创建复杂UI', '错误');
    if hToken <> 0 then
      CloseHandle(hToken);
    if hDuplicatedToken <> 0 then
      CloseHandle(hDuplicatedToken);
    if lpEnvironment <> nil then
      DestroyEnvironmentBlock(lpEnvironment);
    Exit;
  end;
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
  bSuccess:=TRUE;
end;在调试代码时,获取session当前用户令牌,总是返回false,dwSessionID 的值是有值的,GetLastError后总是提示“客户端没有所需的权限”,关掉UAC,还是报同样消息;请求大家帮忙解决,在此拜谢!!!