相关疑难解决方法(0)

如何将SecureString转换为System.String?

有关创建以System.String出它不保护你的SecureString的所有预订一边,怎么能做到呢?

如何将普通的System.Security.SecureString转换为System.String?

我相信很多熟悉SecureString的人会回应说,永远不应该将SecureString转换为普通的.NET字符串,因为它会删除所有安全保护. 我知道.但是现在我的程序用普通字符串完成所有操作,我正在尝试增强其安全性,虽然我将使用返回SecureString的API给我,但我并不是想用它来增加我的安全性.

我知道Marshal.SecureStringToBSTR,但我不知道如何取出BSTR并从中制作System.String.

对于那些可能要求知道我为什么要这样做的人,好吧,我正在从用户那里获取密码并将其作为html表单POST提交以将用户登录到网站.所以......这真的必须使用托管的,未加密的缓冲区.如果我甚至可以访问非托管的,未加密的缓冲区,我想我可以在网络流上进行逐字节流写入,并希望这样可以保证密码的安全性.我希望能够回答至少其中一种情况.

.net c# security encryption

147
推荐指数
6
解决办法
9万
查看次数

使用Process.Start()以Windows服务中的不同用户身份启动进程

我想定期在Windows服务的指定用户帐户下运行任意.NET exe.

到目前为止,我已经让我的Windows服务运行逻辑来决定目标进程是什么,以及何时运行它.目标进程以下列方式启动:

  1. Windows服务使用"管理员"凭据启动.
  2. 到时候,执行一个中间的.NET进程,其参数详细说明应该启动哪个进程(文件名,用户名,域名,密码).
  3. 此过程创建一个新的System.Diagnostics.Process,将ProcessStartInfo对象与传递给它的参数相关联,然后在进程对象上调用Start().

第一次出现这种情况,目标进程执行罚款,然后正常关闭.然而,每次后续时间,一旦目标进程启动,它就会抛出错误"应用程序无法正常运行(0xc0000142)".重新启动Windows服务将允许进程再次成功运行(第一次执行).

当然,目标是每次都成功执行目标进程.

关于上面的步骤2:要以不同的用户身份运行进程.NET调用win32函数CreateProcessWithLogonW.此函数需要一个窗口句柄来记录指定的用户.由于Windows服务未在交互模式下运行,因此它没有窗口句柄.这个中间过程解决了这个问题,因为它有一个可以传递给目标进程的窗口句柄.

请不要使用psexec或windows任务规划器的建议.我已经接受了我的生活,包括以上述方式解决问题.

.net c# service windows-services process

35
推荐指数
1
解决办法
4万
查看次数

当由一组信用卡下的计划任务启动的进程在不同的一组Cred下运行另一个程序时,Windows是否有限制

所以我有一个简单的例子,我有app A,它有一些硬编码信用给用户X,一个本地管理员,然后它用这些凭证使用硬编码的绝对路径启动应用B. A和B以及dotnet控制台应用程序,但它们不与控制台交互,只是将信息写入文件.

当我进行交互(下我Creds,通过双击,或通过的CMD.exe,或交互式PowerShell会话它运行良好.成功呼叫乙

当我通过一个计划任务运行它,其中A由于信用卡,并且用用户X调用B时,Process.Start(mystartinfo)的错误代码是-1073741502或十六进制的0xC0000142,这意味着"应用程序无法正确初始化"

但是,如果我运行使用用户X凭据调用A的计划任务,它可以工作..

我做了这个小测试主要是因为我在PowerShell中从计划任务或远程处理中执行"start-job -Credential",或者在PowerShell中调用start-process或者在PowerShell中调用System.Diagnostic> Process.Start时看到类似的行为在相同的情况下.起初我认为这是PowerShell中的一个错误,但它似乎更深.无论是Windows还是特别是Dotnet,我想知道这是否已知/记录,以及是否有任何变通方法.

c# powershell scheduled-tasks

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

使用Windows服务的凭据启动进程

我有一个运行为mydomain\userA的Windows服务.我希望能够从服务中运行任意.exes.通常,我使用Process.Start()并且它工作正常,但在某些情况下我想以不同的用户(mydomain\userB)运行可执行文件.

如果我更改ProcessStartInfo,我用来启动进程以包含凭据,我开始收到错误 - 或者是一个错误对话框,显示"应用程序无法正确初始化(0xc0000142).单击确定以终止应用程序."或者"访问被拒绝"Win32Exception.如果我从命令行运行进程启动代码而不是在服务中运行它,则进程将使用正确的凭据开始(我已通过设置ProcessStartInfo来运行whoami.exe并捕获命令行输出来验证这一点) ).

我也尝试使用WindowsIdentity.Impersonate()进行模拟,但这没有用 - 据我所知,模拟只会影响当前线程,启动新进程会继承进程的安全描述符,而不是当前线程.

我在一个独立的测试域中运行它,因此userA和userB都是域管理员,并且两者都在域范围内具有"登录即服务"权限.

.net c# windows-services

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

powershell从Windows服务环境与Credential一起使用时,启动 - 处理退出代码-1073741502

我正在使用PowerShell Start-Process调用遇到一种奇怪的行为.

这是电话:

$process = start-process `
    "C:\somepath\MyBinary.exe" `
    -PassThru `
    -Credential $defaultCredential `
    -Wait `
    -WorkingDirectory  "C:\somepath" `
    -LoadUserProfile
if ($process.ExitCode -ne 0)
{
#do something
}
Run Code Online (Sandbox Code Playgroud)

此调用始终返回退出代码 - 1073741502.
快速搜索后,当程序无法加载其所需的dll(aka.STATUS_DLL_INIT_FAILED)时,此退出代码似乎与一般错误有关.

当我运行它没有-Credential $credential程序正确运行.

为了隔离问题,我some.exe在目标凭证的提示中手动启动,并且运行顺利.

所以问题似乎只来自start-process cmdlet有效启动进程的方式.

我找到了一些潜在的解决方案来解决这个问题,我尝试申请没有运气:链接链接.

你知道这里发生了什么吗?

编辑1:
我直接或通过powershell脚本运行proc mon来监控程序活动.加载时似乎发生了这个问题kernelbase.dll.

本地procmon转储(工作):

9:06:35.3837439 AM  MyBinary.exe    2620    Load Image  C:\Windows\SysWOW64\kernelbase.dll  SUCCESS Image Base: 0x76270000, Image Size: 0x47000
9:06:35.4317417 AM  MyBinary.exe    2620    RegOpenKey  HKLM\System\CurrentControlSet\Control\Nls\Sorting\Versions  REPARSE Desired Access: Read …
Run Code Online (Sandbox Code Playgroud)

powershell credentials start-process

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

CreateProcessAsUser() 给出“客户端不持有所需的权限”是哪一个?

使用在我的交互式会话中运行的 IIS Express 中的 System.Diagnostic.Process.Start(),我可以执行以具有校正功能的不同用户身份运行的程序。不幸的是,这似乎不适用于非交互式会话。

指定凭据时,Process.Start 在内部调用 CreateProcessWithLogonW(CPLW)。CreateProcessWithLogonW 不能从 Windows 服务环境(如 IIS WCF 服务)调用。它只能从交互式进程(由通过 CTRL-ALT-DELETE 登录的用户启动的应用程序)中调用。-从这个 SO 答案

我需要将此站点从应用程序池帐户发布到 IIS 8。所以我按照上面引用的答案的建议 CreateProcessAsUser 。我已经使用本地安全策略设置了服务帐户和代理帐户,并按照该答案中的建议重新启动 - 服务帐户可以替换令牌,修改配额,代理帐户可以批量登录(以及作为该测试的服务)。但我不能让它在IIS快递(或控制台测试应用程序)的工作,也不IIS 8.我已经试过运行的LOGON32_LOGON_BATCHLOGON32_LOGON_NETWORK_CLEARTEXT以及LOGON32_LOGON_SERVICE,甚至LOGON32_LOGON_INTERACTIVE。我什至给了我自己的帐户“作为服务登录”和“作为操作系统的一部分”特权,没有任何变化——所有这些都在重新启动后进行了测试。

对于所有配置,我都从 IIS Express 收到“客户端不持有所需的特权”。在服务器上,我得到相同的运行控制台应用程序。但是发布应用程序,它似乎可以很好地启动该过程,但随后我似乎遇到了权限错误。

我想知道我的帐户在本地运行时缺少哪些权限,以便我可以正确调试它们(并最终找出我遇到的任何权限错误)。有什么办法可以确定吗?无论哪种方式,如果您知道问题所在,我也希望如此!

谢谢!

iis permissions pinvoke winapi

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