我有一些旧的代码,我们必须在VB6中维护.我们需要添加查找当前用户的 SID的功能.任何人都可以向我指出一些代码,说明如何做到这一点?在此先感谢您的帮助!
我有一个无法使用域凭据连接到SQL Server的问题。使用SA凭据可以正常工作,查询将按预期运行。但是,当我使用域凭据时,会出现错误。
这是脚本:
$SQLServer = 'server.domain.com'
$SQLDBName = 'DBname'
$username = "DOMAIN\user"
$password = "password"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
#--> With SA, it works, with DOMAIN creds, it does not
#$SqlConnection.ConnectionString = "Server=$SQLServer; Database=$SQLDBName; User ID=sa; Password=SApassword;"
$SqlConnection.ConnectionString = "Server=$SQLServer; Database=$SQLDBName; User ID=$username; Password=$password;"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = 'select count (*) from my.table'
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
Run Code Online (Sandbox Code Playgroud)
这是我运行脚本时遇到的错误:
使用“ 1”参数调用“填充”的异常:“建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称是否正确并且该SQL Server配置为允许远程连接(提供程序:命名管道提供程序,错误:40-无法打开与SQL Server的连接)
在C:\ scripts …
(使用C#,Web API,带有报表服务器的SQL Server2012,身份验证为NTLM)
尝试从SSRS下载报告(作为Excel文档)时出现间歇性错误。我建立正确的URL来呈现报告,如下所示:
WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential("myDom\\myReportReader", "P@55W0rd");
//string credentials = Convert.ToBase64String(
// Encoding.ASCII.GetBytes("myDom\\myReportReader" + ":" + P@55W0rd"));
//webClient.Headers[HttpRequestHeader.Authorization] = string.Format("Basic {0}", credentials);
//401 Unauthorized thrown here:
return new MemoryStream(webClient.DownloadData(reportUrl));
Run Code Online (Sandbox Code Playgroud)
这里的目标是面向公众的IIS上的Web API控制器从受内部/防火墙保护的SSRS下载文件流,然后将流中继到浏览器。有时候,这行之有效...当它不行时,它在最后一行返回401错误...上面标注的行表示试图解决不起作用的问题。
我正在尝试确定创建特定文件的用户,如下所示:
string path = "C:\\TheFile.dat";
string user = System.IO.File.GetAccessControl(path).GetOwner(typeof(System.Security.Principal.NTAccount)).ToString();
Run Code Online (Sandbox Code Playgroud)
如果文件是由不是 Administrators用户组成员的用户创建的,则返回用户的用户名.然而,当文件被别人谁创造了管理员用户组的成员,"域\管理员"被退回.
任何人都可以想到为什么会发生这种情况以及如何确保返回实际的用户名?
谢谢.
我有一个内置 TCP/IP 服务器的 Windows 服务。客户端和连接以及分发一些信息等。通常安装该服务以作为网络服务登录。
有一些数据存储在 ProgramData 下的文件夹中,因此在安装过程中向该服务授予对该文件夹的读/写访问权限。但是,通常会使用网络服务帐户授予对所有服务的访问权限。据我所知,可以使用ChangeServiceConfig2和 SERVICE_CONFIG_SERVICE_SID_INFO 添加特定的服务 SID。然而,从那里开始,根本不清楚如何继续,以及这是否是我的问题的解决方案。
任何帮助将非常感激!
当安装程序(由Inno Setup构建)启动进程时,该进程始终以管理员权限运行. - 因为安装程序已作为管理员运行.
我想将子进程作为当前用户的权限运行.
有好办法吗?
我试图使用以下代码控制远程计算机上的服务:
// Error checking omitted for brevity
HANDLE hToken = NULL;
// user = username with no domain specification
// domain = targetmachine when targetting computer outside of domain
LogonUser(user, domain, password,
LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken);
ImpersonateLoggedOnUser(hToken);
SC_HANDLE hSc = OpenSCManager(targetmachine,
SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS);
Run Code Online (Sandbox Code Playgroud)
从使用当前登录用户的凭据以及使用其他凭据时,从本地域中的计算机运行并在同一域上定位计算机时,此方法可以正常工作.
但是,当我尝试定位不在任何域上的计算机时,OpenSCManager如果我指定除了SC_MANAGER_CONNECT所需访问之外的任何内容,则调用将失败并拒绝访问.从域外的计算机中定位域计算机(对于作为目标计算机上的本地管理员的域用户,使用用户/域/密码组合).从域外的计算机定位域外的计算机不起作用.
用户/密码是针对目标计算机上管理员组的成员,因此帐户权限不应存在问题.
我已经检查了scmanager安全描述符sc -sdshow scmanager,它对于域计算机和非域计算机是相同的.两者都运行Windows 7 64位.
我也测试过使用psexec,它有相同的症状,即在域计算机之间工作正常但在目标非域计算机时不能.
我还测试了在目标计算机上禁用RPC over TCP并重新启动它,因为这被描述为访问被拒绝错误的可能原因,但这似乎没有帮助.我还测试了在targetmachine上禁用Windows防火墙,但没有变化.
是否需要启用某些设置才能使远程服务配置正常工作?
我喜欢这个功能,但在当前版本的Windows中,单击"取消阻止"按钮并单击"应用"绝对没有任何效果.这可能会导致问题 - 某些文件无法正常运行.

话虽如此,我还是找不到解决方法.但我相信有一个cmd命令来取消阻止文件.
如何使用批处理脚本或wsh(jscript或vbscript)甚至是Powershell脚本来取消阻止文件?
比方说,如果我有一个进程ID PID,是否有一个WinAPI来查明是否为该特定进程启用/禁用了ASLR?
我们的 VB6 旧应用程序调用 RegSetValueEx 来设置注册表值。可以使用 regedit 轻松设置此注册表值。但是,当我们的应用程序尝试设置它时,RegSetValueEx 返回 5 - Access Is Denied。
我们使用相同的代码写入其他注册表项,一切正常。此外,用户是本地管理员。
密钥是使用 KEY_ALL_ACCESS 打开的,但我尝试使用 (KEY_READ 或 KEY_WRITE) 并且这也不起作用。
Private Const READ_CONTROL = &H20000
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_NOTIFY = &H10
Private Const SYNCHRONIZE = &H100000
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const STANDARD_RIGHTS_WRITE = …Run Code Online (Sandbox Code Playgroud) 我很好奇是否有办法阻止用户(包括属于管理员组的用户)获取文件的所有权?
我最初是从我在Local System帐户下运行的服务创建这样的文件.然后我把这个文件的DACL,以D:(A;OICI;GA;;;SY)仅让SYSTEM帐户具有完全访问权限,并设置my service为所有者:
DWORD dwRes = ::SetNamedSecurityInfo(
strDataFilePath,
SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION, // change only the object's owner
pMyServiceUserSid, // User SID for my service
NULL,
NULL,
NULL);
Run Code Online (Sandbox Code Playgroud)
但是完成所有这些后,我仍然可以通过Windows资源管理器作为管理员获取此文件的所有权:
有谁知道 Windows Hello 中的安全凭据位于何处以及如何删除它们?
我正在使用 Web 身份验证 API 实现身份验证,并且在处理代码时我创建了数百个凭据,我想以某种方式删除它们。
navigator.credential.get({ ... })
Run Code Online (Sandbox Code Playgroud)
只需调用get()一两分钟即可加载所有这些并显示此对话框:
根据我对数字签名的理解,当代码签名exe时,"签名者"修改了PE本身.我注意到它将证书内容添加到PE的末尾,并且(显然)添加了对标题的某种引用.
我的问题是:这有多安全?能够对可执行文件进行逆向工程的人是否能够将其伪装到他自己的可执行文件上,从而伪造数字签名?