Я следовал приведенному здесь примеру, чтобы запустить процесс и прочитать выходные данные, а также прочитал информацию и примеры здесь, чтобы изменить анонимный канал на именованный канал для асинхронного чтения входных данных. Пока все хорошо.
Однако на второй странице есть замечание об удаленном доступе:
Именованный Каналы можно использовать для обеспечения связи между процессами на одном компьютере или между процессами на разных компьютерах в сети. Если служба сервера запущена, все именованные каналы доступны удаленно. Если вы собираетесь использовать именованный канал только локально, запретите доступ к 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++
Программы на C++. Форум разработчиков
-
Anonymous
1731532292
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79186159/how-do-i-deny-access-to-nt-authority-network[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия