2011-12-01 34 views
5

Tôi tạo một dịch vụ được xác định là Đăng nhập với tư cách Quản trị viên.
Dịch vụ này thực hiện hệ thống ("sử dụng mạng Z: \ .../người dùng: mật khẩu người dùng") và hoàn tất thành công.Ổ đĩa mạng không khả dụng nếu được ánh xạ theo dịch vụ

Nếu tôi (làm Quản trị viên) chạy "sử dụng mạng", tôi thấy Z: thực sự được thêm, nhưng với trạng thái - không khả dụng.

Tôi đã thử thêm ImpersonateLoggedOnUser vào dịch vụ, nhưng điều đó không hữu ích.

Hệ điều hành: Win XP

Tôi đang thiếu gì?

+0

http://www.ljcreate.com/support/faqs/answers.asp?ID=1254 có trợ giúp không? –

+0

Đã thêm "OS: Win XP", vì vậy không thực sự, nhưng cảm ơn. –

+0

Có nhiều cách khác nhau (phức tạp) có thể thực hiện được. Một là nhân đôi mã thông báo người dùng liên kết với một trong các quy trình tương tác và sau đó gọi CreateProcessAsUser. Khác là bằng cách tiêm một cuộc gọi đến NetUseAdd vào một trong các quy trình tương tác. Nhưng nó gần như chắc chắn sẽ hợp lý hơn khi chỉ chạy mã của bạn trong ngữ cảnh tương tác để bắt đầu. Để nhắc lại câu hỏi của Werner: bạn đang cố gắng làm gì? –

Trả lời

5

ImpersonateLoggedOnUser không mạo danh phiên đăng nhập từ mã thông báo người dùng, chỉ là ngữ cảnh bảo mật. Tuy nhiên, CreateProcessAsUser sẽ có thể tạo một quy trình mới trong phiên đăng nhập được liên kết với mã thông báo người dùng được chỉ định.

Lưu ý rằng việc gọi LogonUser để nhận mã thông báo người dùng cho CreateProcessAsUser sẽ không hoạt động, vì mã thông báo này sẽ không nằm trong cùng phiên đăng nhập với tư cách người dùng đã đăng nhập. Bạn phải tìm một trong các quy trình của người dùng và nhân đôi mã thông báo của nó.

Phiên đăng nhập không được ghi lại đầy đủ, nhưng tất cả bạn thực sự cần biết rằng mỗi lần người dùng được xác thực phiên đăng nhập riêng biệt được tạo và mỗi phiên đăng nhập đó có một bộ ánh xạ ổ đĩa mạng khác nhau. Phiên đăng nhập không giống như phiên dịch vụ đầu cuối.

Trong Windows Vista trở lên, hai phiên đăng nhập được tạo khi người dùng quản trị đăng nhập, một phiên được liên kết với mã thông báo bị hạn chế và mã được liên kết với mã thông báo nâng lên.

Bạn có thể tra cứu phiên đăng nhập được liên kết với mã thông báo bằng cách sử dụng hàm GetTokenInformation với tùy chọn TokenStatistics. Phiên đăng nhập được xác định bởi AuthenticationId LUID. Để thực hiện công việc này, dịch vụ của bạn sẽ cần phải tìm ra lần đầu tiên khi người dùng đăng nhập, đợi một quá trình liên quan đến phiên mới bắt đầu, đảm bảo quá trình này không phải là quá trình nâng cao, sau đó sao chép mã thông báo truy cập.

Thay vào đó, tùy chọn tốt nhất của bạn là chia ứng dụng thành hai thành phần. Một thành phần sẽ chạy với tư cách là người dùng (bạn có thể khởi động tự động bằng cách sử dụng phím Run) và chịu trách nhiệm ánh xạ ổ đĩa mạng. Nó có thể liên hệ với dịch vụ để có được bất kỳ thông tin cần thiết, hoặc thông qua một đường ống được đặt tên hoặc một khóa registry.

3

Nhật ký Windows trên Quản trị viên và sử dụng mã thông báo đăng nhập để bắt đầu dịch vụ. Nếu bạn đăng nhập tương tác, Windows sẽ tạo một mã thông báo đăng nhập cho bạn. Hai mã thông báo không liên quan đến nhau. Các thiết bị được ánh xạ được ánh xạ cho một mã thông báo phiên/đăng nhập, do đó nếu dịch vụ ánh xạ thiết bị mà bạn không thấy nó trong phiên đăng nhập của mình.

+0

Điều đó giải thích vấn đề, nhưng nó có thể được giải quyết? Tôi có thể mạo danh mã thông báo tương tác không? Tôi có thể tạo bản đồ cho hơn 1 phiên không? Bất kỳ loại workaround? –

+0

Có thể bạn có thể nói những gì bạn muốn đạt được và tại sao tin rằng dịch vụ nên tạo bản đồ ổ đĩa cho người dùng đã đăng nhập tương tác !? –

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