Windows: Làm thế nào để khiến các chương trình nghĩ rằng chúng không chạy trong phiên máy chủ đầu cuối?


11

Tôi đang sử dụng chương trình "SoftXPand 2011 Duo" của Solitairerame trên PC Windows 7 của mình. Nó làm cho hai máy trạm ra khỏi một máy tính. Nó sử dụng các dịch vụ đầu cuối được tích hợp trong Windows để tạo phiên bổ sung. Tôi sử dụng hai màn hình, hai bàn phím và hai con chuột để tạo ra "ảo ảnh" này của hai máy tính. Nó hoạt động khá tốt và tôi thậm chí có thể chơi hai trò chơi 3D khác nhau trên hai màn hình được gắn vào máy đơn này (sử dụng Radeon HD5770 và Core i5 2500k với RAM 8 Gbyte).

Có một vài nhược điểm này. Tôi chỉ tìm thấy về một cái được ẩn trong cái nhìn đầu tiên. Các phiên bạn tham gia (ngay cả trên máy trạm đầu tiên) sẽ xác định là phiên máy chủ đầu cuối! Bây giờ một số chương trình sẽ chạy với các hiệu ứng hạn chế (đồ họa) và một số chương trình sẽ không chạy được.

Điều này cũng dẫn đến một số trò chơi không chạy chút nào. Họ chỉ cần nói "Không thể chạy trong phiên máy chủ đầu cuối" và thoát. Tôi đã chứng minh rằng các trò chơi hiện đại hàng đầu (DirectX 10, 11) chạy tốt như trên cùng một máy không có SoftXPand, vì vậy đây là một hạn chế khá giả tạo!

Vì vậy, bằng cách nào đó tôi có thể hack phiên hiện tại của mình để nó không giống như phiên máy chủ đầu cuối nữa không? I E

#include <windows.h>
#pragma comment(lib, "user32.lib")

BOOL IsRemoteSession(void)
{
   return GetSystemMetrics( SM_REMOTESESSION );
}

Sẽ trả lại SAI? (Không phải là câu hỏi lập trình! Chỉ là một ví dụ về cách các chương trình phát hiện nếu chúng ở trong phiên máy chủ đầu cuối!)


Bạn có hai bàn phím / màn hình? Xin hãy giải thích thêm về thiết lập của bạn.
harrymc

@harrymc Vâng, tôi có. Chỉnh sửa.
sinni800

Lý do các ứng dụng từ chối chạy trên máy chủ đầu cuối, ngay cả khi bạn đang sử dụng phiên giao diện điều khiển, là vì lý do cấp phép - để một giấy phép không thể được sử dụng bởi nhiều người cùng một lúc.
paradroid

Câu trả lời:


9

Có một số cách để ứng dụng kiểm tra xem ứng dụng có đang chạy trong phiên Terminal Server hay không. Một số trong số bạn có thể hack, như dưới đây:

  1. Đăng ký : HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat.
    Phím này bị thiếu trong một phiên bình thường trên máy tính để bàn của tôi.
    Bạn có thể cố gắng xóa nó, nếu bạn có thể.
  2. Giá trị biến môi trường SESSIONNAME: Bảng điều khiển / "RDP #" / (trống).
    Bạn có thể thử chạy trò chơi của mình từ Dấu nhắc lệnh (cmd) sau khi thực hiện
    SET SESSIONNAME=Console(giá trị máy tính để bàn của tôi) hoặc SET SESSIONNAME=(trống).
    Để tìm ra giá trị hiện tại của nó, nhập SET SESSIONNAMEtrước khi thay đổi bất cứ điều gì.
  3. Hệ thống gọi GetSystemMetrics (SM_REMOTESESSION)GetVersionEx ( OSVERSIONINFOEX.wSuiteMask ) trả về bối cảnh thực hiện.
    Bạn không thể làm gì nhiều với cái này, ngoại trừ việc viết một hook hệ thống cho nó.
    Nếu quan tâm hãy xem bài viết codeproject.com này: API hooking được tiết lộ .

Trên 2), tên phiên là "console" (Cái quái gì vậy?). Khóa TSAppCompat cũng bị thiếu ở đây. Về phần ba ... Có vẻ khó thực hiện. Không có chương trình nào nằm trên một chương trình khác và chặn các cuộc gọi hệ thống như chương trình tôi đã đề cập? GetSystemMetrics.
sinni800

Theo thông tin của bạn, có lẽ phương thức thứ 3 là phương pháp đáng để tấn công cho GetVersionEx và GetSystemMetrics. Tôi đã thêm một liên kết ở trên (được sử dụng bởi một lập trình viên).
harrymc

Một lưu ý khác: Nếu có cách sử dụng MSTSC / admin trong SoftXPand, thì đây là cách đáng để thử.
harrymc

@harrymc tại sao MSTSC / admin? Tôi sẽ xem xét việc kết nối api ... Nó có thể quá phức tạp đối với khả năng lập trình của tôi.
sinni800

"MSTSC / admin" là một cú đánh khá dài: đó là một loại phiên từ xa khác nhau, vì vậy có thể một số chương trình có thể không phát hiện ra.
harrymc

0

Tôi tìm thấy một giải pháp: chạy các chương trình bạn muốn bằng "runas"

Sau khi bạn đăng nhập qua máy tính để bàn, hãy nhập vào cmd:

runas / người dùng: YOU_NAME "YOU_PROGRAM_PATH"

Tôi đã thử nghiệm nó với phần mềm của Bently và chúng hoạt động tốt.


Điều này phá vỡ sự cố máy chủ đầu cuối? Thú vị, tôi phải cố gắng.
sinni800

Không hoạt động với hiệu ứng khối lượng 3 (Chương trình này không thể chạy từ xa)
Mgamerz

0

Tôi đang sử dụng Microsoft Remote Desktop và tôi đã thử 2 phương pháp đầu tiên được đăng bởi @harrymc, nhưng chúng không hoạt động trong trường hợp của tôi. Thứ ba là quá phức tạp đối với tôi vì vậy tôi đã không thử.

Cuối cùng, tôi thấy rằng Parallel Access cho phép tôi sử dụng chương trình hiển thị lỗi. Nó không mượt mà như RDP, vì vậy tôi sử dụng nó nếu tôi thực sự phải sử dụng chương trình.


0

Không trực tiếp giải quyết câu hỏi SoftXPand nhưng tôi đã kết thúc ở đây vì một tìm kiếm của Google và đó là câu trả lời của @ harrymc.

Tôi đã tạo một tệp bó có độ trễ 60 giây và sau đó khởi động ứng dụng tôi muốn chạy. Tôi đã bắt đầu tệp bó, đăng xuất khỏi kết nối RDP của mình, đợi khoảng 5 phút và sau đó kết nối lại với RDP. Ứng dụng pesky tôi muốn đang đợi tôi khi tôi quay lại. Đây là nội dung tập tin hàng loạt:

timeout 60

start /D "your path here" yourExecutable.exe

Các trích dẫn xung quanh đường dẫn là cần thiết nếu bạn có khoảng trắng trong đường dẫn.

Có các công cụ thông tin hàng loạt từ đây: /programming/8324352/creating-a-batch-file-for-programs-to-start-USE-a-delay

đạo cụ cho anh chàng này: /programming//users/959263/raihan

(nó nói để cung cấp chi tiết và chia sẻ nghiên cứu của tôi)


Tuy nhiên, thành thật mà nói, tôi không biết liệu nó có thể áp dụng cho SoftXPand hay không. Vì tôi không thể "rời khỏi" phiên như với RDP.
sinni800
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.