小编use*_*598的帖子

从Windows服务运行进程作为当前用户

我目前有一个在系统帐户下运行的Windows服务.我的问题是我需要从服务中启动某些进程作为当前登录用户.我有所有代码等来获取当前登录的用户/活动会话.

我的问题是我需要生成一个进程作为登录用户但不知道用户凭据等.

该服务是.net编译服务,我希望我需要使用一些Pinvoke方法来获取当前用户进程之一的句柄,以便将其复制并作为句柄处理午餐.

不幸的是,我找不到任何关于如何实施它的好文档/解决方案?

如果有人能够给我一些指导/示例,我将非常感激.

*更新* 我想我已经解释不正确,需要根据我的实际需要重新调整.我不一定想要启动一个新进程,我只是想模仿已登录的用户.我已经非常专注于查看CreateProcess等我已经引导自己沿着创建新进程的路径作为当前登录用户(这不是我想要做的事情).

反过来,我只想在当前用户上下文下运行一些代码(模拟当前登录用户)?

c# windows-services

7
推荐指数
2
解决办法
2万
查看次数

从会话0(服务)启动提升的用户流程

大家早,

这个问题似乎已经被问过几次了,但是我找不到它是否真正可行。我已经张贴在这里

没有回复-让我们尝试在这里问别人。

我的目标是在当前用户上下文中(仅当它们在本地管理员组中)从服务启动提升的进程(作为管理员)。

我可以毫无问题地获得“当前用户”令牌,但无法获得该帐户的辅助/管理员令牌!

我已经阅读了很多论坛,但无法使其正常工作(开始认为这样做不可行)。

我目前的方法:

  • WTSGetActiveConsoleSessionId -获取活动会话ID
  • WTSQueryUserToken -获取会话ID的用户令牌
  • 检查令牌是否为admin(不是)。
  • OpenProcess -登录用户的explorer.exe的进程句柄
  • OpenProcessToken -获取访问令牌的句柄
  • LookupPrivilegeValue -SE_DEBUG,以确认我们可以调整令牌权利
  • DuplicateTokenEx -用户令牌
  • SetTokenInformation
  • AdjustTokenPrivileges
  • CreateEnvironmentBlock -在中运行新流程
  • CreateProcessAsUser -希望在提升的用户上下文中生成该过程(不发生-标准用户上下文)

请查看下面的代码-抱歉,它很杂乱,需要整理并且所有句柄都已关闭。目前,这只是实验性代码。

public static bool CreateProcessInConsoleSession(String CommandLine, bool bElevate)
{
    PROCESS_INFORMATION pi;
    bool isadmin = IsUserAnAdmin();

    bool bResult = false;
    uint dwSessionId, winlogonPid = 0;
    IntPtr hUserToken = IntPtr.Zero, hUserTokenDup = IntPtr.Zero,
        hPToken = IntPtr.Zero, hProcess = IntPtr.Zero;

    Debug.Print("CreateProcessInConsoleSession");
    // Log the client on to the local computer.
    dwSessionId = WTSGetActiveConsoleSessionId();

    // Find the …
Run Code Online (Sandbox Code Playgroud)

c# session winapi

5
推荐指数
1
解决办法
1608
查看次数

Dropbox C# API v2 列出团队文件夹内容

我正在尝试从 Dropbox API 获取业务 Dropbox 团队成员的目录列表。

该文档似乎有些不清楚,并且令人沮丧地难以获取内容。因此我的代码可能会有所偏差,这也是我遇到问题的原因。我有一个用于团队和我的管理员用户的开发令牌。

        using (var client = new DropboxTeamClient("my token"))
        {

            var teamInfo = await client.Team.GetInfoAsync();
            var teamName = teamInfo.Name;
            var numberOfUsers = teamInfo.NumProvisionedUsers;


            var memListResult = await client.Team.MembersListAsync();
            foreach (var m in memListResult.Members)
            {
                var accountId = m.Profile.AccountId;
                var email = m.Profile.Email;
                Console.WriteLine($"Id {accountId} - email is {email}");
            }

            var accId = memListResult.Members.First(x => x.Profile.Email.Equals("myEmail"))
                ?.Profile.AccountId;

            var memId = memListResult.Members.First(x => x.Profile.Email.Equals("myEmail"))
                ?.Profile.TeamMemberId;

            
            var dbx = client.AsAdmin(memId);

            

            try
            {
                var full = await dbx.Users.GetCurrentAccountAsync();
                Console.WriteLine("{0} …
Run Code Online (Sandbox Code Playgroud)

c# dropbox

1
推荐指数
1
解决办法
1912
查看次数

标签 统计

c# ×3

dropbox ×1

session ×1

winapi ×1

windows-services ×1