Tôi có một ứng dụng đang chạy với tư cách người dùng bình thường và một dịch vụ đang chạy dưới dạng hệ thống cục bộ. Tôi muốn ứng dụng có thể yêu cầu dịch vụ bắt đầu lại ứng dụng, khi dịch vụ đã thực hiện một số nội dung khác. (Vì vậy, ứng dụng sẽ không chạy trong khi dịch vụ đang thực hiện "điều"). Để dịch vụ có thể khởi động ứng dụng khi người dùng bắt đầu ứng dụng, nó cần một mã thông báo người dùng. Ứng dụng gửi mã thông báo tới dịch vụ trước khi nó thoát, nhưng token/handle không hợp lệ khi dịch vụ đang cố gắng sử dụng nó. (Điều đầu tiên nó xảy ra với nó là DuplicateTokenEx để nhận mã thông báo chính.)Làm cách nào để nhận được mã thông báo người dùng hợp lệ cho CreateProcessAsUser?
Mã thông báo người dùng luôn chỉ hợp lệ trong quá trình được gọi là OpenProcessToken?
Có cách nào khác có thể thực hiện được không? Tôi không muốn người dùng phải "đăng nhập" vào ứng dụng bằng logonuser. Điều đó sẽ chỉ là ngớ ngẩn. Tôi đoán tôi có thể giao một quy trình xử lý cho "explorer.exe" từ ứng dụng tới dịch vụ mà dịch vụ có thể sử dụng để nhận mã thông báo người dùng, nhưng điều đó sẽ yêu cầu quyền truy cập PROCESS DUP HANDLE ngay. Tôi không vui mừng về giải pháp đó, nhưng có lẽ đó là cách để làm điều đó?
Cảm ơn, tôi sẽ đi kèm bài viết đầu tiên, tạo mã thông báo với ZwCreateToken. Đó là một chút lộn xộn để đóng gói tất cả những thứ tôi cần trong một tin nhắn, nhưng dường như đã làm việc cho những người khác .. –
Bài viết đầu tiên dường như có một số lỗi, thứ hai trông khá tốt.Nhưng tôi không chắc chắn lý do tại sao bạn sẽ sử dụng ZwCreateToken (một phương pháp không được tài liệu, không được hỗ trợ và không hoàn toàn ổn định) khi có các phương pháp được làm tài liệu để thực hiện những gì bạn muốn. –
Xin lỗi, ý tôi là thứ hai. Thậm chí không thể tìm thấy đầu tiên. Tôi đang làm một cái gì đó như http://www.apnilife.com/E-Books_apnilife/Windows%20Programming_apnilife/Windows%20NT%20Undocumented%20APIs/1996%20Ch08_apnilife.pdf. Bạn đang đề cập đến CreateToken? –