根据存储的值类型,我必须使用以下方法之一:
GetBinaryValue
GetDWORDValue
GetExpandedStringValue
GetMultiStringValue
GetStringValue
Run Code Online (Sandbox Code Playgroud)
如果我所知道的值是hive,key和value name,我不想尝试所有五个.有没有办法做到这一点?我正在使用WMI,但如果唯一的方法是使用advapi32.dll方法,我对此持开放态度.
它是一个指向LSA_UNICODE_STRING结构数组的指针.我找到了一些反向的代码,即LSA_UNICODE_STRING从C#字符串创建一个.您可以在下面的帮助程序代码部分中看到.
我LsaEnumerateAccountRights()所做的和包括呼叫似乎工作得很好.为数组指针和计数返回合理的值.
我手足无措,如何获得在那些抨击字符串.请帮忙?好吗?
更新: nobugz的帮助函数在下面的答案中几乎是正确的,你只需要将长度除以UnicodeEncoding.CharSize.多亏了他,我现在可以看到数组中的FIRST字符串了.请参阅下面两个代码部分末尾的更新.
现在,我如何做地狱世界的指针运算?
更新2.5:查看功能代码的答案.我丢失了旧的"错误"代码.
假设我有一个这样的多行字符串:
STARTFRUIT
banana
ENDFRUIT
STARTFRUIT
avocado
ENDFRUIT
STARTVEGGIE
rhubarb
ENDVEGGIE
STARTFRUIT
lime
ENDFRUIT
Run Code Online (Sandbox Code Playgroud)
我想搜寻所有水果,没有蔬菜.我试试这个:
MatchCollection myMatches = Regex.Matches(tbBlob.Text, "STARTFRUIT.*ENDFRUIT", RegexOptions.Singleline);
foreach (var myMatch in myMatches)
{
Forms.MessageBox.Show(String.Format("Match: {0}", myMatch), "Match", Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Information);
}
Run Code Online (Sandbox Code Playgroud)
问题是,它给了我一个包含第一个STARTFRUIT和开头以及最后一个ENDFRUIT的大匹配,而不是给我一个三个匹配的数组.有没有办法"最小化"匹配搜索?我没有看到任何帮助RegexOptions.
我认为HKEY_USERS正下方的关键名称应该是在某个时间登录此计算机的用户名.但在我的机器上出现的是:
S-1-5-18
S-1-5-19
S-1-5-20
S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN
S-1-5-21-NNNNNNNNN-NNNNNNNNN-NNNNNNNNNN-NNNNN_Classes
Run Code Online (Sandbox Code Playgroud)
我希望能够确定哪个子树对应哪个用户.我怎样才能做到这一点?
编辑:我需要的是从SID获取用户名.我想检查已经登录的每个用户的配置,我需要知道他们的名字.例如,在上面的注册表中,我需要基于字符串"S-1-5-21-nnnnnnnnn为-nnnnnnnnn为-NNNNNNNNNN-NNNNN",发现它对应于DOMAIN \某人,或LOCALMACHINENAME \才能够,其他人.
我正在逐步了解Linux中的Mono开发.我正在尝试调用Linux C库.这页,在理论上,告诉我怎么样,但是当我输入的MonoDevelop 2.2.2(Fedora 13的),下面的代码,我得到一个"分析错误(CS8025)","私人静态外部INT GETPID();".而且,帮助系统不起作用.
using System;
using System.Runtime.InteropServices;
[DllImport("libc.so")]
private static extern int getpid();
namespace LinuxCaller
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine ("Hello World!");
}
}
}
Run Code Online (Sandbox Code Playgroud) 如显示rpm -qi package?
我真的不想解析输出rpm -qi.我更愿意使用rpm -q --qf,我可以控制格式,并且不会受到未来版本的美学异想天开.
但是我在手册页中找到的唯一有用的标签是SIGPGP,它为我提供了整个签名,而不仅仅是短密钥ID.看到不同:
$ rpm -qi coreutils
Name : coreutils Relocations: (not relocatable)
Version : 8.4 Vendor: Fedora Project
Release : 8.fc13 Build Date: Tue 20 Jul 2010 05:21:15 AM BRT
Install Date: Tue 03 Aug 2010 01:58:53 PM BRT Build Host: x86-17.phx2.fedoraproject.org
Group : System Environment/Base Source RPM: coreutils-8.4-8.fc13.src.rpm
Size : 12659257 License: GPLv3+
Signature : RSA/SHA256, Tue 20 Jul 2010 03:14:09 PM BRT, Key ID 7edc6ad6e8e40fde
Packager …Run Code Online (Sandbox Code Playgroud) 一位同事告诉我,如果我的WMI系统信息收集查询只是前向和/或只读,那么它们会更快.那讲得通.但是我该怎么办呢?
我需要能够在远程计算机上运行RegLoadKey(),并且可能是我的计算机和远程计算机不在同一个域中.如果是,则以下代码可以正常工作,我可以冒充在该计算机上具有管理员权限的用户.否则,如果我们谈论本地用户,根据这个讨论,我发现......
http://www.eggheadcafe.com/conversation.aspx?messageid=34224301&threadid=34224226
...我的机器上必须有一个本地用户,用户名和密码相同.啊.有办法吗?
using System.Runtime.InteropServices;
using System.Security.Principal;
[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool RevertToSelf();
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
public WindowsImpersonationContext WearDrag(string …Run Code Online (Sandbox Code Playgroud) (编辑)情节变厚:相同的代码(无需模拟!)从 Windows 7 客户端成功运行,但不能从 Windows 2008 R2 客户端成功运行!这是有问题的代码。(原始消息遵循下面的代码。)
var entry = new DirectoryEntry("IIS://" + tbHost.Text + "/W3SVC", tbUsername.Text, tbPassword.Password);
foreach (DirectoryEntry site in entry.Children)
{
Console.Write("Site {0}\n", site.Name);
foreach (PropertyValueCollection prop in site.Properties)
Console.Write("{0}={1}\n", prop.PropertyName, prop.Value);
}
Run Code Online (Sandbox Code Playgroud)
我在这里读到,对于 IIS 提供程序,您不能在创建DirectoryEntry对象时传递凭据。你必须做模拟。所以我尝试了下面的代码,但是当我尝试读取一个属性时,我仍然得到一个带有“未知错误 (0x80005000)”文本的 COMException,就像我之前尝试为DirectoryEntry构造函数传递用户名和密码时所做的那样。这是纲要:
LogonUser()成功,凭据正常。在我发现我必须使用LOGON32_LOGON_NEW_CREDENTIALS而不是LOGON32_LOGON_INTERACTIVE.hosts文件中,这样我就可以通过名字找到它。.
const int LOGON32_LOGON_INTERACTIVE = 2;
const int LOGON32_LOGON_NETWORK = 3;
const int LOGON32_LOGON_NEW_CREDENTIALS = …Run Code Online (Sandbox Code Playgroud) 我正在操作列表中的项目System.Management.ManagementObjectCollection.这些项中的每一项System.Management.ManagementObject都包含以字符串索引的属性.看到:
foreach (ManagementObject queryObj in searcher.Get())
{
string osversion = (string)queryObj["Version"];
string os = (string)queryObj["Name"];
uint spmajor = (uint)queryObj["ServicePackMajorVersion"];
uint spminor = (uint)queryObj["ServicePackMinorVersion"];
...
...
...
}
Run Code Online (Sandbox Code Playgroud)
每个"字典访问" queryObj返回一个C#object,实际上无论属性是什么 - 我必须事先知道它们的"真实"类型,这没关系.
问题是,我InvalidCastException在uint演员阵容中得到了一个.我必须使用真正的类型,这是ushort.演员不ushort应该uint被接受和明显吗?
在这种情况下,我最终会转换值string,但是如果我不得不让他们到什么uint或int或long变量?