EgorS2000

Untitled

Dec 15th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.02 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <TlHelp32.h>
  4.  
  5. #define SIZE 1024
  6.  
  7. int main()
  8. {
  9.     //Создание канала B
  10.  
  11.     HANDLE stPipe; //Хэндл канала
  12.     LPTSTR pipeName = TEXT("\\\\.\\pipe\\SimplePipe"); //Имя канала
  13.  
  14.     while (TRUE)
  15.     {
  16.         stPipe = CreateFile(pipeName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
  17.         //Создает или открывает файл или устройство ввода-вывода. Наиболее часто используемые устройства ввода / вывода: файл, поток файлов, каталог,
  18.         //физический диск, том, буфер консоли, стример, ресурс связи, почтовый ящик и канал. Функция возвращает дескриптор, который можно использовать
  19.         //для доступа к файлу или устройству для различных типов ввода / вывода в зависимости от файла или устройства и указанных флагов и атрибутов.
  20.  
  21.         if (stPipe != INVALID_HANDLE_VALUE)
  22.         {
  23.             break;
  24.         }
  25.  
  26.         if (GetLastError() != ERROR_PIPE_BUSY)
  27.         //Получает значение кода последней ошибки вызывающего потока.
  28.         //Код последней ошибки поддерживается для каждого потока.
  29.         //Несколько потоков не перезаписывают код последней ошибки друг друга.
  30.         {
  31.             puts("CreateFile (process B) failed!\n");
  32.             return -1;
  33.         }
  34.  
  35.         if (!WaitNamedPipe(pipeName, 20000))
  36.         {
  37.             puts("Couldn't open pipe (process B), 20 sec timed out!\n");
  38.             return -1;
  39.         }
  40.     }
  41.  
  42.     //Получение указателя на начало памяти
  43.  
  44.     char BmemoryPointer[SIZE];
  45.     DWORD BnumBytes = SIZE;
  46.     char** end = NULL;
  47.  
  48.     if (!ReadFile(stPipe, BmemoryPointer, BnumBytes, NULL, NULL))
  49.     {
  50.         //Считывает данные из указанного файла или устройства ввода / вывода (I / O).
  51.         //Чтение происходит в позиции, указанной указателем файла, если поддерживается устройством.
  52.         puts("Error! memoryPointer couldn't read\n");
  53.         CloseHandle(stPipe);
  54.         system("pause");
  55.         return -1;
  56.     }
  57.  
  58.        
  59.     LPVOID Bmemory = strtol(BmemoryPointer, &end, 16);
  60.  
  61.     //Выводим строку в консоль
  62.  
  63.     printf("Your string was:\n%s", (char*)Bmemory);
  64.  
  65.     //Показываем, что вывели
  66.     DWORD okEnd = 0;
  67.  
  68.     if (!WriteFile(stPipe, "OK", 3, &okEnd, NULL))
  69.     {
  70.         //Эта функция предназначена как для синхронной, так и для асинхронной работы.
  71.         puts("Error! Flag didn't write!\n");
  72.         CloseHandle(stPipe);
  73.         system("pause");
  74.         return -1;
  75.     }
  76.  
  77.     //Очистка
  78.  
  79.     CloseHandle(stPipe);
  80.  
  81.     system("pause");
  82.     return 0;
  83. }
Add Comment
Please, Sign In to add comment