2012-05-18 142 views
1

我有一個父進程,產生一個子進程。子進程的目標是通過終止父進程來重啓父進程,等待幾秒鐘,然後再次啓動它。我無法檢測父級是否使用管理員權限運行,但子級沒有管理員權限運行。父級擁有一個隱藏窗口,該窗口具有唯一的窗口類,通過該窗口可以找到窗口並將WM_CLOSE發送給它。然而,在某些安裝中,孩子對帶有類標識符的FindWindow()的調用失敗 - 找不到窗口。但是,通過EnumProcesses()枚舉系統中的所有進程,然後打開每個進程,調用GetModuleFileNameEx()成功查找父進程的可執行路徑,該進程是已知的並且是已修復的。但是,在進程句柄上調用TerminateProcess()將返回一個拒絕訪問錯誤(5)。設置SeDebugPrivilege失敗,因爲該子項沒有升級權限。 上述情況僅在少數測試機器上發生,在大多數機器上按預期工作 - 可以找到窗口,並試圖通過TerminateProcess()終止父進程。我的問題是 - 在某些機器上配置的子和父級之間是否存在某種隔離模式,以至於FindWindow()和TerminateProcess()失敗,還是有其他原因?無法找到窗口父進程的窗口,既不終止父母

+0

父母是否開始讓孩子作爲另一個用戶來運行? – wallyk

+0

不,作爲同一用戶運行!我通過獲取父進程和子進程的用戶名來驗證這一點,並且它是相同的。然而,域名有可能是不同的或類似的東西? –

+0

失敗(測試)機器有什麼共同之處嗎?它所成功的機器的一般特性與它所發生故障的機器的一般特性是什麼? – wallyk

回答

1

我認爲這個鏈接可以幫助你很多:) GetParentProcessID

這只是源教你從NTDLL NtQueryInformationProcess存儲功能父ID在PROCESS_BASIC_INFORMATION結構InheritedFromUniqueProcessId