2010-01-15 6 views
1

나는 사용자가 게임을 종료 한 후 특정 게임이 표시하는 광고를 자동으로 닫는 C# 응용 프로그램을 작성 중입니다. 내 프로그램은 사용자가 게임을 종료 한 것을 감지하면 게임 프로세스를 종료하여이를 수행합니다. 내 프로그램은 비슷한 일을하는 다른 사람이 작성한 Autohotkey 스크립트와 유사하지만 일부 기능과 GUI를 추가합니다.프로세스를 죽이는 두 가지 방법의 차이점은 무엇입니까?

당연히 Process.Kill 메서드를 사용했습니다. 그러나 "액세스가 거부되었습니다"예외로 실패합니다. Autohotkey 스크립트가 프로세스를 죽이는 비정상적인 방법을 사용한다는 것을 알았습니다. 나는 그것에 대해 저자에게 물었고, 그는 또한 그는 정상적인 방법으로 그 과정을 죽이는 데 어려움을 겪었다 고 말했다.

일반적인 프로세스 종료 방법이 작동하지 않는 이유는 게임에서 부정 행위를 방지하기 위해 사용하는 소프트웨어라고 생각됩니다. System.Management 네임 스페이스를 사용하여 내 프로그램에서 내 프로그램은 이제 호출 나는 WMI로 Process.KIll을 대체

; kills all process instances of a given executable name 
; COM AutoHotkey library code omitted 
KillProcessInstances(exe) 
{ 
    psvc := COM_GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
    pset := COM_Invoke(psvc, "ExecQuery", "Select * from Win32_Process Where Name = '" exe "'") 
    penm := COM_Invoke(pset, "_NewEnum") 
    Loop, % COM_Invoke(pset, "Count") 
    If COM_Enumerate(penm, pobj)=0 
    { 
     COM_Invoke(pobj, "Terminate") 
     COM_Release(pobj) 
    } 
    COM_Release(penm) 
    COM_Release(pset) 
    COM_Release(psvc) 
} 

: 여기

은 다른 사람의 스크립트 프로세스를 죽이기 위해 사용하는 AutoHotkey에 코드입니다 프로세스를 죽일 수 있습니다.

내가 이해할 수없는 것은 WMI가 Process.Kill과 다른 점이다. 나는 둘 다 일하기를 기대하거나 실패 할 것이다. 또한, 작업 관리자가 잘 프로세스를 죽일 수 있지만 그냥 Process.Kill 확실히 TerminateProcess win32 호출을 사용하는 것 같아요. 다른 사람이 다른 행동의 원인을 밝힐 수 있습니까? 중요한 경우 Windows XP를 실행하고 있습니다.

편집 : wj32는 WMI가 작동하는 이유를 설명했지만 아무도 내가 왜 작업 관리자로 프로세스를 죽일 수 있지만 내 프로그램으로는 죽일 수는 없는지 설명 할 수 있습니까?

답변

2

WMI 호출은 프로세스의 보안 컨텍스트 내에서 수행되지 않습니다. 그들은 다른 프로세스에서 처리됩니다 (Winmgmt 서비스를 추측하고 있습니다). 이 서비스는 SYSTEM 계정으로 실행되며, HackShield는 이것 때문에 종료를 계속할 수 있습니다.

+0

작업 관리자가 작업을 종료 할 수 있다는 사실은 어떻습니까? 작업 관리자에 특별한 것이 있습니까? –

관련 문제