Błędne przekazywanie uchwytów przez zmienne środowiskowe

0

Witam! Poproszę o poradę jak poprawić błąd określony w temacie postu. Przekazuję uchwyty do potoków anonimowych pomiędzy aplikacją rodzicem a potomkiem. Zastosowałem rozwiązanie ze strony: http://www.chelpdesk.pun.pl/viewtopic.php?id=12
Przystosowałem do swoich potrzeb i w próbnych, napisanych tylko dla sprawdzenia komunikacji aplikacjach działa. Po wkomponowaniu w docelową aplikację pojawił się kłopot z "niepełnymi" uchwytami. Otóż dla przykładu, jeśli uchwyt w "rodzicu" ma wartość 0x4a4 to przekazany przez zmienne środowiskowe jest tylko 0xa4. Domyślam się, że błąd jest w sposobie rzutowania/przekształcania ale brakuje mi koncepcji gdzie i jaki. Aplikacje próbne były małe i uchwyty w nich mieściły się w jednym bajcie, aplikacja docelowa jest zdecydowanie większa więc i ilość uchwytów do obiektów większa i interesujące mnie uchwyty zajmują dwa bajty.
Poniżej kod zapisujący zmienne :

CreatePipe(&hReadPipeDwn, &hWritePipeDwn, &pipeSA, NULL);
	CreatePipe(&hReadPipeUp, &hWritePipeUp, &pipeSA, NULL);
	
	 SetEnvironmentVariable(TEXT("uchwytUp"), (LPCTSTR)&hWritePipeUp);
	 SetEnvironmentVariable(TEXT("uchwytDwn"), (LPCTSTR)&hReadPipeDwn);
	 CreateProcess(NULL,command1,NULL,NULL,TRUE,HIGH_PRIORITY_CLASS,NULL,NULL,&si,&pi)

A tu odczytujący w potomku:

 
 uchU = (LPTSTR)malloc(BUFSIZE*sizeof(TCHAR));
  uchD = (LPTSTR)malloc(BUFSIZE*sizeof(TCHAR));
  GetEnvironmentVariable(TEXT("uchwytUp"), uchU, BUFSIZE);
  GetEnvironmentVariable(TEXT("uchwytDwn"), uchD, BUFSIZE);
  uchwytUp = reinterpret_cast<HANDLE>(*uchU);
  uchwytDwn = reinterpret_cast<HANDLE>(*uchD);
    printf("%x   %x   %d    %d\n",uchwytDwn,uchwytUp,numBreaded,numbwritten);

Eksperymentowałem z różnymi BUFSIZE ale nie pomogło.

0

Windows API to nie moja działka, ale:
czy ty ustawiasz zmienną środowiskową na binarną daną i to na dodatek wpychasz tam wskaźnik na zmienną zawierającą uchwyt pipe'a czyli coś co jest wewnętrzną właściwością twojego procesu!
nawet wymuszenie tej konwersji (LPCTSTR) powinno ci dać do myślenia, że coś jest nie tak (LPCTSTR - wskaźnik na napis).

0

Witam i dzięki za zainteresowanie.
Rzeczywiście-wygląda to kreatywnie. Jak napisałem skorzystałem z przykładu w sieci. Wygląda to na zmuszenie funkcji SetEnvirontmentVariable do wpisania odpowiadających danym binarnym znakom do zmiennej środowiskowej a potem dokonaniu odwrotnego działania. Na tą chwilę przesyłam już dwubajowego rozmiaru uchwyt, dzięki funkcji SetEnvirontmentVariableW. ALe jest to mocno niepewne. Może podpowie ktoś w miarę prostą a pewniejszą konwersję?

1 użytkowników online, w tym zalogowanych: 0, gości: 1