2009-10-07 24 views
17

Có thể ứng dụng C++ chạy trên Windows để loại bỏ đặc quyền khi chạy không?Giảm đặc quyền trong C++ trên Windows

Ví dụ: nếu người dùng khởi động ứng dụng của tôi với tư cách Quản trị viên, nhưng không có lý do gì để chạy ứng dụng của tôi với tư cách quản trị viên, tôi có thể từ bỏ quyền quản trị viên không?

Tóm lại, tôi muốn viết mã trong hàm main() làm giảm các đặc quyền mà tôi không cần (ví dụ: Viết quyền truy cập vào thư mục Windows).

Trả lời

16

Có, bạn có thể sử dụng AdjustTokenPrivileges để xóa các đặc quyền không cần thiết và nguy hiểm khỏi mã thông báo của mình. Bạn có thể vô hiệu hóa nếu không cần thiết ngay lập tức (đặc quyền có thể được kích hoạt sau) hoặc loại bỏ một đặc quyền từ mã thông báo của bạn hoàn toàn.

Bạn cũng có thể tạo mã thông báo bị giới hạn qua CreateRestrictedToken và khởi chạy lại ứng dụng đang chạy bằng mã thông báo bị hạn chế đó. CreateRestrictedToken có thể được sử dụng để vô hiệu hóa các đặc quyền và loại bỏ các nhóm (như Nhóm quản trị) từ một mã thông báo.

Bạn có thể sử dụng AdjustTokenGroups để xóa nhóm quản trị viên khỏi mã thông báo của quy trình đang chạy của bạn, nhưng tôi chưa bao giờ thử điều này trên quy trình đã chạy.

Lưu ý rằng quyền truy cập ghi vào thư mục Windows không thuộc phạm vi đặc quyền. Tài nguyên trong hệ thống có ACL's chi phối ai có quyền truy cập. Hệ thống và quản trị viên có quyền ghi vào thư mục Windows.

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