Ограничение области действия NamedPipeServerStream - PullRequest
1 голос
/ 11 июня 2011

Я хотел бы использовать NamedPipeServerStream для выполнения небольшого IPC между экземплярами приложения. Однако я хочу настроить таргетинг на сервер, только если он находится в том же сеансе сервера терминалов, что и клиент (если приложение запущено в среде TS).
Идея для достижения этой цели состояла бы в том, чтобы использовать SID пользователя входа в систему и связать его с именем Pipes. Однако я думаю, что это создаст проблемы, если пользователь вошел в систему из двух разных мест, и это также кажется мне не очень аккуратным.

Есть ли возможность предоставить NamedPipeServerStream область, в которой он отвечает на вызовы, и установить эту область так, чтобы RDP-Session строил границу? Или у кого-то есть хорошая идея, как ограничить сферу / добиться желаемого поведения?

1 Ответ

2 голосов
/ 11 июня 2011

Если вы хотите ограничить его только одним сеансом, вы можете создать именованный мьютекс в локальном пространстве имен, чтобы ограничить его видимость в вашем сеансе. Когда клиент хочет подключиться он может создать тот же мьютекс, и если он вернется как последний код ошибки ERROR_ALREADY_EXISTS, он знает, что в текущем сеансе сервер канала является.

Вы можете получить текущий номер сеанса вашего процесса через ProcessIdToSessionId , чтобы вы могли создать именованный сервер канала с идентификатором сеанса в его имени.

[DllImport("kernel32.dll",SetLastError=true)]
static extern int ProcessIdToSessionId(int pid, ref int session);

Addenum: Чтобы получить текущий идентификатор сессии, вы можете просто использовать Process.GetCurrentProcess (). SessionId вместо подписи PInvoke, определенной выше.

...