윈도우즈 전역 훅
먼저 Dll이어야 하며 WH 유형의 글로벌 훅을 설정하는 인터페이스를 내보낼 수 있습니다.GETMESSAGE (이렇게 하면 모든 프로세스가 훅에 도착할 것이다). 이렇게 성공하면 시스템은 이 Dll을 getmessage가 있는 모든 프로세스에 주입합니다. 즉, 모든 프로세스에 loadlibrary를 은밀하게 호출합니다.
그리고 getmessage가 있을 때마다 리셋 함수에 리셋을 해서 처리할 수 있습니다.
훅이 필요하지 않을 때, unhook을 통해, 시스템은 훅의 프로세스를 은밀하게 freelibrary로 호출하고 dll를 마운트 해제합니다.
우리는 훅을 P로 설정하고 훅 Dll을 D로 설정하였으나 시험을 통해
P가 종료되기 전에 D의 unhook을 호출하지 않거나 P가 강제로 죽거나 끊겨도 시스템은 그 hook의 프로세스를 위한freelibrary, 즉 D에 들어갈 proc 를 호출하는 데 도움을 줄 것이다detach 중.
그러나 의외의 경우도 있다. 때때로 어떤 프로세스는 D, 예를 들어 크롬, svncache, 또는 시간이 좀 걸려야 다른 프로세스를 제거할 수 있다. (그러나 64비트 시스템은 괜찮을 것 같다.)
static HHOOK _myHook = NULL;
LRESULT CALLBACK MyHookProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
return CallNextHookEx(NULL, nCode, wParam, lParam);// HHOOK parameter is optional and ignored
}
bool hookStart()
{
if (_myHook)
return true;
_myHook = SetWindowsHookEx(
WH_GETMESSAGE,
(HOOKPROC)&MyHookProc,
GetMainDll(),
0);
if (NULL == _myHook)
{
assert(false && "[hookStart]hook false!");
return false;
}
return true;
}
bool hookEnd()
{
if (NULL == _myHook)
return true;
if (FALSE == UnhookWindowsHookEx(_myHook))
{
assert(false && "[hookEnd]unhook false!");
return false;
}
_myHook = NULL;
return true;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C# git 팁: git hook을 사용하여 코드 테스트Visual Studio를 사용하여 C# 앱을 개발하지만 일반적으로 Visual Studio git 도구 대신 git cli를 사용하여 git 명령을 실행합니다. 이 작업을 수행하는 데 큰 문제는 없지만 때때로 문제...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.