www.pudn.com > HookAPI > HookAPI.cpp


// ------------------------------------- // 
// 您如果要使用本文件,请不要删除本说明  // 
// ------------------------------------- // 
//             HOOKAPI v1.4              // 
//   Copyright 2002 编程沙龙 Paladin     // 
//       www.ProgramSalon.com            // 
// ------------------------------------- // 
 
#include  
#include "resource.h" 
 
#define MsgBox(msg) MessageBox(NULL, msg, "HookAPI - www.programsalon.com", MB_OK) 
 
BOOL CALLBACK MainDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); 
 
typedef int (WINAPI *FuncHookOneProcess2)(HWND hwndNotify, char *exe_name); 
typedef int (WINAPI *FuncUnhookOneProcess2)(char *exe_name); 
typedef int (WINAPI *FuncHookAllProcess)(); 
typedef int (WINAPI *FuncUnhookAllProcess)(); 
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{ 
	WriteProfileString("HookAPI", "exe_name", "HookAPI.exe"); 
 
	int isNT =false; 
	OSVERSIONINFO VersionInfo; 
	VersionInfo.dwOSVersionInfoSize =sizeof(OSVERSIONINFO); 
 
	if(!GetVersionEx(&VersionInfo)) 
		return false; 
 
	if(VersionInfo.dwPlatformId ==VER_PLATFORM_WIN32_NT) 
		isNT =true; 
 
	HINSTANCE hLib; 
	if(isNT) 
		hLib =LoadLibrary("HookAPINT.dll"); 
	else 
		hLib =LoadLibrary("HookAPI9x.dll"); 
	if(hLib ==NULL) 
	{ 
		MessageBox(NULL, "LoadLibrary HookAPIxx.dll failed", "HookAPI.exe", MB_OK); 
		return false; 
	} 
 
	FuncHookOneProcess2 HookOneProcess2 =(FuncHookOneProcess2)GetProcAddress(hLib, "HookOneProcess2"); 
	FuncUnhookOneProcess2 UnhookOneProcess2 =(FuncUnhookOneProcess2)GetProcAddress(hLib, "UnhookOneProcess2"); 
	FuncHookAllProcess HookAllProcess =(FuncHookAllProcess)GetProcAddress(hLib, "HookAllProcess"); 
	FuncUnhookAllProcess UnhookAllProcess =(FuncUnhookAllProcess)GetProcAddress(hLib, "UnhookAllProcess"); 
 
	if(HookAllProcess ==NULL) 
	{ 
		MsgBox("HookAllProcess ==NULL"); 
		FreeLibrary(hLib); 
		return 0; 
	} 
	 
	if(UnhookAllProcess ==NULL) 
	{ 
		MsgBox("UnhookAllProcess ==NULL"); 
		FreeLibrary(hLib); 
		return 0; 
	} 
	if(HookAllProcess() <0) 
	{ 
		MsgBox("HookAllProcesses error!"); 
		UnhookAllProcess(); 
		FreeLibrary(hLib); 
		return 0; 
	} 
	// 测试只Hook一个正在运行的程序,下面的函数已经在1.6版本中取消,但还是很有用,所以以后版本中还是会提供 
/* 
	if(HookOneProcess2(NULL, "ship.exe") <0) 
	{ 
		MsgBox("HookOneProcess failed!"); 
		return  0; 
	} 
*/ 
	/// HookAllProcesses2是针对无法截获按Ctrl-Alt_Del键时运行的任务管理器等程序的情况使用的。 
	/*if(HookAllProcesses2(1000) <0) 
	{ 
		MsgBox("HookAllProcesses error!"); 
 
		return 0; 
	}*/ 
	/*char temp[200], temp2[20], temp3[256]; 
 
	char *p =(char *)0x7FCEDCF1;//(char *)funcSHFileOperationA; 
 
	wsprintf(temp, "func:%x", p); 
	wsprintf(temp2, "%x,%x,%x,%x", *p&0xFF, *(p+1)&0xFF, *(p+2), *(p+3), *(p+4)); 
	wsprintf(temp3, "[%s], %s", temp, temp2); 
	MessageBox(NULL, temp3, "ok", MB_OK);*/ 
 
	DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc); 
 
	UnhookAllProcess(); 
	FreeLibrary(hLib); 
 
	return 0; 
} 
 
BOOL CALLBACK MainDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
	switch(msg) 
	{ 
	case WM_COMMAND: 
		switch(LOWORD(wParam)) 
		{ 
		case IDOK: 
			EndDialog(hDlg, IDOK); 
			break; 
		case ID_HIDE: 
			ShowWindow(hDlg, SW_HIDE); 
			break; 
		} 
	default: 
		break; 
	} 
 
	return FALSE; 
}