Как запретить доступ к NT AUTHORITY\NETWORK?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как запретить доступ к NT AUTHORITY\NETWORK?

Сообщение Anonymous »

Я следовал приведенному здесь примеру, чтобы запустить процесс и прочитать выходные данные, а также прочитал информацию и примеры здесь, чтобы изменить анонимный канал на именованный канал для асинхронного чтения входных данных. Пока все хорошо.
Однако на второй странице есть замечание об удаленном доступе:

Именованный Каналы можно использовать для обеспечения связи между процессами на одном компьютере или между процессами на разных компьютерах в сети. Если служба сервера запущена, все именованные каналы доступны удаленно. Если вы собираетесь использовать именованный канал только локально, запретите доступ к 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»