Ahoj,
pomocí CreatePipe(....) a CreateProcess(...) vytvořím anonymní rouru a spustím Child proces. Jak Child procesu předám handle jeho konce roury? Nejde mi o přesměrování standartního vstupu/výstupu.
OS Windows 7
hu
Ahoj,
pomocí CreatePipe(....) a CreateProcess(...) vytvořím anonymní rouru a spustím Child proces. Jak Child procesu předám handle jeho konce roury? Nejde mi o přesměrování standartního vstupu/výstupu.
OS Windows 7
hu
#1 hlucheucho
jen tak letmo koukam na prototyp:
BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCTSTR lpCurrentDirectory,
_In_ LPSTARTUPINFO lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);
a asi bych se mrkl na parametr bInheritHandles
A dál? Nastavit na true stačit nebude. Co jsem vždycky našel, bylo přesměrování I/O, což znamená zapsat handle do STARTUPINFO struktury - zkoušel jsem a funguje. Rourou se mají přenést data uvedené hlavičkou ve které je deklarována délka dat. Data mohou obsahovat jakýkoliv znak. Myslím, že by bylo vhodnější používat ReadFile a WriteFile.
Ještě jsem narazil na funkci DuplicateHandle,
Předat handle jako parametr při spuštění procesu?
Ještě jsem zapomněl jednu důležitou věc: Child proces se vytváří s CREATE_NO_WINDOW jako dwCreationFlags.
Jeste u CreatePipe je nastavitelne SECURITY_ATTRIBUTES, kde je ta bInheritHandle taky. Ale zatim jsem se behem tech par minut, co na to koukam, nedostal k tomu, jak ziskat ten handle v podprocesu..
Mozna by bylo lepsi pouzit pojmenovanou rouru a predat to jako parametr.
Řešení: parent provede vše jako by child měl mít přesměrovaný vstup/výstup. Child po svém spuštění získá handle standartního vstupu
HANDLE vstup;
vstup = GetStdHandle(STD_INPUT_HANDLE);
a takto získané handle použije při volání ReadFile. Podobně lze postupovat u handle standartního výstupu.
hu
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku