Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
ApiInfo.cpp
Package: HookAPI [view]
Upload User: nbcables
Upload Date: 2007-01-11
Package Size: 1243k
Code Size: 3k
Category:
Hook api
Development Platform:
Visual C++
- // APIInfo.cpp: implementation of the CAPIInfo class.
- //
- //////////////////////////////////////////////////////////////////////
- #include <windows.h>
- #include "APIInfo.h"
- #include "util.h"
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- #ifdef WIN95
- APIINFO g_apiinfo_buf[1000];
- #endif
- CAPIInfo::CAPIInfo()
- {
- m_count =0;
- m_pInfo =NULL;
- }
- CAPIInfo::~CAPIInfo()
- {
- DeleteAll();
- }
- APIINFO *CAPIInfo::Add(char *module_name, char *api_name, char *my_api_name,
- int param_count, APIFUNC old_api, APIFUNC my_api, char *my_friend_api_name, int start_pos)
- {
- #ifdef WIN95
- APIINFO *pinfo =(APIINFO *)&g_apiinfo_buf[m_count];
- #else
- APIINFO *pinfo =(APIINFO *)malloc(sizeof(APIINFO));
- #endif
- strcpy(pinfo->module_name, module_name);
- strcpy(pinfo->api_name, api_name);
- strcpy(pinfo->my_api_name, my_api_name);
- pinfo->param_count =param_count;
- pinfo->old_api =old_api;
- pinfo->my_api =my_api;
- if(my_friend_api_name)
- strcpy(pinfo->my_friend_api_name, my_friend_api_name);
- else pinfo->my_friend_api_name[0] =0;
- pinfo->start_pos =start_pos;
- pinfo->f_hooked =false;
- #ifdef WIN95
- pinfo->hMutex =CreateMutex(NULL, FALSE, api_name);
- #endif
- #ifdef WINNT
- InitializeCriticalSection(&pinfo->cs);
- #endif
- pinfo->pnext =NULL;
- APIINFO *pinfo2 =m_pInfo;
- while(pinfo2 !=NULL && pinfo2->pnext !=NULL)
- pinfo2 =pinfo2->pnext;
- if(pinfo2 ==NULL) m_pInfo =pinfo; // this is head of m_pInfo
- else pinfo2->pnext =pinfo;
- m_count++;
- return pinfo;
- }
- int CAPIInfo::DeleteAll()
- {
- APIINFO *pinfo =m_pInfo, *pinfo2;
- while(pinfo)
- {
- pinfo2 =pinfo;
- pinfo =pinfo->pnext;
- #ifdef WIN95
- if (pinfo2->hMutex)
- CloseHandle(pinfo2->hMutex);
- #else
- DeleteCriticalSection(&pinfo2->cs);
- free(pinfo2);
- #endif
- }
- m_pInfo =NULL;
- m_count =0;
- return 0;
- }
- APIINFO *CAPIInfo::FindByMyAPI(APIFUNC my_api)
- {
- APIINFO *pinfo =m_pInfo;
- while(pinfo)
- {
- if(pinfo->my_api ==my_api)
- break;
- pinfo =pinfo->pnext;
- }
- return pinfo;
- }
- APIINFO *CAPIInfo::FindByOldAPI(APIFUNC old_api)
- {
- APIINFO *pinfo =m_pInfo;
- while(pinfo)
- {
- if((BYTE *)pinfo->old_api+pinfo->start_pos ==(BYTE *)old_api)
- break;
- pinfo =pinfo->pnext;
- }
- return pinfo;
- }
- APIINFO *CAPIInfo::FindByAPIName(char *api_name)
- {
- APIINFO *pinfo =m_pInfo;
- while(pinfo)
- {
- if(!strcmp(pinfo->api_name, api_name))
- break;
- pinfo =pinfo->pnext;
- }
- return pinfo;
- }
- APIINFO *CAPIInfo::FindByMyAPIName(char *my_api_name)
- {
- APIINFO *pinfo =m_pInfo;
- while(pinfo)
- {
- if(!strcmp(pinfo->my_api_name, my_api_name))
- break;
- pinfo =pinfo->pnext;
- }
- return pinfo;
- }
- int CAPIInfo::lock(APIINFO *pinfo)
- {
- #ifdef WIN95
- if((pinfo->m_hMutex =OpenMutex(MUTEX_ALL_ACCESS, FALSE, pinfo->api_name)) !=NULL)
- WaitForSingleObject(pinfo->m_hMutex, INFINITE);
- #else
- EnterCriticalSection(&pinfo->cs);
- #endif
- return 0;
- }
- int CAPIInfo::unlock(APIINFO *pinfo)
- {
- #ifdef WIN95
- if(pinfo->m_hMutex)
- {
- ReleaseMutex(pinfo->m_hMutex);
- CloseHandle(pinfo->m_hMutex);
- pinfo->m_hMutex =NULL;
- }
- #else
- LeaveCriticalSection(&pinfo->cs);
- #endif
- return 0;
- }