2012-03-06 23 views
16

Tôi đã xem tài liệu cho DuplicateHandle vào ngày khác và nhận thấy rằng DuplicateHandle có thể sao chép các chốt xử lý khóa đăng ký (HKEY s). Đọc thêm về điều này một chút trong cuốn sách SysInternals dường như chỉ ra rằng các chốt khóa registry là các đối tượng hạt nhân đơn giản, tương tự như các tập tin xử lý. Tuy nhiên, CloseHandle không thể đóng HKEY s và RegCloseKey không thể đóng các loại đối tượng hạt nhân khác.Tại sao RegCloseKey tồn tại (khi CloseHandle có vẻ thực hiện cùng chức năng)?

Tại sao nên phân biệt?

+0

Hmm, tôi chỉ có thể đoán rằng HKEY đã được giới thiệu trước đó (trong Windows 3.1), và sau đó Microsoft không muốn hợp nhất các giao diện ngay cả khi việc triển khai đã được hợp nhất. – Philipp

+1

Tôi chỉ đoán ở đây: Vào cuối tài liệu cho 'CloseHandle()' nó nói: > Đóng chốt xử lý không chấm dứt chuỗi liên kết hoặc xóa đối tượng chuỗi. Đóng trình xử lý không chấm dứt quá trình liên quan hoặc loại bỏ đối tượng quy trình. Để loại bỏ một đối tượng chuỗi, bạn phải chấm dứt luồng, sau đó đóng tất cả các chốt xử lý vào luồng. Để biết thêm thông tin, hãy xem Chấm dứt một Chủ đề. Để loại bỏ một đối tượng quá trình, bạn phải chấm dứt quá trình, sau đó đóng tất cả các xử lý cho quá trình. Có thể thực hiện các thao tác tương tự trong khi đóng khóa đăng ký. – yasouser

+0

@Philipp: Đó cũng là những gì tôi nghĩ, ngoại trừ ví dụ: CreateFile nằm trong Win3.1 ngày (nếu tôi không nhầm), và không có chức năng "CloseFile". –

Trả lời

14

Đó là vì chỉ một phần chức năng của sổ đăng ký được thực hiện trong hạt nhân. Nó bao gồm các hoạt động cơ bản (tạo, xóa, đọc, viết, vv) để làm việc với các khóa registry cục bộ.

Các chức năng còn lại được thực hiện trong advapi32.dll và làm việc trong chế độ người dùng:

  • Tiếp cận một registry từ xa sử dụng RegConnectRegistry
  • Truy cập vào HKEY_PERFORMANCE_DATA
  • Chuyển đổi đại diện registry Win32 để Native đại diện
  • Chuyển hướng đăng ký của WOW64 trên hệ thống 64 bit (đối với các ứng dụng 32 bit)

Phần hạt nhân của chức năng có sẵn thông qua API gốc: NtCreateKey, NtOpenKey, v.v. Khi so sánh các hàm này với API Win32, có thể thấy rằng API Native sử dụng các mô tả HANDLE "cổ điển" thay vì HKEY.

+0

Như tôi đã nói lý do cho điều này là một số chức năng của sổ đăng ký được thực hiện trong chế độ người dùng (advapi32.dll), và không phải tất cả các đối tượng HKEY trong thực tế là HANDLEs "thực". – Flot2011

+0

Xin lỗi, vâng, tôi đã xóa nhận xét của mình vì tôi thấy rằng trong thời gian chờ đợi :) –

+0

@ Flot2011: Bạn tò mò, bạn có thể trích dẫn nguồn thông tin không? Tôi đang tìm kiếm khó khăn để có được những loại thông tin loại "nội bộ". – yasouser

Các vấn đề liên quan