Я следовал приведенному здесь примеру, чтобы запустить процесс и прочитать выходные данные, а также прочитал информацию и примеры здесь, чтобы изменить анонимный канал на именованный канал для асинхронного чтения входных данных. Пока все хорошо.
Однако на второй странице есть замечание об удаленном доступе:
Именованный Каналы можно использовать для обеспечения связи между процессами на одном компьютере или между процессами на разных компьютерах в сети. Если служба сервера запущена, все именованные каналы доступны удаленно. Если вы собираетесь использовать именованный канал только локально, запретите доступ к NT AUTHORITY\NETWORK или переключитесь на локальный RPC.
Поскольку этот канал используется исключительно для чтения вывода запущенной программы я использую именованный канал только локально (хотя в других ситуациях программа взаимодействует с сетью). Однако я не могу понять, как запретить доступ к NT AUTHORITY\NETWORK. Как мне это сделать? На странице нет ссылок, и Google мне тоже не помог. Или, случайно, достаточно, если я установил флаг PIPE_REJECT_REMOTE_CLIENTS в аргументе dwPipeMode CreateNamedPipe (хотя я предполагаю, что нет)?
В случае необходимости, вот приблизительная схема рассматриваемого кода без обработки ошибок для простоты:
SECURITY_ATTRIBUTES attr;
attr.nLength = sizeof(SECURITY_ATTRIBUTES);
attr.bInheritHandle = TRUE;
attr.lpSecurityDescriptor = NULL;
HANDLE event = CreateEvent(&attr, TRUE, TRUE, NULL);
OVERLAPPED overlap;
overlap.hEvent = event;
overlap.Offset = 0;
overlap.OffsetHigh = 0;
HANDLE pipeHandle{ CreateNamedPipeW(
pipename.c_str(),
PIPE_ACCESS_OUTBOUND | FILE_FLAG_FIRST_PIPE_INSTANCE | FILE_FLAG_OVERLAPPED,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT | PIPE_REJECT_REMOTE_CLIENTS,
1,
BUFSIZE * sizeof(TCHAR),
BUFSIZE * sizeof(TCHAR),
5000,
&attr
)};
BOOL connected = ConnectNamedPipe(pipeHandle, &overlap);
STARTUPINFO si;
PROCESS_INFORMATION info;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&info, sizeof(info));
si.hStdError = pipeHandle;
si.hStdOutput = pipeHandle;
si.dwFlags |= STARTF_USESTDHANDLES;
CreateProcessW(
exe.c_str(),
command.data(),
NULL,
NULL,
TRUE,
CREATE_SUSPENDED | CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&info);
HANDLE job = CreateJobObjectW(NULL, NULL);
AssignProcessToJobObject(job, info.hProcess);
ResumeThread(info.hThread);
CloseHandle(pipeHandle);
HANDLE file = CreateFileW(
pipename.c_str(),
GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
DWORD dwRead, dwWritten;
CHAR buf[BUFSIZE];
BOOL success = FALSE;
HANDLE waitHandles[] = {info.hProcess, cancelSimulation, overlap.hEvent};
DWORD procResult{};
while (true) {
//monitor with WaitForMultipleObjects
//and handle the thread being cancelled, the process exiting, and stdout getting data
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... ty-network
Как запретить доступ к NT AUTHORITY\NETWORK? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Apple Worldwide Developer Relations Authority Управление промежуточное сертификат и iOS
Anonymous » » в форуме IOS - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-