2011-09-25 6 views
5

'u kullanan bir program oluşturma Bir uygulamadaki sonuçları almak için _popen'i çağırmak istedim, ancak bu işlem boş bırakıldı.WriteConsole

Hata ayıklayıcısına baktım ve programın stdout'u kullanmak yerine konsola bir unicode dizesi yazmak için Kernel32.WriteConsoleW kullandığını öğrendim.

Nasıl yakalarım?

+0

Çocuk işleminin tanıtıcısını yeniden yönlendirip yönlendiremediğimi ve ReadConsole'u çağırabilir miyim? – user202987

cevap

0

Bir alt işlemin Çıktısını yeniden yönlendirebilmelisiniz.

STD_ERROR_HANDLE yerine STD_OUTPUT_HANDLE kullanabilir Creating a Child Process with Redirected Input and Output

Ayrıca uygulamanın göz at.

+1

Bu bağlantıya dayanarak en çok saldırıya uğramış, en karışık çözüm üzerinde çalışıyor. Teşekkürler. Temel olarak sistem ("cls") yapıyorum, daha sonra ChildPro'yu ebeveynin stdout'unu işlemek, sonra ReadConsoleOutputW kullanarak ve sonucu yeniden oluşturmak için CreateProcess'i kullanıyorum. – user202987

1

Overkill çözümü: Start'taki uygulamaya girerek WriteConsoleW'a yapılan çağrıları engeller. Muhtemelen aradığınız şey değil, ve eminim ki daha kolay bir yol var. Ama emin olacağım :)

3

WriteConsole ile üretilen çıktılar yönlendirme borusuna yazılmayacaktır. WriteConsole'a bir boru ya da dosya veya konsoldan başka bir şey için bir tutamaç verilirse, ERROR_INVALID_HANDLE (6) ile başarısız olur.

High-Level Console Input and Output Functions itibaren MSDN üzerinde

:

ReadConsole ve WriteConsole sadece konsol kolları ile kullanılabilir; ReadFile ve WriteFile diğer tutamaçlarla (dosyalar veya borular gibi) kullanılabilir. ReadConsole ve WriteConsole, yeniden yönlendirilmiş ve artık bir konsol tanıtıcısı olmayan bir standart tanıtıcıyla kullanıldığında başarısız olur.