Sau khi đọc this post trên SO, tôi đã cố viết một ứng dụng nhỏ, tôi cần đọc và ghi các khóa/giá trị đăng ký ẩn.
Tôi đã kiểm tra Registry Manipulation using NT Native APIs và Creating "Hidden" Registry Values liên kết.
Đầu tiên đã cho tôi một cái gì đó để làm việc trên, nhưng nó được viết bằng C + + trong khi thứ hai là một dự án Delphi làm việc tốt.
Tôi không thể chuyển đổi đầu tiên và tôi có thể thử chuyển đổi thứ hai, nhưng tôi cũng cần phải tìm một số mã để đọc khóa/giá trị. Vì lý do này, tôi muốn biết nếu có một cái gì đó "sẵn sàng" và thử nghiệm trong C#.
Tôi cũng đã tải xuống mã nguồn Proces Hacker v1.11 và sử dụng nó để chuyển đổi một phần ví dụ Delphi như được hiển thị bên dưới, nhưng khóa đăng ký ẩn có thể truy cập được (trong khi ở Delphi không phải) và không có API để ghi giá trị.Các khóa/giá trị đăng ký ẩn
static void Main(string[] args)
{
string KeyNameBuffer = @"\Registry\User\S-1-5-21-3979903645-2167650815-2353538381-1001\SOFTWARE";
string NewKeyNameBuffer = "Systems Internals";
string HiddenKeyNameBuffer = "Can't touch me\0";
string HiddenValueNameBuffer = "Hidden Value";
// Apro la chiave di registro
IntPtr SoftwareKeyHandle = CreateKey(KeyNameBuffer, IntPtr.Zero);
if (SoftwareKeyHandle != IntPtr.Zero)
{
IntPtr SysKeyHandle = CreateKey(NewKeyNameBuffer, SoftwareKeyHandle);
if (SysKeyHandle != IntPtr.Zero)
{
// This key shouldn't be accessible, but it is
IntPtr HiddenKeyHandle = CreateKey(HiddenKeyNameBuffer, SysKeyHandle);
if (HiddenKeyHandle != IntPtr.Zero)
{
// I don't have APIs to write values
}
}
}
}
static IntPtr CreateKey(string keyName, IntPtr rootKey)
{
IntPtr res;
KeyCreationDisposition disp;
ObjectAttributes attributes = new ObjectAttributes(keyName,
ObjectFlags.CaseInsensitive,
new NativeHandle(rootKey));
NtStatus st = Win32.NtCreateKey(out res, KeyAccess.All,
ref attributes, 0,
IntPtr.Zero, RegOptions.NonVolatile, out disp);
return st == NtStatus.Success ? res : IntPtr.Zero;
}
Cuối cùng: từ Vista, bạn có thể không viết \Registry\Machine
phần nếu bạn không chạy ứng dụng của bạn as Administrator, vì vậy trong ví dụ này tôi sử dụng khóa registry người dùng của tôi. Có cách nào để chúng tôi bản địa API để viết rằng một phần của registry nếu tôi cần phải lưu trữ một giá trị cho mỗi máy?