Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <stdio.h>
- #include <TlHelp32.h>
- #define SIZE 1024
- int main()
- {
- //Создание канала B
- HANDLE stPipe; //Хэндл канала
- LPTSTR pipeName = TEXT("\\\\.\\pipe\\SimplePipe"); //Имя канала
- while (TRUE)
- {
- stPipe = CreateFile(pipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
- //Создает или открывает файл или устройство ввода-вывода. Наиболее часто используемые устройства ввода / вывода: файл, поток файлов, каталог,
- //физический диск, том, буфер консоли, стример, ресурс связи, почтовый ящик и канал. Функция возвращает дескриптор, который можно использовать
- //для доступа к файлу или устройству для различных типов ввода / вывода в зависимости от файла или устройства и указанных флагов и атрибутов.
- if (stPipe != INVALID_HANDLE_VALUE)
- {
- break;
- }
- if (GetLastError() != ERROR_PIPE_BUSY)
- //Получает значение кода последней ошибки вызывающего потока.
- //Код последней ошибки поддерживается для каждого потока.
- //Несколько потоков не перезаписывают код последней ошибки друг друга.
- {
- puts("CreateFile (process B) failed!\n");
- return -1;
- }
- if (!WaitNamedPipe(pipeName, 20000))
- {
- puts("Couldn't open pipe (process B), 20 sec timed out!\n");
- return -1;
- }
- }
- //Получение указателя на начало памяти
- char BmemoryPointer[SIZE];
- DWORD BnumBytes = SIZE;
- char** end = NULL;
- if (!ReadFile(stPipe, BmemoryPointer, BnumBytes, NULL, NULL))
- {
- //Считывает данные из указанного файла или устройства ввода / вывода (I / O).
- //Чтение происходит в позиции, указанной указателем файла, если поддерживается устройством.
- puts("Error! memoryPointer couldn't read\n");
- CloseHandle(stPipe);
- system("pause");
- return -1;
- }
- LPVOID Bmemory = strtol(BmemoryPointer, &end, 16);
- //Выводим строку в консоль
- printf("Your string was:\n%s", (char*)Bmemory);
- //Показываем, что вывели
- DWORD okEnd = 0;
- if (!WriteFile(stPipe, "OK", 3, &okEnd, NULL))
- {
- //Эта функция предназначена как для синхронной, так и для асинхронной работы.
- puts("Error! Flag didn't write!\n");
- CloseHandle(stPipe);
- system("pause");
- return -1;
- }
- //Очистка
- CloseHandle(stPipe);
- system("pause");
- return 0;
- }
Add Comment
Please, Sign In to add comment