Задать вопрос
@tex620

Как передать массив через Pipe?

Я внедряю dll файл в процесс, необходимо передавать массив DWORD из dll в другую программу.
Решил использовать пайпы.
Как передать с помощью пайп массив DWORD[2048]?

Код записи и чтения из пайпа:
void Write(LPCVOID Buffer)
{
	HANDLE hPipe;
	DWORD dwWritten;


	hPipe = CreateFile(TEXT("\\\\.\\pipe\\Pipe"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hPipe != INVALID_HANDLE_VALUE)
	{
		WriteFile(hPipe, Buffer, 1024, &dwWritten, NULL);
		CloseHandle(hPipe);
	}
}
DWORD* Read()
{
	HANDLE hPipe;
	DWORD buffer[1024];
	DWORD dwRead;


	hPipe = CreateNamedPipe(TEXT("\\\\.\\pipe\\Pipe"),
		PIPE_ACCESS_DUPLEX,
		PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,   // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
		1,
		1024 * 16,
		1024 * 16,
		NMPWAIT_USE_DEFAULT_WAIT,
		NULL);
	while (hPipe != INVALID_HANDLE_VALUE)
	{
		if (ConnectNamedPipe(hPipe, NULL) != FALSE)   // wait for someone to connect to the pipe
		{
			while (ReadFile(hPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL) != FALSE)
			{
				/* add terminating zero */
				buffer[dwRead] = '\0';
				if (buffer != NULL) {
					WriteFile(hPipe, NULL, 1, NULL, NULL);
					return buffer;
				}
				break;
				/* do something with data in buffer */
			}
		}

		DisconnectNamedPipe(hPipe);
	}
}

Этот код не рабочий. Что с ним не так? В случае с char* передает отлично.
  • Вопрос задан
  • 244 просмотра
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы